之前的文章 完美驱动 AppleHDA 讲述了如何通过 codec 提取 PinConfig
和 Platforms PathMap
的方式驱动 AppleHDA, 但是这个方法有几个缺点:
- 需要修改系统文件,
S/L/E
下AppleHDA.kext
中不仅需要添加或替换Layoutxx.xml.zlib
和Platformsxx.xml.zlib
, 还需要 bin-patch 打二进制补丁或在 Clover 中添加 Kext Patch; - 每次升级系统后都需要重新替换,如果没有使用 Clover KextPatch 还需要重新 bin-patch.
幸运的是,vit9696 的 AppleALC 项目 vit9696/AppleALC 为我们解决了这些烦恼,它不仅内置了大量已经制作好的 Layout
和 Platforms PathMap
, 更是免去了修改系统文件和手动 bin-patch 的问题。
AppleALC
使用方法
首先在官方 wiki 页面 Supported-codecs 查找声卡型号和对应的 layout-id, 如果 AppleALC 预制的 layout 数据与你的型号并不完全对应,一般会有一两个输入输出设备有效,但其他的或多或少都存在问题。
这个列表非常不完整,仅仅标出了声卡型号和 layout-id
,但是同一声卡在不同主板上的对应着不同的 layout-id
, 所以如果你知道自己的主板/笔记本型号,请在源代码的 AppleALC/Resources/PinConfigs.kext/Contents/Info.plist
文件中搜索对应型号的注释并选用相应 layout-id
, 如果不知道具体型号和布局,只能把相应型号的 layout-id
都尝试一遍。
下载并将 AppleALC 放入 CLOVER/kexts
相应文件夹,如 CLOVER/kexts/10.12
,编辑 CLOVER/config.plist
, 加入你想使用或者尝试的 layout-id 到 Devices/Audio/Inject
位置。
<key>Devices</key>
<dict>
<key>Audio</key>
<dict>
<key>Inject</key>
<integer>28</integer>
</dict>
...
</dict>
保存重启后检查所有音频输入输出设备,包括拔插接头时内外切换状态是否正确,因为你选择的 layout-id
可能可以驱动你的部分输入输出线路,但是某些线路或着自动切换功能存在问题。
最坏的情况是 AppleALC 不支持你的声卡或者没有完全对应的 layout-id, 这个时候需要像之前一样提取 codec
信息了。
我的 P751DMG 使用的 ALC892 就是这个情况,之前作者制作的几个同型号声卡的 layout-id
没有能够完全对应的,所以就需要自己制作了。
修改 AppleALC 需要有一定的编程基础,仍然需要自己根据设备的 codec
提取 PinConfig
和 PathMap
了,请参考我之前的文章 完美驱动 AppleHDA,layout-id
可以随便选择,不与 AppleALC 中同型号声卡已有的 layout-id
重复即可。
当你准备好了 Layoutxx.xml.zlib
和 Platformsxx.xml.zlib
, 不必再接着之前的办法替换原版 AppleHDA
,而是加入 AppleALC
中。
- 首先 fork 并 clone AppleALC 项目至本地, 为了成功编译还需要
Lilu.kext
; - 将准备好的 Layout 和 Platforms 文件加入 AppleALC 对应声卡文件夹中,修改对应的
Info.plist
, 如我这里修改了Resources/ALC892/Info.plist
, 加入新的 Layout 和 Platforms 声明; AppleALC/Resources/PinConfigs.kext/Contents/Info.plist
中加入 PinConfig 和相应的 bin-patch 声明;- 编译并将编译成功的
AppleALC
放入Clover
测试。
如果你制作成功了,建议给原项目提交一份 Pull Request 以造福其他人。
我已经提交了 P751DMG 的相关参数,同主板的 P751DM P750DMG P750DM 应该都可以使用。
具体数据, 请参考 commit d91e0ba716195aa44bb2d60334bdcf2a47ff4cf0, AppleALC 1.1.2 之后的版本直接使用 layout-id 28 即可驱动。
Hi, 你好。
我的是用 Ozmosis 引导通过DSDT注入声卡 ( 同ALC892) layout-id的,10.12.6下能完美驱动,而在10.13.1下却不成功,试过0x01, 0x03, 0x05, 0x07, 0x99,这种情况好像挺矛盾的?
你在文章提到 Clover config.plist 的 inject id 应该要 和 AppleALC/Resources/PinConfigs.kext/Contents/Info.plist 的layout-id 对应吧,且要在 Supported-Codes范围内 ,搭配Lilu debug 版本进行编译吧?
另外,放入EFI的 Lilu.kext 是编译版本还是 Release版本呢?
IOReg 中确定 layout id 已经注入了么?另外 10.13 上用的是不是最新的 Lilu.kext 和 AppleALC.kext 呢?
正常使用的 Lilu.kext 还是建议使用 Release 版本。