原创DSDT最完整的修改教程.docx
《原创DSDT最完整的修改教程.docx》由会员分享,可在线阅读,更多相关《原创DSDT最完整的修改教程.docx(17页珍藏版)》请在冰豆网上搜索。
原创DSDT最完整的修改教程
DSDT修改教程
这就是重点了,实际上整个一个星期的工作绝大部分都是在如果驱动硬件上做文章了,虽然期间重装了三遍系统,但感觉轻车熟路,玩一样的。
在驱动问题上确实走了很多的弯路,但是这个弯路有时候有事必须的,因为人总想做的完美一些,只有不停地尝试才能找到更好的办法。
1、显卡
装完雪豹第一个想法就是希望能看到华丽的而且和windows不一样的界面,但事实又总是和想象的有所区别,界面是变了,但是连进入系统式欢迎动画都是卡卡卡!
!
所以第一个想法也是把显卡的驱动装上,于是google,一堆的驱动,一堆的方法,只是没有哪个具体说了怎样驱动9300mgs的,没办法只好一个一个的试了,几乎把所有的驱动都试过了(没找到的,不知道的,不算),NVkushInstaller、NVinstallerv.52、NVIDIA_9000_Series_Driver_v2、NVdarwinInstaller1.2.5、Natit.kext一样的不一样的都试了一遍,统统不行!
!
然后又试EFIString,用OSX86Tools_1.0.150(这是个好东西),但是顶多就是强制分辨率,驱动的不能。
还有人介绍的就是在com.apple.Boot.plist里面加入
1.GraphicsEnabler
2.y
不知是不是人品不好,这个东东在别人那挺好,在我这统统不管用。
pcbeta逛了逛才接触到通过dsdt的修改来驱动显卡,让我兴奋的不得了,凭直觉觉得用dsdt来驱动硬件应该是比较完美的方法,于是全身心投入到了dsdt的研究当中,由于之前一点都没有接触过dsdt(java编程还是会的),只能在网上找方法然后依葫芦画瓢,但是开始根本不知道从何入手,比较简单的方法就是威廉的acpipatch,但是又不支持我这个类型的bios,只能手动修改!
彷徨中一个大侠的出现让我看到了曙光,[url=space.php?
uid=487636]xchobits[/url]大侠把他自己的dsdt文件给了我,因为我们的本子都是差不多的,我把他的dsdt.aml放入drawn文件夹下后,奇迹出现了,透明效果一下出来了,高兴的不得了甚至安装了legacyHDA后,声卡也出声了
但问题也接踵而来,就是每次进系统时总是先要五国一次,然后强制重启就能正常进入,郁闷的不得鸟!
!
我分析,毕竟我的硬件不完全就是他的硬件,是不是某些地方的不同导致了五国,于是我决定自己修改dsdt!
!
==========================================================
2、DSDT
首先要把xchobits的aml文件反编译,干吗?
学习!
!
下载了iasl-win-20080729,反编译命令
1.
2.iasl -ddsdt.aml
得到dsdt.dsl文件,一开始我一直用写字板编辑,后来发现用UltraEdit-32相当的方便,在视图里面选择查看方式选择perl,
看到左边的加号了,确保了每个{ }都不会错,大大降低了出错的几率。
开始也不知道xchobits到底修改了哪里,就上网找教程,很多,就按教程修改!
!
首先提取自己的dsdt,用everestultimate+ACPIPatcher,先用everestultimate导出acpi_dsdt.bin,然后用ACPIPatcher
点D/C按钮就得到dsl文件了。
GTGP是最基本的一个方法,很多函数都需要它,加入的位置只要不是放在子函数块里就ok了,我插入的位置:
DefinitionBlock("dsdt.aml","DSDT",2,"Intel","CANTIGA",0x06040000)
{
Method(DTGP,5,NotSerialized) //dtgp函数
{
If(LEqual(Arg0,Buffer(0x10)
{
/*0000*/ 0xC6,0xB7,0xB5,0xA0,0x18,0x13,0x1C,0x44,
/*0008*/ 0xB0,0xC9,0xFE,0x69,0x5E,0xAF,0x94,0x9B
}))
{
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)
}
.........................................
External(PDC1)
External(PDC0)
External(CFGD)
External(\_PR_.CPU0._PPC)
RTC
听说这个是防止bios重置的,(我到现在也不知道bios重置是个什么东西)
Device(RTC)
{
Name(_HID,EisaId("PNP0B00"))
Name(BUF0,ResourceTemplate()
{
IO(Decode16,
0x0070, //RangeMinimum
0x0070, //RangeMaximum
0x01, //Alignment
0x02, //Length 这里由0x08改成0x02
)
})
Name(BUF1,ResourceTemplate()
{
IO(Decode16,
0x0070, //RangeMinimum
0x0070, //RangeMaximum
0x01, //Alignment
0x08, //Length 这个不知道改不改
)
// IRQNoFlags() 直接用"//"屏蔽就是了
// {8}
})
Method(_CRS,0,Serialized)
{
...................................
}
}
HPET 听说这个是能解决cpu电源管理的
Device(HPET)
{
Name(_HID,EisaId("PNP0103"))
Name(_CID,EisaId("PNP0C01"))
Name(BUF0,ResourceTemplate()
{
IRQNoFlags() //就是加入这四行的东西
{0} //
IRQNoFlags()//
{8} //
Memory32Fixed(ReadOnly,
0xFED00000, //AddressBase
0x00000400, //AddressLength
)
})
Method(_STA,0,NotSerialized)
{
..................................//此处略
}
Method(_CRS,0,Serialized)
{
....................................//此处略
}
}
至于_WAK里面的两个Return(zero),我的dsdt里面自带了。
显卡的GFX0加入PEGP里面
Device(PEGP)
{
Name(_ADR,0x00010000)
Device(GFX0)
{
Name(_ADR,Zero)
Name(_SUN,One)
Method(_DSM,4,NotSerialized)
{
Store(Package(0x1C)
{
"AAPL,slot-name",
Buffer(0x0D)
{
"PCI-ESlot-1"
},
"@0,compatible",
Buffer(0x0B)
{
"NVDA,NVMac"
},
"@0,device_type",
Buffer(0x08)
{
"display"
},
"@0,name",
Buffer(0x0F)
{
"NVDA,Display-A"
},
"@1,compatible",
Buffer(0x0B)
{
"NVDA,NVMac"
},
"@1,device_type",
Buffer(0x08)
{
"display"
},
"@1,name",
Buffer(0x0F)
{
"NVDA,Display-B"
},
"NVCAP",
Buffer(0x18)
{
/*0000*/ 0x04,0x00,0x00,0x00,0x00,0x00,0x03,0x00,
/*0008*/ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x07,
/*0010*/ 0x00,0x00,0x00,0x00
},
"NVPM",
Buffer(0x20)
{
/*0000*/ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*0008*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*0010*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*0018*/ 0x00,0x00,0x00,0x00
},
"VRAM,totalsize",
Buffer(0x04)
{
0x00,0x00,0x00,0x10 //这里0x10代表256M显存,0x20代表512M
},
"device_type",
Buffer(0x0D)
{
"NVDA,GeForce"
},
"model",
Buffer(0x1F)//0x1F代表了"NvidiaGeForce9300MGS256MB"的字数,一般按字数+空格+1然后在转16进制,Buffer的用法基本相同
{
"NvidiaGeForce9300MGS256MB"
},
"rom-revision",
Buffer(0x21)
{
"DSDTROMv1.0byEcho#OSx86_64"
},
"reg",
Buffer(0x78)
{
/*0000*/ 0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
/*0008*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*0010*/ 0x00,0x00,0x00,0x00,0x10,0x00,0x01,0x02,
/*0018*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*0020*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
/*0028*/ 0x14,0x00,0x01,0x42,0x00,0x00,0x00,0x00,
/*0030*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*0038*/ 0x00,0x00,0x00,0x10,0x1C,0x00,0x01,0x02,
/*0040*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*0048*/ 0x00,0x00,0x00,0