积分 611 最后登录 2023-2-26 精华 0 阅读权限 40 主题 87 UID 4783896 帖子 1452 PB币 354 威望 5 贡献 0 技术 0 活跃 1520
UID 4783896 帖子 1452 PB币 354 贡献 0 技术 0 活跃 1520
发表于 2016-8-12 11:39:37
IP属地安徽
| 显示全部楼层
本帖最后由 13469977015002 于 2016-8-21 11:28 编辑
-------------------------------------------------------------------
-------------------------------------------------------------------
操作前必看:
多次安装万能驱动可能会造成不知名的原因无法加载AppleHDA,
确定方法为查看功能扩展中查看AppleHDA是否加载。
已知俩款声卡使用AppleALC无效:ALC662,CX20590
-------------------------------------------------------------------
本教程以ALC887为例,希望方法简单了能让更多小白完美驱动声卡。
在终端输入代码,下载AppleALC
git clone https://github.com/vit9696/AppleALC 复制代码 记录codec中以下内容:
①Address值
address值只有0和2俩种情况,本帖举例中为0
②在codec中搜索Pin Default
如上图如果搜到的内容中间有N/A则不记录(后方有N/A,可记录)
如上图如果搜到的内容无N/A则记录下一串数字后面的设备名称和往上找最近的node值
此处记录的内容为:Line Out at Ext Rear Node=0x14
整理下记录内容如下:
Line Out at Ext Rear Node=0x14 线路输出
Mic at Ext Rear Node=0x18 后置麦克风
Mic at Ext Front Node=0x19 前置麦克风
Line In at Ext Rear Node=0x1a 线路输入
HP Out at Ext Front Node=0x1b 耳机扬声器
这里需要解释下:
对于台式机,可能会出现多个线路输出,至少要把一个线路输出改成内置扬声器。
麦克风最多只可定义一个,所以把前置麦克风改成线路输入。
对于笔记本MIC at ext为外置麦克风,mic at in为内置麦克风,需要把外置麦克风改成线路输入。
更改后内容如下:
Line Out at Ext Rear Node=0x14 内置扬声器
Mic at Ext Rear Node=0x18 后置麦克风
Mic at Ext Front Node=0x19 线路输入
Line In at Ext Rear Node=0x1a 线路输入
HP Out at Ext Front Node=0x1b 耳机扬声器
③Vendor Id值,并将其转换为10进制
使用PlistEdit Pro打开appleALC/Resources/PinConfigs/Contents/Info.plist
搜索283904135(此数字为Vendor Id值的10进制)
如上图有不止一个ALC887声卡的配置内容,但是其中的layoutID不同。
先把layoutID=1中的ConfigData后面很长的数字复制出来
如上图将每四串数字排成1行,没串数字的第一个数字代表Address值。
示例中Address=0,所以layoutID=1不适合这款声卡。继续往下找:
每一串数字的第二位+第三位代表node值
每一行的第三串数字中的倒数第二个数字是设备的定义,定义的规则如下:
0 = Line Out
1 = Speaker
2 = HP Out
3 = CD
4 = SPDIF Out
5 = Digital Other Out
6 = Modem Line Side
7 = Modem Handset Side
8 = Line In
9 = AUX
A = Mic In
B = Telephone
C = SPDIF In
D = Digital Other In
E = Reserved
F = Other 复制代码 拿出之前记录的内容和图中对比:
Line Out at Ext Rear Node=0x14 内置扬声器
Mic at Ext Rear Node=0x18 后置麦克风
Mic at Ext Front Node=0x19 线路输入
Line In at Ext Rear Node=0x1a 线路输入
HP Out at Ext Front Node=0x1b 耳机扬声器
第一行node值为0x14,第三串数字中的倒数第二个数字是1= Speaker=内置扬声器 ,符合条件。
第二行node值为0x18,第三串数字中的倒数第二个数字是A= Mic In =内置麦克风 ,符合条件。
第三行node值为0x19,第三串数字中的倒数第二个数字是8= Line In =线路输入 ,符合条件。
第四行node值为0x1A,第三串数字中的倒数第二个数字是8= Line In =线路输入 ,符合条件。
第五行node值为0x1B,第三串数字中的倒数第二个数字是2= HP OUT =耳机扬声器 ,符合条件。
第六行为多余,删除它。
最后将整理好的数字,替换到info.plist原位置中。记录下其中的LayoutID值=5
将appleALC/Resources/ALC887中的layout5.xml.zlib(5为layoutID值)拖入zlib转换器
点击转换后ALC887文件夹会生成layout5.xml文件,使用PlistEdit Pro打开它。
记录下PathMapID值,此处为1。
将codec导入IDSDT,生成声卡驱动AppleHDAMOD.kext
打开AppleHDAMOD.kext/Contents/Resources复制里面的Platforms.xml文件到ALC887目录下。
然后将其打开更改PathMapID值,之前记录的值为1。
最后将其拖入zlib转换器进行转换完成后会生成Platforms.xml.zlib
再打开ALC887中的info.plist
CodecID值需要改成之前记录的Vendor Id值10进制=283904135
在Platforms下找到ID=5的子项,将Path后面的内容改成Platforms.xml.zlib
打开AppleALC/AppleALC.xcodeproj,生成appleALC
生成的appleALC放入四叶草
layoutID值可先尝试四叶草注入(某些电脑四叶草注入可能无效)
四叶草注入方法:
DSDT注入方法:
先给DSDT打开IRQ补丁:
#Maintained by: RehabMan for: Laptop Patches
#system_IRQ.txt
# This can fix non-working audio and also has an affect on HPET.
#
# Use this if you have issues with patched AppleHDA (required on almost all laptops)
# or if you have issues with HPET (restart after wake).
# IRQ fix
into device name_hid PNP0000 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0100 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0B00 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0103 code_regex IRQNoFlags\s\(\)\n\s+\{.*\} removeall_matched;
into device name_hid PNP0103 code_regex Name\s\(([^,]+),\sResourceTemplate\s\(\).*\n\s+\{((?:.|\n)*)\}\) replace_matched
begin
Name (%1, ResourceTemplate()\n
{\n
IRQNoFlags() { 0, 8, 11, 15 }\n
%2
})\n
end; 复制代码 搜索HDEF插入以下函数:
Method (_DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
Store (Package (0x0A)
{
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
},
"layout-id",
Buffer (0x04)
{
0x05, 0x00, 0x00, 0x00
},
"PinConfigurations",
Buffer (Zero) {}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
} 复制代码 其中layoutID可自行更改
可能需要的DTGP函数:
Method (DTGP, 5, NotSerialized)
{
If (LEqual (Arg0, ToUUID ("a0b5b7c6-1318-441c-b0c9-fe695eaf949b")))
{
If (LEqual (Arg1, One))
{
If (LEqual (Arg2, Zero))
{
Store (Buffer (One)
{
0x03
}, Arg4)
Return (One)
}
If (LEqual (Arg2, One))
{
Return (One)
}
}
}
Store (Buffer (One)
{
0x00
}, Arg4)
Return (Zero)
} 复制代码
展开阅读全文​
附件:
你需要登录 才可以下载或查看附件。没有帐号?注册
2
查看全部评分