- 在windows里使用设备管理器,点击声卡,查看属性,详细信息里找硬件_ID
- 在linux里,通过查看
/proc/asound/card*/codec*
来查看声卡的型号,例如我的电脑/proc/asound/card0/codec0
第一行为Codec: Realtek ALC1220
根据opencore指南,根据自己声卡的型号,可以先使用相同型号的alc-layout-id,看是否可以驱动声卡
目前不同声卡型号的支持alc-layout-id有这些
如果上面的alc-layout-id都不行,就需要定制AppleALC了
需要根据自己声卡的接口和pathmap生成AppleALC.kext和alc-layout-id
主要参考Github上@ycg31
这篇教程,辅助参考黑果小兵的这篇文章,以下补充定制过程中遇到的一些问题及处理方法
-
Linux:
-
首先我们最好得有一个linux环境,这样方便提取声卡的codec数据
-
在linux里,执行下面的命令,获取当前声卡可用的接口
dmesg | grep snd_hda_codec_realtek
-
在linux查看/proc/asound/card*/codec*文件,我这里有两个card,card0有两个codec,分别是codec0和codec1,通过查看codec0的首行,发现card0的codec0就是我们找的ALC1220,而card1是独显的HDMI声卡
将/proc/asound/card0/codec0导出到U盘或是其他能被macOS读取到的目录 -
如果在macOS里用codecgraph生成pathmap图会报错,这是因为macOS 12.3+的版本都移除了python2,因此需要在linux里生成pathmap(*.svg文件),将得到的pathmap导出到U盘或是其他能被macOS读取到的目录
-
-
macOS:
- 按照
@ycg31
教程生成ConfigData和verbs.txt文件,并记录verbs.txt里的DevID - 将pathmap(*.svg文件)使用浏览器打开
- 查找路径的方法:红圈节点为声音输入,蓝圈节点为声音输出,蓝色三角加线为有效信号流,这样就只有4条有效路径
- 以我的声卡为例,整理出pathmap的路径如下
有效节点 10进制 设备描述 路径 0x12 18 内置麦克风输入 8->35->18 0x14 20 耳机输出 20->12->2 0x1a 26 内置扬声器输出 26->13->3 0x1e 30 SPDIF输出 30->6 - 和linux使用dmesg得到的接口相比,少了一个0x18节点,这个应该是耳麦,有输入和输出。但是不考虑加入这个节点的路径,否则插入耳机再拔出就会切换到耳麦节点,扬声器就没法发声了
- 使用xcode编辑xml文件没法像plist文件那样变成直观的列表,可以把xml文件的后缀名改成plist再使用xcode打开,比如打开我新加入的Platforms52.xml文件,改成Platforms52.plist再打开,修改完千万记得改回xml的后缀
- 红框item1下的蓝框item0和item1代表同一组,就是一个工作另一个就自动停止输入或输出,把内置扬声器放在前面,这样开机后默认工作的就是内置扬声器
- 使用xcode打包出AppleALC.kext时要注意检查当前的项目是哪个,否则打包产物里就看不到kext了
- 按照
./gfxutil | grep HDEF
- 在config.plist里添加alc-layout-id,注意alc-layout-id要从10进制转为16进制并大小端对调
- 将定制的AppleALC.kext替换OC/Kexts里的AppleALC.kext
- 重启进入系统,随便播放音乐,看扬声器是否能发声,插入耳机再听,拔出耳机后再听
- 打开siri,跟他聊天,看麦克风是否工作