完美驱动 AppleHDA 续: AppleALC

之前的文章 完美驱动 AppleHDA 讲述了如何通过 codec 提取 PinConfigPlatforms PathMap 的方式驱动 AppleHDA, 但是这个方法有几个缺点:

  • 需要修改系统文件,S/L/EAppleHDA.kext 中不仅需要添加或替换 Layoutxx.xml.zlib 和 Platformsxx.xml.zlib, 还需要 bin-patch 打二进制补丁或在 Clover 中添加 Kext Patch;
  • 每次升级系统后都需要重新替换,如果没有使用 Clover KextPatch 还需要重新 bin-patch.

幸运的是,vit9696 的 AppleALC 项目 vit9696/AppleALC 为我们解决了这些烦恼,它不仅内置了大量已经制作好的 LayoutPlatforms 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 提取 PinConfigPathMap 了,请参考我之前的文章 完美驱动 AppleHDAlayout-id 可以随便选择,不与 AppleALC 中同型号声卡已有的 layout-id 重复即可。
当你准备好了 Layoutxx.xml.zlibPlatformsxx.xml.zlib, 不必再接着之前的办法替换原版 AppleHDA,而是加入 AppleALC 中。

  1. 首先 fork 并 clone AppleALC 项目至本地, 为了成功编译还需要 Lilu.kext;
  2. 将准备好的 Layout 和 Platforms 文件加入 AppleALC 对应声卡文件夹中,修改对应的 Info.plist, 如我这里修改了 Resources/ALC892/Info.plist, 加入新的 Layout 和 Platforms 声明;
  3. AppleALC/Resources/PinConfigs.kext/Contents/Info.plist 中加入 PinConfig 和相应的 bin-patch 声明;
  4. 编译并将编译成功的 AppleALC 放入 Clover 测试。

如果你制作成功了,建议给原项目提交一份 Pull Request 以造福其他人。
我已经提交了 P751DMG 的相关参数,同主板的 P751DM P750DMG P750DM 应该都可以使用。
具体数据, 请参考 commit d91e0ba716195aa44bb2d60334bdcf2a47ff4cf0, AppleALC 1.1.2 之后的版本直接使用 layout-id 28 即可驱动。

加入对话

2条评论

  1. 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版本呢?

    1. IOReg 中确定 layout id 已经注入了么?另外 10.13 上用的是不是最新的 Lilu.kext 和 AppleALC.kext 呢?
      正常使用的 Lilu.kext 还是建议使用 Release 版本。

留下评论

电子邮件地址不会被公开。 必填项已用*标注