Hackintosh:制作AppleALC以驱动原生AppleHDA

这篇教程一直在OneNote上躺着,休息了好长时间也该见见眼光了!

一、准备工作

1. 所需文件与工具

(1) codec:在linux中提取的信息,cat /proc/asound/card1/card#0 > ~/Desktop/codec.txt
(2) codecgraph:用于整理出节点的路径图。在使用前要先安装brew和依赖 brew install graphviz
(3) verbit.sh:将codec中的有效节点提取出来;
(4) xcode:编译工具;
(5) AppleALC项目文件,git clone https://github.com/vit9696/AppleALC
(6) PlistEdit Pro:用于修改plist文件;
(7) Lilu.kext的Release版本,在vit9696大神的GitHub项目里。

2. 整理codec文件

2.1 生成路径图

在codec目录下执行命令:./codecgraph ../codec.txt,会在codecgraph位置默认生成svg文件,打开可以看见节点路径图。

2.2 生成有效节点信息

首先给予verbit.sh权限:sudo chmod +x verbit.sh;然后是执行命令:./verbit.sh ../codec.txt > ../codec_dump.txt,打开就能看见有效节点。

二、整理路径

1. 整理有效节点

我的有效节点如下所示

有效节点

很明显0x17和0x1d为无效节点,并且去掉Modified Verbs,于是剩下的有效信息一如下

有效信息一

2. 推导路径

2.1 推导内置麦克风路径

打开最原始的codec.txt文件,查找包含内置麦克风对应的节点0x12,也就是说我们需要找的是Connection包含0x12的节点,显然发现是0x12是在0x11下的,同理再查找0x11在哪个节点包含之下。发现0x11之上没有,因此路径就是0x11 ~> 0x12。原因是0x12是麦克风节点,也就是说是最后接受声音的节点,而声音理所当然是从前一个节点传过来的,因此需要查找连接0x12的节点,也就是Connection包含0x12的节点,以此类推查找Connection包含0x11的节点,直到最后没有被Connection包含的节点,综上所得到的路径为0x11 ~> 0x12,转换成十进制就是17 ~> 18,查看svg路径图发现是0x12 ~> 0x11,不用担心,这个路径图是依据计算机从内到外的节点生成,因此路径就是推导的那样。

2.2 推导内置扬声器路径

由于扬声器是从内向外传出声音,因此与麦克风相反,第一个需要查找的节点不是Connection包含的节点,就是得到的扬声器有效节点本身,于是得到0x14,这个节点Connection包含0x0c,接着查看节点0x0c的Connection包含0x02和0x0b,一般取第一个即可,当然不放心的话可以去看看路径图,一般为0x02,再查找0x02不包含节点,同理因为0x14为最里面的节点,而扬声器声音是由内向外,因此路径0x14 ~> 0x0c ~> 0x02,转换成十进制为20 ~> 12 ~> 2

2.3 推导耳机路径

推导耳机方式与内置扬声器差不多,最终得出的路径为0x21 ~> 0x0d ~> 0x03,转换成十进制为33 ~> 13 ~> 3。注意,在查找耳机节点时候Connection会查到0x0c等已经用过的,这些应当舍弃。

三、更正ConfigData

1. 数据位置调换

将得到的有效信息一的PinDefault数据改成如图所示,就是将0x去掉,然后数字两两一组,得到有效信息二

有效信息二

之后再将两两一组的数据从后向前调换过来,如图所示有效信息三

有效信息三

2. 数据修改

节点配置说明

依据节点配置说明图对有效信息三进行修改,同时注意耳机第一个值设为3,因为这是外接设备,是接受声卡发出的声音,也就是对这个设备来说是输入,得到有效信息四

有效信息四

同时,在有效节点图上还有两个无效节点0x17和0x1d,因此需要给予屏蔽,屏蔽方法就是将此节点的ConfigData设为F0 00 00 40(F大小写均可,这是为了符合苹果规范),如有效信息五所示

有效信息五

3. 生成ConfigData

生成公式为Address+Node+71c/d/e/f+整理出来的PinDafult的两两一组的数字,得到有效信息六

有效信息六

然后考虑到输出节点上只有0x14有EAPD,且值为0x2,则需要在节点有EAPD的后面加上Address+Node+70c+EAPD值,故得到有效信息七

有效信息七

四、修改配置文件

1. 多余文件删除

首先进入下载好的AppleALC/Resources,将不属于自己声卡型号的文件删除,记得留下五个非文件夹的文件;然后进入留下的声卡型号ALC282文件夹,留下info.plist和一个layout文件和一个platform文件。分别如下所示

留下的文件
留下的文件

这样就可以修改layout和platform的文件名的数字,这里我设置成19,如下所示

重命名

2. Info.plist文件修改

修改前

修改前

修改后

修改后

3. Layout文件修改

修改前

修改前

修改后

修改后

4. Platforms文件修改

修改前

修改前

修改后

修改后

5. PinConfigs.kext/Contents/info.plist文件修改

打开这个文件,先搜索ALC282,只保留其中一个与你电脑型号接近的即可


搜索保留数据

准备好你的ConfigData数据,修改


修改

五、编译和打补丁

1. 编译

将Release版本的Lilu.kext放到AppleALC目录下

放置位置

2. 打补丁

2.1 DSDT

DSDT补丁用MacIASL打上IRQ补丁和HDEF补丁,打完后搜索LayoutID修改成19,同时在config.plist中把声卡注入改成19

2.2 Hotpatch

对于IRQ补丁来说,只需要在Clover ConfiguratorAcpi中勾选FixIPIC、FixHPET、FixRTC、FixTMR,在Patches加上

Patches添加

然后在SSDT-RMCF中将Name (AUDL, Zero)修改为Name (AUDL, 0x13)这里的0x13是LayoutID(上文中的19)的16进制,然后在SSDT-HDAU修改为

SSDT-HDAU修改

这里的0x13是LayoutID的16进制,然后在SSDT-HDEF修改

SSDT-HDEF修改

这里的0x13是LayoutID的16进制,同时在config.plist中把声卡注入改成19

至此用Xcode编译生成之后替换就可以了!!!

你可能感兴趣的:(Hackintosh:制作AppleALC以驱动原生AppleHDA)