MemacX 发表于 12/5/23 14:05:24

[原创内容] 简单教程:看图学DSDT及SSDT制作

本帖最后由 MemacX 于 2012-5-23 14:16 编辑

一、适用人群
主板型号在列表清单内的,详见下帖
http://bbs.pcbeta.com/viewthread-948510-1-1.html
以上主板补丁大多可以解决使用原生电源管理的问题,但可能无法睡眠或睡眠不正常。
无睡眠后bios重启补丁
要使用原生电源管理,请删掉NullCPUPowerManagement.kext


二、准备工作
Windows: 
1.aida64(原everest)
2.DSDT Editor For Windows,跟mac版操作一样
Mac:
1.DSDT Editor For mac
2.Chameleon wizzard 4.1

注:DSDT Editor必须有Java Run Time支持,mac下会自动上网安装,windows下请自行下载Java Run Time

三、其他DSDT制作参考资料
1.DSDT(USB内建.HUB修改等...)
2.DSDT修改(App store登陆问题,网卡内建)
四、操作步骤(以本人的配置为例)

[*]Windows下操作

[*]aida64导出acpi_dsdt.bin
[*]
[*]
[*]2.导出acpi_ssdt.bin和acpi_ssdt-1.bin等,Windows请在非超频状态下,开启bios中Intel CPU Speedstep功能
各主板的bios设置可能不一样,基本上就是要Windows能够自己调整cpu频率的情况下导出
如下图,ssdt从上往下依次另存为acpi_ssdt.bin,acpi_ssdt-1.bin,acpi_ssdt-2.bin。。。
有几个存几个,本人只有两个
[*]
.顺便把显卡的Bios(rom)也导出来
文件改名


gaiwei


[*]Mac环境:用DSDT EDITOR给DSDT打补丁

1.打开acpi_dsdt.aml



2.选择主板相应的dsdt补丁

3.应用补丁,选apply

4.按F5编译

5.弹出编译错误信息窗口,先按右下解Fix Errors自动修复错误
一般补丁都可以做到 0 Errors

有Warning和remarks可以暂时忽略

但不能有Errors

本篇暂不提及常见Error的解决方法


.无Error,另存为aml为 DSDT.aml


[*]用DSDT EDITOR编译SSDT
打开acpi_ssdt.aml,按F5编译为ssdt.aml
无Error则依次存为SSDT.aml,SSDT-1.aml,SSDT-2.aml


[*]变色龙设置:org.chameleon.boot.plist
打开Chameleon Wizzard,选org.chameleon.boot.plist
如图,以下为基本设置

将DSDT.aml,SSDT.aml,显卡rom放到变色龙Extra目录下




第二篇 准备写网卡内建,USB内建
这里其实基本参考Z大的文章即可,我简单补充一下。此操作在Mac下比较方便
一、准备软件
1.DSDT Editor For mac
2.IORegistryExplorer
二、参考资料
1.[分享]DSDT修改第一季(包括App store登陆问题,自动降频),附上mac下和win下安装Lion教程

三、网卡内建方法
1.最简单的方法是在变色龙参数里设置 Ethernet Built In
用Chameleon Wizzard来管理org.chameleon.boot.plist比较方便,打个勾保存一下。
此方法简单易行,但不是每台机子都支持。不搞DSDT完美的人可试用一下,不行再往下看

2.DSDT里内建,最关键的是在设备描述代码中,加入

[*]                Method (_DSM, 4, NotSerialized)
[*]                {
[*]……代码省略
[*]            }

复制代码
3.网卡内建模板,以及在DSDT中插入的位置,以下为了简便起见,会引用Z大不少图片和文字,在此表示感谢
本模板一方面是为了完成网卡内建,另一方面是为了显示美观,其中有些代码,我也不知道作用,但反正能用。:)

[*]Device (P0P5)
[*]            {
[*]                Name (_ADR, 0x001C0001)
[*]                Method (_PRW, 0, NotSerialized)
[*]                {
[*]                  Return (GPRW (0x09, 0x04))
[*]                }
[*]                Method (_PRT, 0, NotSerialized)
[*]                {
[*]                  If (PICM)
[*]                  {
[*]                        Return (AR05)
[*]                  }
[*]                  Return (PR05)
[*]                }
[*]                Device (GIGE)//网卡代码从这里开始,GIGE只是个命名而已,你想用什么就用什么,但要保持整个DSDT上下文统一
[*]                {
[*]                  Name (_ADR, Zero) //网卡的地址,必须根据IORegistryExplorer来填写,下文介绍
[*]                  Name (_SUN, one) //网卡所在的插槽,Zero,One,0x02,0x03等均可,填写完了在系统信息中pci卡里会显示 PCI-SLOT1
[*]                  Method (_DSM, 4, NotSerialized)//内建代码开始
[*]                  {
[*]                        Store (Package (0x0A) //下面有6组12个数据,12的16进制代码0x0A
[*]                            {
[*]                              "model",
[*]                              Buffer (0x17) //0x17,表示下面描述的字符个数,转16进制,可大于0x17,但不能小于0x17
[*]                              {
[*]                                    "Realtek RTL8168D/8111D"//根据你自己的型号随便写,最后数一下个数就可以了,下面代码同样也是如此处理
[*]                              },
[*]                              "codec-id",
[*]                              Buffer (0x04)
[*]                              {
[*]                                    0x68, 0x81, 0x00, 0x00 //这里我也不是太了解。Z大用的是Device id吧,8168网卡就这样写吧。好像写错了照样内建
[*]                              },
[*]                              "built-in",
[*]                              Buffer (One)
[*]                              {
[*]                                    0x01
[*]                              },
[*]                              "device_type",
[*]                              Buffer (0x09)
[*]                              {
[*]                                    "Ethernet"
[*]                              },
[*]                              "name",
[*]                              Buffer (0x36)
[*]                              {
[*]                                    "Realtek RTL8168D/8111D PCI-E Gigabit Ethernet Adapter"
[*]                              }
[*]                            }, Local0)
[*]                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
[*]                        Return (Local0)
[*]                  }//网卡内建代码结束
[*]                }//网卡代码结束
[*]            }

复制代码
3.利用IORegistryExplorer来查找网卡地址及代码插入位置
http://bbs.pcbeta.com/data/attachment/forum/201108/10/2357544xngow9ggg6yhg64.jpg.thumb.jpg
在网卡已经驱动的情况下,IORegistryExplorer里搜索IOEthernetInterface,找到自己网卡的位置
以上图为例,在PCI0@0-POP5@1C,1设备下
那么在dsdt代码中,打开device(PCI0)找到POP5,在POP5这段代码的大括号内添加网卡信息

上图中GIGE@0,那么Name(_ADR,Zero)或Name(_ADR,0x00000000)
如GIGE@9,那么Name(_ADR,0x00000009)
如果像POP5@1C,1那样的,GIGE@1A,2那么Name(_ADR,0x001A0002)
以此类推

完成后编译无错,保存为aml,重启电脑后,像上图一样查看IORegistryExplorer,IOBuiltin是YES那就代表内建成功
页: [1]
查看完整版本: [原创内容] 简单教程:看图学DSDT及SSDT制作