DSDT的入门知识Word格式.docx
- 文档编号:16540052
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:19
- 大小:23.81KB
DSDT的入门知识Word格式.docx
《DSDT的入门知识Word格式.docx》由会员分享,可在线阅读,更多相关《DSDT的入门知识Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
2,你想使用一个你DSDT中没有的mothed(XX,XX,X)或者你引用了一个未定义的Device(***),比如,你发现你DSDT中没PEGP,想手动加入,一旦你加上去了,编译肯定出错,因为编译器不知道你这个玩意PEGP从哪冒出来的,所以你要先定义它。
在哪定义在后面说。
3,注意加入新代码的时候括号要对应,不要让代码这部分漏出来,不然编译器又不知道你想表述什么意思了,出头鸟吗?
4,注意两个代码之间加一个空行,还有DEVICE(PEGP)别顶在开头,用TAB键往后撤撤。
5,如果你遵循第1条原则编译之后出现的错误个数很多,那肯定是你新加入的代码有问题,不用看错误描述,按照2,3,4原则检查你的新加入代码。
除非你网上复制的代码本身就有错误。
下面分两种方法加入代码
方法1:
不管位置在哪个地方,只要确定是INTEL芯片组,显卡肯定在PCI0设备的目录下,所以搜索DEVICE(PCI0)(注意是数字0不是字母o.)
你会看到如果代码(各个BIOS可能不一样)
Device(PCI0)
{
Name(_HID,EisaId("
PNP0A08"
))
Name(_CID,EisaId("
PNP0A03"
Name(_ADR,Zero)
。
把下面显卡的代码加入到Name(_HID,EisaId("
))上面一样,也就是PCI0第一个括号下面。
Device(PEGP)
{
Name(_ADR,0x00010000)
Device(GFX0)
{
Name(_SUN,One)
Method(_DSM,4,NotSerialized)
Store(Package(0x16)
"
@0,compatible"
Buffer(0x0B)
NVDA,NVMac"
},
@0,device_type"
Buffer(0x08)
display"
@0,name"
Buffer(0x0F)
NVDA,Display-A"
@1,compatible"
@1,device_type"
@1,name"
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
VRAM,totalsize"
Buffer(0x04)
0x00,0x00,0x00,0x10
device_type"
Buffer(0x0D)
NVDA,GeForce"
model"
NvidiaGeForce9200MGS"
rom-revision"
Buffer(0x1F)
NvidiaGeForce9200MGS256MB"
}
},Local0)
DTGP(Arg0,Arg1,Arg2,Arg3,RefOf(Local0))
Return(Local0)
}
注意数下括号,是偶数一般没问题。
奇数要肯定有问题。
注意回车留个空行。
这个时候参考前面的几条原则,发现PEGP这玩意没注册呢,编译不认识它,所以我们搜素Method(_L0D,0,NotSerialized),(一般在比较靠前的位置)在下面加入Notify(\0x02),把PEGP给注册了。
可以参考下我的,注册了好几个呢,因为我修改的多。
Method(_L0D,0,NotSerialized)
Notify(\0x02)
注册代码的意思就是说在PCI0下面有个PEGP设备,各单位注意,不要说见到了PEGP不认识它。
编译器自然就认识了。
这个时候还没有结束,我们是新加入的DEVICE(PEGP)设备,而且Name(_ADR,0x00010000)这个代码你自己本身DSDT的显卡描述中肯定有,所以我们要搜索Name(_ADR,0x00010000),然后把它删掉,注意别删除了你刚加入显卡代码的这行,一个DSDT中保留一个Name(_ADR,0x00010000)就行了。
这种加入方法,编译不太容易出错,因为不破坏你本身DSDT的结构。
不会出乱七八糟的错误。
方法2:
搜索Name(_ADR,0x00010000),这个就是你显卡的位置,或者你自己查看MAC系统中,你的显卡在什么位置。
加入上面的代码,注意从DEVICE(GFX0)开始加入。
以防万一,去上面那个位置注册下你的DEVICE名字,比如我的是加入,0X02.
不加入不知道会不会编译出错,我没去试。
我只是这么一说,我也不懂编程之后的东西,所以可能描述的不是很正确。
(勿拍砖)
注意括号要对应,自己慢慢数吧。
下面是NVCAP的值的获得和显卡代码中各个项的含义及其修改
1NVCAP串值
在显卡驱动的情况下,打开终端(一个跟黑电视差不多的东西,在应用程序里),输入ioreg-l-w0|grepNVCAP
得到一串数字,比如这样000003000c00000000000000,然后2个两一组,一行8个,放入代码中”NVCAP“的位置。
如果你用KEXT没能驱动显卡,给你下面几组值测试下。
000003001c0000000000000a00000000
00000f000000000000000000
000003000c0000000000000b00000000
这些值是从威廉第三的帖子中找的,这里感谢下威廉,希望不要介意我拿过来用用。
2,NV的显卡上面的代码行几乎不要动,"
的数值修改下,本来是"
你可以改成你自己的显卡型号,接着修改Buffer(0x18),这个是用来描述"
这串字符占用的地址空间的。
这里面的0X18是如何获得呢?
我们一起来计算以下,从N开始字母+空格一共是23个字符,在加1就是24,转换成16进制就是0X18,其他的buffer一样,公式就是字母+空格+1转换成16进制输入就行了。
0x00,0x00,0x00,0x10代表256M显存,0x00,0x00,0x00,0x20就是512了,0x00,0x00,0x00,0x05就是128。
根据自己的显存修改吧。
其他型号的显卡自己看着改吧。
上面工作全做完了还不够,因为我们还有一个最重要的东西没有定义,DTGP(Arg0,Arg1,Arg2,Arg3,RefOf(Local0)),这个DTGP方法编译器找不到,我们要添加进去,很多地方修改DSDT都需要引用这个DTGP,所以我们加在开头的位置,搜索DefinitionBlock("
"
DSDT"
1,"
HPQOEM"
SLIC-MPC"
0x00000001)在第一个括号下面加入DTGP,代码如下:
Method(DTGP,5,NotSerialized)
If(LEqual(Arg0,Buffer(0x10)
0xC6,0xB7,0xB5,0xA0,0x18,0x13,0x1C,0x44,
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))
0x00
Return(Zero)
这下就可以编译了成AML了,没有意外的话0错误的AML就可以用了,如有意外参考2,3,4条原则,不用在意警告,完美主义的例外。
希望能帮到新手们驱动显卡。
2、DSDT
首先要把xchobits的aml文件反编译,干吗?
学习!
!
下载了iasl-win-,反编译命令
01.
-d
复制代码得到文件,一开始我一直用写字板编辑,后来发现用UltraEdit-32相当的方便,在视图里面选择查看方式选择perl,
下载KB)
2009-10-2022:
04
看到左边的加号了,确保了每个{}都不会错,大大降低了出错的几率。
开始也不知道xchobits到底修改了哪里,就上网找教程,很多,就按教程修改!
首先提取自己的dsdt,用everestultimate+ACPIPatcher,先用everestultimate导出,然后用ACPIPatcher
40
点D/C按钮就得到dsl文件了。
GTGP是最基本的一个方法,很多函数都需要它,加入的位置只要不是放在子函数块里就ok了,我插入的位置:
("
2,"
Intel"
CANTIGA"
0x06040000)
02.{
03.
(DTGP,5,NotSerialized){
06.If(LEqual(Arg0,Buffer(0x10)
07.{
08./*0000*/0xC6,0xB7,0xB5,0xA0,0x18,0x13,0x1C,0x44,
09./*0008*/0xB0,0xC9,0xFE,0x69,0x5E,0xAF,0x94,0x9B
10.}))
11.{
12.If(LEqual(Arg1,One))
13.{
14.If(LEqual(Arg2,Zero))
15.{
16.Store(Buffer(One)
17.{
18.0x03
19.},Arg4)
20.Return(One)
21.}
22.If(LEqual(Arg2,One))
23.{
24.Return(One)
25.}
26.}
27.}
28.Store(Buffer(One)
29.{
30.0x00
31.},Arg4)
32.Return(Zero)
33.}
34..........................................
35.External(PDC1)
36.External(PDC0)
37.External(CFGD)
38.External(\复制代码RTC听说这个是防止bios重置的,(我到现在也不知道bios重置是个什么东西)
02.Device(RTC)
03.{
04.Name(_HID,EisaId("
PNP0B00"
05.Name(BUF0,ResourceTemplate()
06.{
07.IO(Decode16,
08.0x0070,0x0070,0x01,0x02,)
13.})
14.Name(BUF1,ResourceTemplate()
16.IO(Decode16,
17.0x0070,0x0070,0x01,0x08,)
22./{8}
24.})
25.Method(_CRS,0,Serialized)
26.{
27....................................
28.}
29.}
复制代码HPET听说这个是能解决cpu电源管理的
01.Device(HPET)
02.{
03.Name(_HID,EisaId("
PNP0103"
04.Name(_CID,EisaId("
PNP0C01"
07.IRQNoFlags(){0}IRQNoFlags(){8}Memory32Fixed(ReadOnly,
12.0xFED00000,0x00000400,)
15.})
16.Method(_STA,0,NotSerialized)
18...................................}
20.Method(_CRS,0,Serialized)
21.{
22.....................................}
24.}
复制代码至于_WAK里面的两个Return(zero),我的dsdt里面自带了。
显卡的GFX0加入PEGP里面
01.Device(PEGP)
03.Name(_ADR,0x00010000)
04.Device(GFX0)
05.{
06.Name(_ADR,Zero)
07.Name(_SUN,One)
08.Method(_DSM,4,NotSerialized)
09.{
10.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSDT 入门 知识