1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Патчим AppleHDA с помощью загрузчика

Тема в разделе 'Звуковые карты', создана пользователем BIM167, 3 апр 2013.

  1. BIM167

    BIM167 iГуру

    Симпатии:
    329
    Тут будет шапка :)

    to be continue...

    Ну коль winlog выделил Клеверный патчинг HDA в отдельную тему - начнём по молясь...

    Большая часть описанного ниже имеет отношение к загрузчику ХРС равно, как и к загрузчику Клевер.

    Начнём с того, что для завода звука, на настоящем витке развития хакинтошестроения, не достаточно патчинга только с помощью загрузчика. Патичинг AppleHDA - комплекс мероприятий призванный запустить не нативный но совместимый кодек на исправленном ванильном драйвере.

    Для нормальной работы звука на основе AppleHDA нужно выполнить ряд условий (патчей) в DSDT, в самом драйвере и в его плагинах. Этими условиями являются:
    а) создание устройства HDEF в DSDT, в котором прописан наш Layout;
    б) бинарный патч AppleHDA;
    в) внесение информации о конфигурации пинов нашего кодека в плист плагина AppleHDAHardwareConfigDriver (папка PlugIns в AppleHDA.kext);
    г) внесение описания наших входов/выходов в layoutXX.xml.zlib (папка Resources в AppleHDA.kext);
    д) внесение цепочек нод, соответствующих нашим входам/выходам в Platforms.xml.zlib (папка Resources в AppleHDA.kext).

    Как справиться с пунктом "а" описано достаточно подробно в документации к Клеверу. В config.plist Клевера достаточно внести в секции ACPI патчи DTGP и HDEF, и в секции PCI прописать номер своего layout в графе HDAInjection. Подробно этой части патча касаться тут не будем, т. к. она и без этого топика достаточно подробно рассмативалась многократно и достаточно подробно описана.

    Бинарный патч (пункт "б") осуществляется путём подмены ID подходящего нативного кодека на свой. Иногда такая подмена бывает достаточно трудоёмка из-за своеобразной системы "свой-чужой" встроенной в AppleHDA. В этом случае приходится занулять ряд идентификаторов других кодеков, тем самым обходя систему идентификации, либо прописывать под свой ID прямой выход на соответствующий виджет. Подробнее об этом можно прочесть в теме: http://www.applelife.ru/threads/applehda-from-mountain-lion.36232/

    С пунктом "в" можно решить проблему имитируя легаси-кекст путём внесения соответствующей информации в info.plist Фейка, а учитывая то, что этому драйверу-инжектору самое место не в S/L/E системы, а в загрузчике, мы получим этот "легась" в рабочем состоянии сразу "из коробки", причём ещё на этапе установки системы.

    С пунктами "г" и "д" дело обстоит несколько хуже - эти патчи приходится вносить на уже установленной системе. И не смотря на то, что методика распаковки/запаковки злибов подробно рассмотрена в топике http://www.applelife.ru/threads/applehda-from-mountain-lion.36232/ , методики исправлений описания входов/выходов и цепочек необходимых для обеспечения работоспособности звука, как и методики получения рабочего пинконфига, не менялись (за исключением расположения, названия и расширения плистов) со времён Леопарда (10.5.Х), они остаются самым узким местом патчинга AppleHDA. Начнём с того, что эти патчи пока невозможно осуществить ДО установки ОС силами только лишь загрузчика, либо элементов легаси-кекста внесенными в config.plist Фейка. Не смотря на предложенный abxite в посте http://www.applelife.ru/threads/Патчим-applehda-с-помощью-clover.39406/#post-353652 способ обмана AppleHDA, этот способ не может быть использован без внесения изменений в уже установленной системе. Но именно отсутствие такой возможности и делает патчинг AppleHDA как-бы изгоем в общем ряду патчей, проводимых через загрузчик. Так например подмена ID в плистах, осуществляемая средствами Клевера, будет работать "из коробки" без вмешательства в сам драйвер ни при установке ОС, ни после оной. С AppleHDA при всём арсенале современных средств коррекции драйверов всё равно остаётся необходимость вмешательства в систему после её установки. Это вмешательство в уже установленную систему необходимо из-за того, что невозможно выделить ресурсы драйвера в отдельный легаси-кекст, или ему подобный легаси-участок плиста стороннего драйвера (например внесение легаси-участка в плист Фейка, как это делается с легаси-участком плиста AppleHDAHardwareConfigDriver.kext) - ресурсы AppleHDA должны находиться в нём самом. Не возможно, так-же, и наложение бинарного патча, т. к., по всей видимости, злибы каждый раз берутся из ресурсов драйвера и разархивируются в память средствами самой ОС уже тогда, когда загрузчик своё отработал. Соответственно добавить layoutXX.zml.zlib и Platforms.zml.zlib (переименовано по приведенному выше мануалу от abxite) можно только на уже установленной системе.

    Ну а теперь о самом главном - кто что думает по этому поводу?
     
    iDark Soul нравится это.
  2. medik

    medik Технический Специалист Команда форума

    Симпатии:
    3`186
    Это про патч плистов.
     
    volodiakon нравится это.
  3. SunKi

    SunKi GURU Гуру

    Симпатии:
    570
    Сейчас, ради интереса, создал uncompressed kernelcache, открыл его hex-редактором, и попробовал поискать в нем сначало текст из Platforms.xml, а потом последовательность байт из Platforms.xml.zlib. В обоих случаях результат нулевой.
    Похоже что если они и попадают в кэш, то не в первозданном виде.
    А если подменить допустим Platforms.xml.zlib на неработоспособный, поправить права, но не пересобирать кэш, после перезагрузки звук ломается?
     
  4. abxite

    abxite iГуру

    Симпатии:
    1`325
    А если в Кловере сделать бинарный патч AppleHDA, меняющий поиск файла с Platforms на Platform2 например? ;)
    Снимок экрана 2013-04-03 в 8.53.30.

    Решение здесь.
     
    vladlenas, SunKi и clubber_77 нравится это.
  5. SunKi

    SunKi GURU Гуру

    Симпатии:
    570
    ;)
     
  6. abxite

    abxite iГуру

    Симпатии:
    1`325
    Это, на мой взгляд более изящный вариант патчинга.

    hex: 786D6C2E7A6C на 7A6D6C2E7A6C
    В плист-редакторе XCode патч выглядит так:
    Снимок экрана 2013-04-05 в 19.16.22.
    Этот патч делает замену xml.zl на zml.zl бинарнике AppleHDA, подходит для любого ХДА-кодака, заводимого через AppleHDA.

    От пользователя требуется добавить данный патч в клевер (или другой загрузчик, поддерживающий бин-патчинг кекстов) а в AppleHDA переименовать свои Platforms.xml.zlib и layoutXX.xml.zlib в Platforms.zml.zlib и layoutXX.zml.zlib соответственно, где XX - номер вашего лэйаута.

    Это исправление для того, чтобы при обновлении Apple на заменяла ваши патченные файлы на свои.
     
    gress, John98, and1 и 5 другим нравится это.
  7. abxite

    abxite iГуру

    Симпатии:
    1`325
    Этот патч менее изящный, но тем не менее рабочий!

    Так как Apple обновляет Platforms.xml.zlib гораздо чаще чем layoutXX.xml.zlib, то можно кекст-патчером кловера (на лету) сделать такую замену байтов в AppleHDA:
    732E786D6C заменяем на 322E786D6C, затем в AppleHDA переименовываем
    Platforms.xml.zlib в Platform2.xml.zlib, благодаря этому патчу AppleHDA при запуске будет искать не Platforms.xml.zlib а Platform2.xml.zlib следовательно обновление Platforms.xml.zlib нам больше не поломает звук :)
     
    and1, GLXOZ, clubber_77 и 4 другим нравится это.
  8. SunKi

    SunKi GURU Гуру

    Симпатии:
    570
    ну вобщем как и предпологалось кекст сам уже подтягивает эти файлы с диска, в кэше их нет. а сделать пач на другие расширения - хорошая находка, только вот пинконфиг и все остальный Info.plist будет сложновато пропачить...
     
  9. abxite

    abxite iГуру

    Симпатии:
    1`325
    легась, дсдт, gfx-strings.
     
    iDark Soul нравится это.
  10. abxite

    abxite iГуру

    Симпатии:
    1`325
    Xmedik перенеси пж обсуждения связанные с AppleHDA в более подходящую тему :)
     
  11. vladlenas

    vladlenas iЮзер

    Симпатии:
    90
    abxite,
    Молоток!
    У меня сработало.
    Типо теперь,да пошли они со своими обновлениями.:D
     
  12. abxite

    abxite iГуру

    Симпатии:
    1`325
    Ага. Теперь неплохо бы обзавестись рабочим легасем, что то самому делать не хочется :)
     
  13. vladlenas

    vladlenas iЮзер

    Симпатии:
    90
    А та в Фейк закинь,спасибо CLXOZ за эту идею.
     

    Вложения:

    • Info.plist.zip
      Размер файла:
      3.5 КБ
      Просмотров:
      89
    Sergey_Galan и abxite нравится это.
  14. TimeWalker

    TimeWalker iГуру

    Симпатии:
    927
    перенесите в тему по зук в 10.8.
    у себя в кекст патчер прописал
    PHP:
    <key>MachOPatch7</key>
    <
    dict>
    <
    key>Apply</key>
    <
    integer>1</integer>
    <
    key>SystemVersion</key>
    <
    string>0x000</string>
    <
    key>Description</key>
    <
    string>Replace ACL855 with ALC888</string>
    <
    key>FileName</key>
    <
    string>AppleHDA</string>
    <
    key>Search</key>
    <
    string>8508ec10</string>
    <
    key>Replace</key>
    <
    string>8808ec10</string>
    </
    dict>
     
    <
    key>MachOPatch8</key>
    <
    dict>
    <
    key>Apply</key>
    <
    integer>1</integer>
    <
    key>SystemVersion</key>
    <
    string>0x000</string>
    <
    key>Description</key>
    <
    string>xml.zl - > aml.zl</string>
    <
    key>FileName</key>
    <
    string>AppleHDA</string>
    <
    key>Search</key>
    <
    string>786d6c2e7a6c</string>
    <
    key>Replace</key>
    <
    string>616d6c2e7a6c</string>
    </
    dict>
    и в ресурсах layout-99.xml.zlib и Platforms.xml.zlib переименовал в *.aml.zlib
    пинконфиг давно в фейке, спасибо GLXOZ и vladlenas, что когда-то надоумили.
    исход положителен. спасибо за идею, abxite! теперь по теории яблы ниочегошеньки "обновить" не могут, разве только что структуру.
     
  15. Sergey_Galan

    Sergey_Galan iГуру

    Симпатии:
    925
    Народ! Дайте оригинальный AppleHDA от бетки 10.8.4 , не терпится попробовать.
    Спасибо.
     
  16. alex1960

    alex1960 iГуру Помог материально!

    Симпатии:
    538
    Привет, Сергей, держи
     

    Вложения:

    Sergey_Galan нравится это.
  17. Gen4ig

    Gen4ig iПрофи

    Симпатии:
    110
    abxite, Спасибо тебе, работает, пинконфиг пока закинул в Fake
    После обновления на бету 10,8,4 звук остался:)
     
  18. winlog

    winlog iМодератор Команда форума

    Симпатии:
    444
    Поделишься кекстом и плистами потом?

    п.с. посты "по звуку" переношу в правильную тему!

    п.с.с. с тебя инструкция для шапки как и что сделать ;)
     
  19. iDark Soul

    iDark Soul iЮзер

    Симпатии:
    150
    По методу abxite сделал рабочий звук на оригенальном AppleHDA с подпихнутыми и переименованными платформ и лейаут злибами. Пин конфиг перенес в FakeSMC. Все работает и не боится обновлений спасибо огромное abxite! Одно но! По неизвесным мне причинам теперь нет автодетекта на наушники и микрофон и фообще в настройках пропали эти выходы. Грешу на еще один недостоющий патч но понятия не имею как его сделать.

    Для ALC889 выглядит так:
    Код:
    <key>0</key>
                <dict>
                    <key>Name</key>
                    <string>AppleHDA</string>
                    <key>Find</key>
                    <data>hQjsEA==</data>
                    <key>Replace</key>
                    <data>iQjsEA==</data>
                </dict>
                <key>1</key>
                <dict>
                    <key>Name</key>
                    <string>AppleHDA</string>
                    <key>Find</key>
                    <data>eG1sLnps</data>
                    <key>Replace</key>
                    <data>em1sLnps</data>
                </dict>
                <key>2</key>
                <dict>
                    <key>Name</key>
                    <string>AppleHDA</string>
                    <key>Find</key>
                    <data>cy54bWw=</data>
                    <key>Replace</key>
                    <data>Mi54bWw=</data>
                </dict>
     

    Вложения:

    • zlibALC889.zip
      Размер файла:
      8.1 КБ
      Просмотров:
      29
  20. Sergey_Galan

    Sergey_Galan iГуру

    Симпатии:
    925
    ALC889
    Немного опоздал, но предложу свой вариант.
    И так
    1. layout12.zml.zlib и Platforms.zml.zlib копируем в папку Resources оригинального AppleHDA.kext (AppleHDA.kext/Contents/Resources). Оригинальный AppleHDA можно скачать здесь - #16
    2. AppleHDA.kext копируем в папку Extensions (/System/Library/Extensions)
    3. ALC889Rear3.kext если на мат. плате сзади 3 аудио разъёма или ALC889Rear5.kext если на мат. плате сзади 6 аудио разъёмов (должны работать только 5), копируем в папку Extensions (/System/Library/Extensions)
    4. Восстанавливаем права например кекст утилитой.
    5. Копируем бинарный патч в конфиг плист Кловера
    6. Перезагружаемся
    Всё работает как и раньше ))))))))))))))
    Примечание: В папке Rear3 находятся layout12.zml.zlib и Platforms.zml.zlib для трёх аудио разъёмов сзади.
    В папке Rear5 находятся layout12.zml.zlib и Platforms.zml.zlib для пяти аудио разъёмов сзади.
    З.Ы. Так как благодаря Козлеку FakeSMC часто обновляется, решил через него пока не инжектировать пинконфиг, но есть и такой вариант - смотрите выше #13
    З.З.Ы. С последними версиями кловера структура конфига изменилась. Выкладываю обновлённый конфиг
     

    Вложения:

    Moorre, joedm, Qwerыч и 3 другим нравится это.

Поделиться этой страницей