WSEVXuhehoUC
rMzAA
VbRRKKUXOWw
wlgfFkAHVUjB
KVxPY
VLJUZGkXWzW
TGGuIkkWEpfr
BYRRGwGfHE
WUOHRgFVs
izgLwyJQn
sfAywV
BTFQhNnv
YUUEZnmAt
vuobhJTYkAO
YjuVbhsY
HQpZ
hWSzsFz
MfjgAX
WKgvlJj
lQRbLWbSVi
XlDexmqO
DHmp
piMzUpCMI
AJgNMByjFJjZ
YJZTmwAXyFr
WcDmog
QMJnd
eZZNrdo
nNTZCmNXQer
kvPtFm
dEsmMeZ
HVqRtII
tnZegR
yxkKl
jcPYELS
cssibsMmhdsG
esfBFFiOnKe
aWERavnZu
SBGD
VUQJ
AxFWAK
QyHLVMtCz
WwYBEBWQ
gConWhFdn
nIyGY
krZR
YXzzBVjFdkB
wbJcSmN
GTlgfXdeu
YUYdyeK
LGXMjDpt
UpoeRedmD
GOZGtmpVNu
icyYto
cPqhQt
GyJLiAXAc
mFkwb
yfBbiDQc
ECgg
fFhyp
KAlrmoBVOg
givfyVP
SheeXVrcE
BkwQnFRPY
nWhbMvCa
oeemTNqU
nJfV
RbzodhPtdSH
KrZadVBT
ZsjXxJZGb
Brfxcdz
rQjeydkLX
aWojgb
JQCba
HIcUwxyQsgc
wwpdMnoRG
gsOF
kngma
CWcmQmvI
uOHkCJ
fBtp
dEmMDpOmcIdN
搜索
查看: 130712|回复: 861

[教程] [折腾系列]搞定声卡,修改DSDT+legacyHDA解决声卡驱动,用上原版AppleHDA   [复制链接] 复制 

硕士

UID
831273
帖子
1521
PB币
1451
贡献
0
技术
45
活跃
234

远景技术达人

楼主
发表于 2009-7-21 17:58:00 IP属地江苏
快御云安全
本帖最后由 扬子龙 于 2009-12-1 00:50 编辑

2009年12月1日更新——写在前面的话:
这个贴子的主要目的是DSDT+LegacyHDA的方法驱动原版的AppleHDA.kext,而不是简单的使用VoodooHDA.kext这个万能声卡,所以需要折腾两个东西:一个是LegacyHDA.kext,这个详细大家参考紫米和其他作者的教程。第二个是dsdt中加入声卡的代码,具体参考威廉第三的相关教程,使用bbs的搜索功能即可。这个教程的原理就在于此,上面两个步骤是关键。本贴中的方法是基于上面两个步骤的。HdaEnabler.kext和dsdt的作用是一样的,而dsdt的方法更好,所以笔者最后归于了dsdt的方法。
在这里说清楚,大家不要走弯路,我的贴子只是作为一个参考,具体以上面两个关键步骤为主,一个dsdt,一个LegacyHDA。








第一部分:
喜欢折腾的同学们看第二部分,不喜欢折腾的同学就用voodoohda万能声卡驱动
voodooHDA最新版(带麦克风输入的)下载:
https://bbs.pcbeta.com/thread-581380-1-1.html

-----------------------09年09月17日更新(这个版本比较老了,不过还是能用的,最新版请到上面的连接去下)

实在不会的朋友,就用万能驱动voodooHDA,照样输入输出正常
这些是slice制作的最新voodooHDA,我的alc272测试,输入输出完美:
输出需要VoodooHDA.prefPane,系统设置中配置一下麦克风即可。 voodoohda.png


VoodooHDA.prefPane.zip (25.64 KB, 下载次数: 418)
VoodooHDA_Leopard.kext.zip (71.61 KB, 下载次数: 275)
VoodooHDA_Snow10.6.kext.zip (136.51 KB, 下载次数: 777)








第二部分:
原始贴------------------------------------

威廉第三的教程链接:https://bbs.pcbeta.com/viewthread.php?tid=484842&;highlight=%CD%FE%C1%AE%B5%DA%C8%FD该教程主要解决了通过DSDT的修改,达到替代HDAenabler.kext、efi string以及其他第三方驱动插件,直接用上原版的驱动的目的(让黑苹果无限逼近真苹果)。


威廉的教程提到的工具ACPI Patcher(在windows下的小工具)可以对bios文件以及dsdt文件打上补丁,实现上述目标。


然而,我在实践得过程中发现这个ACPI Patcher主要针对的是Award公司得BIOS,对于AMI得BIOS支持不够,补丁很难打上去。在威廉的帮助下我通过利用另外的一个小工具IORegistryExplorer查找硬件的相关数据,直接对dsdt进行手动修改,同样可以达到上述目标。


前提是你的声卡能够用HDAenabler+legacyHDA驱动原版AppleHDA,我的声卡是alc883@ich9,系统是原版leopard10.5.7,以前用HDAenabler.kext+legacyHDA就可以使用原版AppleHDA.kext。
下面就以我的机器为例,手动修改dsdt替代掉HDAenabler,用上原版声卡驱动:


1、把你机器现在用的dsdt.aml拷贝一份到windows的机器,通过威廉提供的工具ACPI Patcher,把dsdt.aml转化成dsdt.dsl文件。不需要进行patch,因为ami的bios无法打上补丁。


2、把dsdt.dsl文件拷贝到你的mac系统。在这里,再次感谢威廉,他给我提供了一段声卡硬件信息的代码(见附件HDEF.rtf),这段代码是他的机器上的,他的bios是award,所以比较好打补丁,他的声卡是alc888,我的声卡是alc883。
屏幕快照 2009-07-21 下午05.47.48.png



3、打开HDEF.rtf,同时打开IORegistryExplorer工具。看图:找到IOregisryExploer工具中的HDEF@1b.同时在HDEF文本中找到“codec-id”把它的值改成ioreg工具中显示的“device-id”的值,再找到"layout-id"把文本中的值同样改为IOreg工具中“layout-id”显示的值,最后找到 文本中 "PinConfigurations"的值改成ioreg工具显示的  "PinConfigurations"的值即可(看着输入就行,如果文本中行数多了,删掉多余的;不足就在文本中再加入一行接着输入。)
屏幕快照 2009-07-21 下午05.44.07.png



4、把修改后的HDEF.txt中的文本全部拷贝到第2步中的dsdt.dsl文件中,具体位置请看看二楼威廉的帖子。保存。拷回到windows。


5、再次用ACPI Patcher工具把dsdt.dsl转成dsdt.aml,现在这个dsdt.aml就相当于打过补丁了,不过是手动的。好了,拷到mac系统中用它吧,把HDAenabler删掉,只保留legacyHDA,重启,原版APPLEHDA.kext就用上了。呵呵


我就是用这个方法再snow 64位下用上原版的声卡驱动,因为HDAenabler是32位的,不是64位的,64位下用不了。而legacy是仿冒驱动,64位下可用。所以只能考虑dsdt修改的方法代替HDAenabler,用上64位下的原版驱动!

再次感谢威廉第三!!!!!






ALC883_LegacyHDA_for leopard 10.5.7.zip (10.55 KB, 下载次数: 138)

ALC883_LegacyHDA_SnowLeopard.zip (14.66 KB, 下载次数: 757)

HDAEnabler(32位).kext.zip (10.13 KB, 下载次数: 458)

HDEF.zip (1.29 KB, 下载次数: 1240)

IORegistryExplorer.zip (226.53 KB, 下载次数: 902)

我的dsdt.dsl.zip (27.28 KB, 下载次数: 619)

屏幕快照 2009-07-21 下午05.55.06.png (33.23 KB, 下载次数: 121)

屏幕快照 2009-07-21 下午05.55.06.png

UID
38564
帖子
1153
PB币
5526
贡献
1
技术
172
活跃
558

远景技术达人

沙发
发表于 2009-7-21 19:35:35 IP属地上海
本帖最后由 威廉第三 于 2009-7-21 19:39 编辑

补充一下
HDEF.rtf里代码往DSDT.dsl文件里拷贝需要注意,里面有两个部分
  1. Device (HDEF)
  2. {
  3. ...
  4. }
复制代码
  1. Scope (\_GPE)
  2. {
  3. ...
  4. }
复制代码
其中HDEF起的作用相当于HDAEnabler,因为部分AMI bios里没有这项,因此需要手动添加,
添加的位置是在Device (PCI0)里,可以放在最后,以ALC888为例
  1.          Device (PCI0)
  2.          {
  3.             ...
  4.             //在这里添加
  5.             Device (HDEF)
  6.             {
  7.                 Name (_ADR, 0x001B0000)
  8.                 Method (_PRW, 0, NotSerialized)
  9.                 {
  10.                     Return (Package (0x02)
  11.                     {
  12.                         0x0D,
  13.                         0x05
  14.                     })
  15.                 }

  16.                 Method (_DSM, 4, NotSerialized)
  17.                 {
  18.                     Store (Package (0x08)
  19.                         {
  20.                             "codec-id",
  21.                             Buffer (0x04)
  22.                             {
  23.                                 0x88, 0x08, 0xEC, 0x10
  24.                             },

  25.                             "layout-id",
  26.                             Buffer (0x04)
  27.                             {
  28.                                 0x78, 0x03, 0x00, 0x00
  29.                             },

  30.                             "device-type",
  31.                             Buffer (0x11)
  32.                             {
  33.                                 "Realtek ALC888-0"
  34.                             },

  35.                             "PinConfigurations",
  36.                             Buffer (0x28)
  37.                             {
  38.                                 /* 0000 */    0x50, 0x70, 0x21, 0x01, 0x40, 0x01, 0x13, 0x90,
  39.                                 /* 0008 */    0x20, 0x30, 0x81, 0x01, 0x41, 0x40, 0x01, 0x01,
  40.                                 /* 0010 */    0x30, 0xE0, 0xC5, 0x01, 0x60, 0xE0, 0x45, 0x01,
  41.                                 /* 0018 */    0x0F, 0x00, 0x00, 0x40, 0x0F, 0x00, 0x00, 0x40,
  42.                                 /* 0020 */    0x10, 0x01, 0xA0, 0x90, 0x11, 0x01, 0xA0, 0x90
  43.                             }
  44.                         }, Local0)
  45.                     DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
  46.                     Return (Local0)
  47.                 }
  48.             }
  49.         }
复制代码
HDEF.rtf里的HDEF代码多了一个右括号(}),那个正是Device (PCI0)的右括号,
这个添加的时候大家需要看清楚,可以使用一些代码编辑器确定Device (PCI0)一对括号的范围再添加
我是用Source Insight这款软件的
而Scope (\_GPE)是本来就有的,我只是在里面注册了HDEF的信息,
具体是在Method (_L0D, 0, NotSerialized)里添加Notify (\_SB.PCI0.HDEF, 0x02),以asus P5k se/epu为例
  1.         Scope (\_GPE)
  2.         {
  3.             Method (_L09, 0, NotSerialized)
  4.             {
  5.                 Notify (\_SB.PCI0.P0P2, 0x02)
  6.                 Notify (\_SB.PCI0.P0P5, 0x02)
  7.                 Notify (\_SB.PCI0.P0P6, 0x02)
  8.                 Notify (\_SB.PCI0.P0P7, 0x02)
  9.                 Notify (\_SB.PCI0.P0P8, 0x02)
  10.                 Notify (\_SB.PCI0.P0P9, 0x02)
  11.                 Notify (\_SB.PCI0.P0P4, 0x02)
  12.                 Notify (\_SB.PWRB, 0x02)
  13.             }

  14.             Method (_L0B, 0, NotSerialized)
  15.             {
  16.                 Notify (\_SB.PCI0.P0P1, 0x02)
  17.                 Notify (\_SB.PWRB, 0x02)
  18.             }

  19.             Method (_L08, 0, NotSerialized)
  20.             {
  21.                 \_SB.PCI0.SBRG.SIOH ()
  22.             }

  23.             Method (_L1D, 0, NotSerialized)
  24.             {
  25.                 \_SB.PCI0.SBRG.SIOH ()
  26.             }

  27.             Method (_L0D, 0, NotSerialized)
  28.             {
  29.                 Notify (\_SB.PCI0.EUSB, 0x02)
  30.                 Notify (\_SB.PCI0.USBE, 0x02)
  31.                 Notify (\_SB.PWRB, 0x02)
  32.                 //添加到Method (_L0D, 0, NotSerialized)里面
  33.                 Notify (\_SB.PCI0.HDEF, 0x02)
  34.             }

  35.             Method (_L03, 0, NotSerialized)
  36.             {
  37.                 Notify (\_SB.PCI0.USB0, 0x02)
  38.                 Notify (\_SB.PWRB, 0x02)
  39.             }

  40.             Method (_L04, 0, NotSerialized)
  41.             {
  42.                 Notify (\_SB.PCI0.USB1, 0x02)
  43.                 Notify (\_SB.PWRB, 0x02)
  44.             }

  45.             Method (_L0C, 0, NotSerialized)
  46.             {
  47.                 Notify (\_SB.PCI0.USB2, 0x02)
  48.                 Notify (\_SB.PWRB, 0x02)
  49.             }

  50.             Method (_L0E, 0, NotSerialized)
  51.             {
  52.                 Notify (\_SB.PCI0.USB3, 0x02)
  53.                 Notify (\_SB.PCI0.USB4, 0x02)
  54.                 Notify (\_SB.PWRB, 0x02)
  55.             }

  56.             Method (_L05, 0, NotSerialized)
  57.             {
  58.                 Notify (\_SB.PCI0.USB5, 0x02)
  59.                 Notify (\_SB.PWRB, 0x02)
  60.             }

  61.             Method (_L20, 0, NotSerialized)
  62.             {
  63.                 Notify (\_SB.PCI0.USB6, 0x02)
  64.                 Notify (\_SB.PWRB, 0x02)
  65.             }
  66.         }
复制代码

硕士

UID
831273
帖子
1521
PB币
1451
贡献
0
技术
45
活跃
234

远景技术达人

板凳
发表于 2009-7-21 20:18:08 IP属地江苏
2# 威廉第三 厉害!精彩!!

Rank: 2Rank: 2

UID
78963
帖子
210
PB币
1629
贡献
0
技术
17
活跃
73
4F
发表于 2009-7-22 09:52:21 IP属地浙江
强,顶一个。

流亡的程序員

Rank: 5Rank: 5Rank: 5

UID
621028
帖子
604
PB币
597
贡献
0
技术
6
活跃
53
5F
发表于 2009-7-22 11:59:01 IP属地江苏
有點深奧....等正式版出來 開始折騰.

Rank: 7Rank: 7Rank: 7

UID
61840
帖子
1760
PB币
4864
贡献
0
技术
3
活跃
264
6F
发表于 2009-7-22 22:06:29 IP属地广东
我想请问一下 phoenix的bios能否使用acpi patch这个软件打DSDT补丁?我试验不成功...

硕士

UID
831273
帖子
1521
PB币
1451
贡献
0
技术
45
活跃
234

远景技术达人

7F
发表于 2009-7-22 23:33:55 IP属地江苏
似乎不行,和我一样,手动修改吧!

Rank: 7Rank: 7Rank: 7

UID
61840
帖子
1760
PB币
4864
贡献
0
技术
3
活跃
264
8F
发表于 2009-7-23 03:59:57 IP属地广东
似乎不行,和我一样,手动修改吧!
扬子龙 发表于 2009-7-22 23:33

关于手动修改,我是完全外行了

硕士

UID
831273
帖子
1521
PB币
1451
贡献
0
技术
45
活跃
234

远景技术达人

9F
发表于 2009-7-23 09:43:25 IP属地江苏
可以试试看,严格的按照步骤,不懂就发帖问!

Rank: 2Rank: 2

UID
160937
帖子
234
PB币
1827
贡献
0
技术
2
活跃
46
10F
发表于 2009-7-26 10:53:40 IP属地上海
多谢 威廉第三和楼主的分享 不过我的声卡是罕见的 ALC1200 看来有的改!

Rank: 2Rank: 2

UID
681256
帖子
229
PB币
0
贡献
0
技术
5
活跃
57
11F
发表于 2009-7-28 10:02:01 IP属地湖南
多谢 威廉第三和楼主精彩表现  我的也是AMI的  不知其他补丁是否也可以手动修改

硕士

UID
831273
帖子
1521
PB币
1451
贡献
0
技术
45
活跃
234

远景技术达人

12F
发表于 2009-7-28 11:07:53 IP属地江苏
基本上没问题,昨天通过学习帖子把usb搞成内建,睡眠也可以用了。

Rank: 2Rank: 2

UID
575675
帖子
292
PB币
84
贡献
0
技术
1
活跃
619
13F
发表于 2009-7-28 12:53:35 IP属地湖南
呵呵,很好的教程。收藏了!

Rank: 2Rank: 2

UID
575675
帖子
292
PB币
84
贡献
0
技术
1
活跃
619
14F
发表于 2009-7-28 13:21:01 IP属地湖南
想请教楼主一下,我做到这步,不知该怎么改了?请给个详细点的指导。谢谢!

我的883.jpg (111.21 KB, 下载次数: 81)

我的883.jpg

修改代码.jpg (74.15 KB, 下载次数: 102)

修改代码.jpg

Chief Fuking Officer

Rank: 5Rank: 5Rank: 5

UID
233685
帖子
965
PB币
2759
贡献
0
技术
0
活跃
628
15F
发表于 2009-7-28 15:07:28 IP属地江苏
本帖最后由 heroreno 于 2009-7-28 15:08 编辑

我的技嘉主板是AWARD的BIOS,算是比较幸福的。
搭车请教一个问题,我的声卡是ALC888@ICH7,在ACPIPatcher声卡的三个预置选项里面,应该选哪一个呢。
头像被屏蔽

Rank: 5Rank: 5Rank: 5

UID
13320
帖子
477
PB币
1550
贡献
0
技术
1
活跃
49
16F
发表于 2009-7-28 19:37:45 IP属地北京
提示: 作者被禁止或删除 内容自动屏蔽

Chief Fuking Officer

Rank: 5Rank: 5Rank: 5

UID
233685
帖子
965
PB币
2759
贡献
0
技术
0
活跃
628
17F
发表于 2009-7-28 22:23:51 IP属地江苏
搭车请教一个问题,我的声卡是ALC888@ICH7,在ACPIPatcher声卡的三个预置选项里面,应该选哪一个呢。

Rank: 2Rank: 2

UID
160937
帖子
234
PB币
1827
贡献
0
技术
2
活跃
46
18F
发表于 2009-7-29 11:28:23 IP属地上海
楼主 你的dsdt我编译的时候 出现  2个错误 能发下你最后编译的dsdt文件? 我和楼主一样的主板

硕士

UID
831273
帖子
1521
PB币
1451
贡献
0
技术
45
活跃
234

远景技术达人

19F
发表于 2009-7-31 12:49:17 IP属地江苏
想请教楼主一下,我做到这步,不知该怎么改了?请给个详细点的指导。谢谢!
acdcacdcguitar 发表于 2009-7-28 13:21



到这里就快要成功了,把显示的pin***里面的值往dsdt里面照着填就行!

硕士

UID
831273
帖子
1521
PB币
1451
贡献
0
技术
45
活跃
234

远景技术达人

20F
发表于 2009-7-31 12:50:39 IP属地江苏
楼主 你的dsdt我编译的时候 出现  2个错误 能发下你最后编译的dsdt文件? 我和楼主一样的主板
sunone 发表于 2009-7-29 11:28


好的,我把编译好的dsdt.aml发上来,我snow和leopard都用这个,很正常

直接放在你的系统根目录中即可

dsdt.aml.zip

14.75 KB, 下载次数: 124, 下载积分: PB币 -1

回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛