积分 1170 最后登录 2023-6-25 精华 0 阅读权限 40 主题 47 UID 1605009 帖子 1800 PB币 3116 威望 75 贡献 0 技术 101 活跃 473
UID 1605009 帖子 1800 PB币 3116 贡献 0 技术 101 活跃 473
楼主
发表于 2011-11-8 00:56:33
IP属地重庆
本帖最后由 whitegerry 于 2012-1-9 09:53 编辑
Patch过的文件列表(标绿):
AppleHDA.kext/Contents/MacOS/ AppleHDA
AppleHDA.kext/Contents/Resources/ layout665.xml
AppleHDA.kext/Contents/Resources/ Platforms.xml
AppleHDA.kext/Contents/PlugIns/AppleHDAHardwareConfigDriver.kext/Contents/ Info.plist
AppleHDA.kext/Contents/PlugIns/AppleHDAController.kext/Contents/MacOS/ AppleHDAController
说明 :
在修改本驱动之前一直用的Voodoohda,用过一段时间Vlad制作的含有三个文件的驱动,按道理说那个效果很不错,可惜每次冷启动进入系统时或刚进入系统调整音量时总会有一声爆音,就像论坛有朋友形容为爆竹声那样,尽管没有那么大声,但那啪的一声听时间长了也足让人胆颤。
所以本次修改的初衷即是为了消除XPS15机型ALC665声卡的爆音,顺便加上HDMI音频输出, 其他XPS机型大概也可以借鉴.
ALC665驱动appleHDA (下载后去掉末尾的.zip扩展名后用betterzip解压) :
AppleHDA.zip.001.zip
(1000 KB, 下载次数: 628)
AppleHDA.zip.002.zip
(301.91 KB, 下载次数: 642)
所需软件, 驱动及制作过程 ( 一. kext修改 | 二. DSDT修改 | 三. HDMI音频 | 四. 补充说明 ):
1. appleHDA.kext Lion 10.7.2 version
2. Voodoohda.kext
VoodooHDA.kext.zip
(158.5 KB, 下载次数: 174)
, 用能正常驱动你声卡的版本
3. IDSDT 生成legacyHDA, 下载: http://115.com/file/c4fkry72
4. DSDT 添加hdmi及声卡输出
一. kext修改
A. 安装VoodooHDA.kext 和AppleHDADisabler.kext (禁止加载appleHDA之用
AppleHDADisabler.kext.zip
(14.28 KB, 下载次数: 172)
),安装VoodooHDA之前先添加声卡id。
ALC665在systeminfo软件上找不到id,所以这里借助IDSDT来获取。打开IDSDT,第二行最右边关于声卡的信息可能会显示两个,其中一个会显示为未知,比如我的是未知(8086,10ec0665),这就好办了,Voodoohda的info.plist内添加这整个id就可以:<key>IOPCIPrimaryMatch</key>
<string>0x10ec06658086</string> 复制代码 B. 生成legacyHDA.kext 安装之后重启, 打开IDSDT勾选生成声卡驱动和生成legacyHDA.kext(同时会生成VoodooCodec.txt便于之后查找节点路线), 之后不选择安装.
configdata和节点信息都包含在legacyHDA.kext/Contents/ info.plist, 利用voodoohdahelper得到的vooddoohda_dump.txt内也可以理出节点信息, 但还是要重视从ubuntu导出的codec文件:
内置扬声器:21,12,2
耳机: 27,12,2
耳机: 25,13,3
内置麦克风:9,34,18
外置麦克风:8,35,26 (9,34,26)
数字输出 :30,6
11.9 更新 :
codec文件里面包含更多的连接路径, 用了dump之后我们容易忽视其他可行的节点路径, 比如:
Node 21 0x15 [Pin Complex] Speaker Connection: 0x0c* 0x0d 复制代码
按照紫米教程里是直接连接到带星号的0x0c*不用管其他连接比如0x0d, 不过我测试了一下, 把0x0d这个节点连下去也同样可以工作, 其他节点也照此处理会出现我下面这种情况:
内置扬声器: 21,12,2 (21,13,3)
耳机: 25,13,3 (25,14,4)
耳机: 27,12,2 (27,13,3) (27,14,4)
内置麦克风: 9,34,18
外置麦克风: 8,35,26 (9,34,26)
数字输出: 30,6
而这所有其他节点路径在我的声卡上都可以工作.
---------------------------------------------------------------------------------------------------------
C. 编辑修改appleHDA.kext
1. layout665.xml
复制原版的AppleHDA.kext到桌面上, AppleHDA.kext/Contents/Resources/ 下面的layoutxx.xml文件随便复制一份更名为layout665.xml,其他的layoutxx.xml可以删除.
a. 打开刚生成的legacyHDA.kext/Contents/info.plist , 复制PathMapRef节点替换layout665.xml的PathMapRef节点, 并修改LayoutID和PathMapID为665.
b. 删除Lineout和SPDIFIn, 修改LineIn为ExtMic(Linein会导致爆音), 修改Inputs下的LineIn为ExtMic, 删除Outputs下的LineOut.
2. Platforms.xml
a . 打开AppleHDA.kext/Contents/Resources/ platforms.xml, 删除pathMaps下除0以外的其他节点.
b . 复制legacyHDA.kext/Contents/ info.plist下PathMap替换platforms文件pathMaps内的PathMap节点, 注意PathMapID要修改为665.
3. AppleHDA.kext/Contents/PlugIns/AppleHDAHardwareConfigDriver.kext/Contents/ Info.plist
a. 删除 IOKitPersonalities > HDA Hardware Config Resource > HDAConfigDefault 下除0以外的其他节点.
b. 复制 legacyHDA.kext/Contents/info.plist 下 IOKitPersonalities > HDA Hardware Config Resource > HDAConfigDefault 的节点0替换掉 AppleHDAHardwareConfigDriver.kext/Contents/Info.plist 内的相应0节点.
c. LayoutID改为665, CodecID上面一行添加AFGLowPowerState, 值为03000000.
4. AppleHDA.kext/Contents/MacOS/ AppleHDA
用Hex Fiend打开AppleHDA.kext/Contents/MacOS/ AppleHDA , ctrl+f查找Hex, Find框填入6202ec10, 一共4处全部替换为6506ec10.
二. DSDT修改
这方面的修改教程非常多, 本帖为节省篇幅不再赘述.
搜索Device (HDEF), 添加Method, 其中的device-id 和layout-id 须与665对应, 0665转换为16进制即为0299, DSDT中的顺序则为99 02 00 00
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0C)
{
"device-id",
Buffer (0x04)
{
0x65, 0x06, 0xEC, 0x10
},
"built-in",
Buffer (One)
{
0x00
},
"layout-id",
Buffer (0x04)
{
0x99, 0x02, 0x00, 0x00
},
"model",
Buffer (0x07)
{
"alc665"
},
"PinConfigurations",
Buffer (Zero) {},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
} 复制代码 至此, 删除之前安装的voodoohda.kext和AppleHDADisabler.kext, 然后安装applehda.kext, 重启之后声卡就能正常工作了.
为什么会有两个内建麦克风呢, 因为有一个线路音频输入如果开启的话开机爆音无法消除, 只有退而求其次改为内建麦克风, 当然这个可以正常工作, 外部音频接入之后可以录音, 其实它就是音频输入接口.
由于驱动可能因为各方面的原因不会十分完美, 所以日志内可能出现多种Sound assertion的信息, 不过大致是不影响使用的. 如果你想除掉这些信息, 可以二进制编辑AppleHDA 和 AppleHDAController, 查找出错的语句, 用相同位数的0来替换.
三. HDMI音频
A. 编辑修改appleHDA.kext , 打开 AppleHDAHardwareConfigDriver.kext/Contents/Info.plist, FuncGroup 值改为3.
B. 编辑AppleHDA.kext/Contents/MacOS / AppleHDA, 用Hex Fiend打开AppleHDA, Find框填入0A00DE10, 全部替换为1400DE10(xps15板载GT435m显卡HDMI的id为10DE0014).
C. DSDT 中显卡/声卡及Device (HDAU)部分有hda-gfx代码 "hda-gfx",
Buffer (0x0A)
{
"onboard-1"
} 复制代码 D. DSDT 中显卡部分添加 "@1,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
}, 复制代码 完整代码如下: Method (_DSM, 4, NotSerialized)
{
Store (Package (0x2C)
{
"@0,AAPL,boot-display",
Buffer (Zero) {},
"AAPL,slot-name",
Buffer (0x09)
{
"PCIe x16"
},
"@0,backlight-control",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"@0,pwm-info",
Buffer (0x18)
{
/* 0000 */ 0x02, 0x18, 0x00, 0x64, 0x90, 0x59, 0x02, 0x00,
/* 0008 */ 0x08, 0x52, 0x00, 0x00, 0xA5, 0x1C, 0x00, 0x00,
/* 0010 */ 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
},
"@0,display-cfg",
Buffer (0x04)
{
0x03, 0x01, 0x00, 0x00
},
"AAPL,aux-power-connected",
Buffer (0x04)
{
0x01, 0x00, 0x00, 0x00
},
"@0,built-in",
Buffer (Zero) {},
"@0,compatible",
Buffer (0x0B)
{
"NVDA,NVMac"
},
"@0,device_type",
Buffer (0x08)
{
"display"
},
"@0,name",
Buffer (0x0F)
{
"NVDA,Display-A"
},
"@0,use-backlight-blanking",
Buffer (Zero) {},
"@1,can-hot-plug",
Buffer (Zero) {},
"@1,compatible",
Buffer (0x0B)
{
"NVDA,NVMac"
},
"@1,device_type",
Buffer (0x08)
{
"display"
},
"@1,connector-type",
Buffer (0x04)
{
0x00, 0x08, 0x00, 0x00
},
"@1,name",
Buffer (0x0F)
{
"NVDA,Display-B"
},
"NVCAP",
Buffer (0x14)
{
/* 0000 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
/* 0008 */ 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
/* 0010 */ 0x00, 0x00, 0x00, 0x00
},
"VRAM,totalsize",
Buffer (0x04)
{
0x00, 0x00, 0x00, 0x80
},
"device_type",
Buffer (0x0C)
{
"NVDA,Parent"
},
"model",
Buffer (0x10)
{
"GeForce GT 435M"
},
"rom-revision",
Buffer (0x0F)
{
"70.16.25.00.25"
},
"hda-gfx",
Buffer (0x0A)
{
"onboard-1"
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
} 复制代码 更多可以参考附件中DSDT的代码.
DSDT.aml.zip
(17.22 KB, 下载次数: 97)
四. 补充说明
因为mbp电源管理的原因, 声卡在空闲的时候会睡眠, 唤醒之后会有很轻的不容易注意到的一声pop音, 不过这比爆音好太多了, 如果你不是个完美主义者这个问题可以略去. 如果这个声音无法忍受, 解决办法有两个:
1. 建议安装antipop
antipop-1.0.2.dmg.zip
(11.98 KB, 下载次数: 93)
, 作者地址http://www.tomsick.net/projects/antipop.html
2. 修改smbios为macpro3,1/macpro4,1/macpro5,1,改了机型之后要注意cpu能否降频和AGPM显卡电源管理是否启用(不建议).
展开阅读全文​
11
查看全部评分