本帖最后由 jingehongyan 于 2012-3-28 12:52 编辑
前几天爬楼终于弄好了dell n4010的10.6.2版的AppleHDA驱动,过程就不详细说了,教程好多,可以参考,然后又折腾了下,今天弄好了10.7.3的驱动,下面主要说说关于dell n4010 ALC269的驱动修改的关键部分,来尽量使用苹果的原生驱动
这个驱动里含有HDAEnabler.kext,应该不用改dsdt,如果要的话在dsdt中添加或修改这些就行了- Device (HDEF)
- {
- Name (_ADR, 0x001B0000)
- OperationRegion (HDAR, PCI_Config, 0x4C, 0x10)
- Field (HDAR, WordAcc, NoLock, Preserve)
- {
- DCKA, 1,
- Offset (0x01),
- DCKM, 1,
- , 6,
- DCKS, 1,
- Offset (0x08),
- , 15,
- PMES, 1
- }
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x0C)
- {
- "built-in",
- Buffer (One)
- {
- 0x01
- },
- "codec-id",
- Buffer (0x04)
- {
- 0x69, 0x02, 0xEC, 0x10
- },
- "layout-id",
- Buffer (0x04)
- {
- 0x0D, 0x01, 0x00, 0x00
- },
- "device-type",
- Buffer (0x34)
- {
- "Realtek ALC269 @ Intel 5 Series/3400 Series Chipset"
- },
- "PinConfigurations",
- Buffer (Zero) {},
- "hda-gfx",
- Buffer (0x0A)
- {
- "onboard-1"
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
- }
复制代码
我这里用的LayoutID和PathMapID是269(0x01 0x0D),没有意义,可以改,只要dsdt关联LayoutID关联PathMapID,也就是说通过dsdt中的codec-id和layout-id确定驱动要使用的PathMapRef,然后根据其下的PathMapID确定要使用的PathMaps,由此就可以知道这些数字怎么设置,改成自己想要的数字,,,话说回来ALC269的codec-id是0x10 0xEC 0x02 0x69(283902569)是十六进制的,把layout-id设为269(这样一个实际上莫名其妙的十进制数)对硬件识别是没有用处的,改成12(0x0C)也行(传统上经常别人做的驱动是这样的,大概因为在原版里这些都是10EC的原因吧),codec-id是必须和硬件对应的,,,有时同一个codec-id会有多个layout-id对应,这是为了适应不同的机子,,,这些数字可能会让人混淆,请清楚理解含义
下面是几个关键点
要想修改成功,主要是3个部分数据,ConfigData,Layout(PathMapRef),PathMaps,在10.6.2中是在AppleHDA.kext/Contents/PlugIns/AppleHDAHardwareConfigDriver.kext/Contents/Info.plist和AppleHDA.kext/Contents/PlugIns/AppleHDAPlatformDriver.kext/Contents/Info.plist中,而后来的包括Lion已经没有了后者,相关信息在AppleHDA.kext/Contents/Resources/中的各个xml文件中体现,用的是Platforms.xml和layout269.xml其它可删除(269和其使用的LayoutID要一致,原版是没有的,可以用某个修改就行了)具体过程请爬楼
还有很重要的一点就是可能要对AppleHDA.kext/Contents/MacOS/AppleHDA可执行二进制文件进行一点修改,用HEX(十六进制)编辑器或者命令sudo perl -pi -e 's|\x83\x19\xd4\x11\x00\x00\x00\x00|g' /System/Library/Extensions/AppleHDA.kext/Contents/MacOS/AppleHDA
sudo perl -pi -e 's|\x84\x19\xd4\x11\x69\x02\xec\x10|g' /System/Library/Extensions/AppleHDA.kext/Contents/MacOS/AppleHDA
也就是用perl的正则表达式替换掉可执行二进制文件AppleHDA中的一些数据,将0x83 0x19 0xd4 0x11替换为0x00 0x00 0x00 0x00,将0x84 0x19 0xd4 0x11替换为0x69 0x02 0xec 0x10(10EC:0269反序)
这一步非常重要,在10.7.3中使用,版本之间的区别主要在此,原先不成功的原因就是修改AppleHDA文件的方法有所变动,这里是参考了alc892在10.7.2、10.7.3下的驱动AppleHDA.kext。感谢之~
现在说下各个版本修改中不变的东西
ConfigData,它是驱动最基本的信息,用以驱动正确的输入输出引脚,这个是从codec.txt的Pin Default的信息整合修改而来,有一定的规范和格式,可以参考教程自己提取,这里贴出来供以后修改
01471C40 01471D01 01471E13 01471F99 01871C20 01871D10 01871E81 01871F03 01971C10 01971D01 01971EA0 01971F99 02171C50 02171D10 02171E21 02171F03 01470C02
我去掉了[N/A]这样没有端口的节点(加上也不错,反正系统信息里不会显示,貌似对笔记本用户没用,没有复杂的各种前后面板,多声道用的),我们这里有,0x14(20)是内置音响(IntSpeaker),0x18(24)是线路输入(LineIn),0x19(25)是内置Mic(Mic),0x21(33)是耳机(Headphone),,,注意,codec中0x18节点本身也是MicIn,但必须修改成LineIn才能工作,就是由A(Mic)改成8(LineIn)
ConfigData正确之后,就可以在系统信息中看到正确的输入输出端口等信息
Layout下的PathMapRef,在10.7.3中就是layout269.xml里的PathMapRef,这项有关声卡输入输出的控制信息等,在修改的时候要特别注意如果在codec.txt中有 Pin-ctls: 0x24: IN VREF_80形如这样的信息,看清楚是在0x18下的就要在该节点下添加MuteGPIO数值,
MuteGPIO值是这样得出的
80 + 0100 + 18 =50010018 转为10进制 1342242840
(VREF_80对应的16进制数50) 固定 节点0x18
所以0x18(LineIn)下就要如此添加项,同理0x19(Mic)也要如此,计算值为1342242841(明显+1就行了),最开始修改的时候,就是没有注意到这个所以输入设备没有控制,这里是仔细看了一步一步教你搞定仿冒声卡【针对新手】,又感谢之~
PathMaps,节点图,在设备工作的流程中,各结点负责不同的工作,,,还 要 和 其 它 节 点 连 接 才 能 正 常 工 作,这就要靠节点图来告诉驱动怎样做,这个关系可以通过一些软件来分析,下面是分析和试验得到节点图 IntSpeaker 2,12,20 (3,13,20) Headphone 2,12,33 (3,13,33) LineIn 24,35,8 (24,34,9) Mic 25,35,8 (25,34,9)
括号里的都是可用的,用哪个都行,与其它设备重复也行(台式机多声道有其它讲究),比如内置音响和耳机同时用一样的前端节点也是可以的
有这些信息再参考各位大神的教程就可以做出我们驱动来了
以上做出的驱动就已经可以满足正常需要了,关键我们是从原版改的,起码在一般情况下比Voodoo强,尤其是Mic降噪功能顺利打开,并且内置Mic的噪声明显小了,也可以调节输入音量了
目前存在的一些问题
睡眠唤醒后内置音响没有声音,其它的正常
录音没问题,但QQ语音貌似不太流畅,不确定,我不太常用
还有就是HDMI音频,这个接口的显示器家里有,现在没有也没办法测试
求大神测试和完善,预先感谢之~
AppleHDA_10.7.3自动版.kext.zip
(1.35 MB, 下载次数: 1635)
AppleHDA_10.7.3半自动版.kext.zip
(1.35 MB, 下载次数: 130)
自动版和半自动版没有大的区别,都是输出自动切换,输入可以根据需要选择,如果修改了dsdt,可以将PlugIns中的HDAEnabler.kext删除
以上
补充内容 (2012-3-29 22:57):
HDMI输出的关键是在dsdt上,在合适的位置添加HDAU device,并且修改HDEF device和GFX0 device等,现在在系统信息声卡里有了HDMI/DisplayPort输出字样,在声音里虽然没有HDMI选项,猜想是不影响的,现在没有设备测试
补充内容 (2012-4-19 12:19):
sudo perl -pi -e 's|\x83\x19\xd4\x11|\x00\x00\x00\x00|g' /System/Library/Extensions/AppleHDA.kext/Contents/MacOS/AppleHDA
感谢aurorae提醒,原文命令少了“|”分隔符,,另一个命令也是 |