论坛上随处可见。到处充斥着修改dsdt的软件。比如。dsdt auto pactor(但其中有好多坛友提出,自己的主板型号里面都没有)。dsdt se (此软件集修改和修复于一身,我也汉化dsdt se了一下,下面有下载地址)。还有dsdt edit& auto fix/patcher,具体的名字可能写错(注意:在mac下,如要用dsdt edit生成dsl文件或者转换aml文件、编译、修复dsdt文件。首先是将dsdt文件放到一个英文文件夹中,也可以将其放到桌面上。打开即可。否则容易出现打开空白的现象)。而且dsdt edit在mac下有bug。里面的大括号很容易让人以为错误。不要随便修改;而且,不管在mac下或者win下都得需要java软件。而且在win下如要运行dsdtse。有时候双击打开没反应。而在任务管理器里面却会显示其进程正在运行。大多数会员见其都会束手无策,大家只要照着这样做即可:首先用管理员模式运行CMD命令行,然后找到DSDTParser.jar文件所在的文件夹,手动输入命令:java -jar DSDTParser.jar 来运行,这样就能顺利读取系统DSDT信息了。。 而且,论坛上虽有讲解dsdt手动修改的帖子。但一般都沉水了,一般的会员耐不住每一层楼爬楼去看贴的复杂心情,希望有高手指点一二,还有,这方面修改dsdt的帖子比较分散,于是就有了本帖的诞生,其实我只是将所有看过的修改dsdt的帖子予以归纳和修正,里面很多内容都转自其他的帖子。也许会涉及别人的自主信息,如有不当之处,请多多见谅,下面我也会写出文章出处的,废话不多说,下面咱来讲讲dsdt在编译过程中一般情况下遇到的问题,以及如何修改及常见的修改方法:
1.Remarks 的修改 :
dsdt.dsl 2254: Name (_T_0, Zero)
Remark 5110 - Use of compiler reserved name ^ (_T_0)
例子: If (LEqual (_T_0, 0x03))
{
SIT3 (PRM0, PRM1, PRM2)
}
Else
{
If (LEqual (_T_0, 0x04))
………………
}
将其中的 _T_0 都改为 T_0 即可 或者 将_T_0 改为 T0_0
好了 25个 Remarks 消失了。
2. Warnings 的修改
这个错误有很多种类。
第一种: dsdt.dsl 7668: Method (TGET, 1, NotSerialized)
Warning 1087 - ^ Not all control paths return a value (TGET)
第二种 dsdt.dsl 7827: Store (FGET (Local0), Local1)
Warning 1092 - ^ Called method may not always return a value先来第一种:
例子:
Method (FGET, 1, NotSerialized)
{
If (LEqual (Arg0, Zero))
{
Return (^^SIOR.HWF1 ())
}
If (LEqual (Arg0, One))
{
Return (^^SIOR.HWF2 ())
}
If (LEqual (Arg0, 0x02))
{
Return (^^SIOR.HWF3 ())
}
}
两种都能解决 Warnings 但是究竟用那个? 爬文中 例子都是 用第二中 由于最先看到的是第一种方法所以 两个都尝试了一下。
也希望众多坛友们多多尝试,并不是说出现错误一味的删除就会减少错误,有时候会带来更多的错误和警告。一般情况下。出现第二种错误是伴随着第一种错误的出现而发生的。当把第一种错误通过上面的方法修改之后,第二种警告就会消失。
3.一下三种情况大致类似。大家可以依葫芦画瓢。将其修改:
dsdt.dsl 1101: Add (Local0, 0x02)
Warning 1105 - ^ Result is not used, operator has no effect
采用把 (Local0, 0x02)改为 (Local0, 0x02, Local0)即可解决
dsdt.dsl 1193: And (CAPB, 0xFFFFFFFC)
Warning 1104 - ^ Result is not used, operator has no effect
这种问题就把“And (CAPB, 0xFFFFFFFC)"改为"And (CAPB, 0xFFFFFFFC,CAPB)"
dsdt.dsl 1238: Method (_OSC, 5, NotSerialized)
Warning 1076 - ^ Reserved method has too many arguments (_OSC requires 4)
这种问题就把_OSC后面的5改成4即可
以上几种错误,仅仅是dsdt的简单修改。
原帖出自:关于DSDT 的修改(一些错误的修改方法)及一些问题
其实dsdt编译出现错误,大多情况下是缺少返回值 return(zero)或者定义的变量不存在,也许你定义的变量不是C能识别的变量。比如在全局变量调用中就容易发生问题。好 下面是其他情况的集中修改:
1.dsdt.dsl 330: Method (_CST, 0, NotSerialized)
Warning 1087 - ^ Not all control paths return a value (_CST)
dsdt.dsl 330: Method (_CST, 0, NotSerialized)
Warning 1080 - ^ Reserved method must return a value (_CST)
这种类型的问题就需要在Method这个函数的根括号下加上Return(Zero)
2.dsdt.dsl 9048: Method (_GTF, 0, NotSerialized)
Warning 1087 - ^ Not all control paths return a value (_GTF)
dsdt.dsl 9048: Method (_GTF, 0, NotSerialized)
Warning 1080 - ^ Reserved method must return a value (_GTF)
这种类型的问题需要在Method这个函数的根目录下加上:
Else
{
Return (Zero)
}
Return (Zero)
3.dsdt.dsl 9850: Method (_GTM, 0, NotSerialized)
Warning 1087 - ^ Not all control paths return a value (_GTM)
dsdt.dsl 9850: Method (_GTM, 0, NotSerialized)
Warning 1080 - ^ Reserved method must return a value (_GTM)
这种类型的问题同上
4.dsdt.dsl 612: Return(Package(0x02){0x00, 0x00})
Warning 1099 - ^ Statement is unreachable
这种问题是ACPI Patcher中的General选项卡中Fix按钮中除了“DGPT Fix”以外还勾选了选项而造成的。
帖子出处:DSDT常见Warnings解决方法DSDTSE汉化版地址:DSDTSE
5.Maximum error count (200) exceeded例:./dsdt_fixed.txt 24: External (^CPU0._PPC)
这里的问题是,编译器对于下例的格式编译不通过,不能识别:
External (^CPU0._PPC)
可以修复为:
External (\_PR.CPU0._PPC) 6.Not all control paths return a value(2)
例:dsdt.dsl 255: Method (_BTP, 1, NotSerialized)
Warning 2019 - ^ Not all control paths return a value (_BTP)
原始代码如下:
Device (CMB0)
{
Name (_HID, EisaId ("PNP0C0A"))
Name (_UID, 0x01)
Name (BATP, Ones)
Name (_PCL, Package (0x01)
{
\_SB
})
...
...
...
Method (_BTP, 1, NotSerialized)
{
If (LEqual (\ECFL, Zero))
{
Return (0x0F)
}
Else
{
Store ("_SB.CMB0._BTP", Debug)
}
}
...
...
...
}
在这种情况下,解决方案包括使用的 \ECFL 返回的值,然后将其添加"调试"的位置。更改以下行:
Store ("_SB.CMB0._BTP", Debug)
变成这样:
Store ("_SB.CMB0._BTP", 0x0F)
7.Object does not exist ^ (\_PR.C000)
例:dsdt.dsl 75: If (LEqual (\C001, 0x00))
Error 1061 - Object does not exist ^ (\C001)
dsdt.dsl 6589: \_PR.C000
Error 1061 - Object does not exist ^ (\_PR.C000)
dsdt.dsl 6645: Notify (\_PR.C000, 0x80)
Error 1061 - Object does not exist ^ (\_PR.C000)
dsdt.dsl 6718: Notify (\_PR.C000, 0x80)
Error 1061 - Object does not exist ^ (\_PR.C000)
在此错误,有需要将添加到开始处的缺少代码。这是要添加的代码:
External (\C001)
External (\_PR.C000)
这是dsdt开始处的部分,像这样:
/*
* Intel ACPI Component Architecture
* AML Disassembler version 20090625
*
* Disassembly of ./dsdt.dat, Tue Aug 11 23:29:06 2009
*
*
* Original Table Header:
* Signature "DSDT"
* Length 0x00005FC3 (24515)
* Revision 0x02
* Checksum 0x13
* OEM ID "Sony"
* OEM Table ID "VAIO"
* OEM Revision 0x20080725 (537397029)
* Compiler ID "INTL"
* Compiler Version 0x20090625 (537462309)
*/
DefinitionBlock ("./dsdt.aml", "DSDT", 2, "Sony", "VAIO",0x20080725)
{
External (\C001)
External (\_PR.C000)
External (L0C3)
External (L1C3)
External (PDC1)
External (PDC0)
External (CFGD)
8.Possible operator timeout is ignored
例:dsdt.dsl 4220: Acquire (MUTE, 0x03E8)
Warning 1103 - ^ Possible operator timeout is ignored
dsdt.dsl 4234: Acquire (MUTE, 0x03E8)
Warning 1103 - ^ Possible operator timeout is ignored
dsdt.dsl 4249: Acquire (MUTE, 0x03E8)
Warning 1103 - ^ Possible operator timeout is ignored
dsdt.dsl 4264: Acquire (MUTE, 0x0FFF)
Warning 1103 - ^ Possible operator timeout is ignored
dsdt.dsl 4278: Acquire (MUTE, 0x03E8)
Warning 1103 - ^ Possible operator timeout is ignored
dsdt.dsl 4293: Acquire (MUTE, 0x03E8)
Warning 1103 - ^ Possible operator timeout is ignored
dsdt.dsl 4308: Acquire (MUTE, 0x03E8)
Warning 1103 - ^ Possible operator timeout is ignored
关于这个错误,变量MUTE降0xXXXX调整为0xFFFF
Acquire (MUTE, 0x03E8)
转换为下面的代码,它必须更换任何它给出错误的位置
Acquire (MUTE, 0xFFFF)
9.Reserved method has too few arguments
例:dsdt.dsl 3067: Method (_EJ0, 0, NotSerialized)
Warning 1076 - ^ Reserved method has too few arguments (_EJ0 requires 1)
这种错误通过调整解决:
Method (_EJ0, 0, NotSerialized)
改成:
Method (_EJ0, 1, NotSerialized)
10.Reserved method must return a value (_PSR) 例:dsdt.dsl 3896: Method (_PSR, 0, NotSerialized)
Warning 1079 - ^ Reserved method must return a value (_PSR)这里的问题是,这是没有检测到的变化,从电池/ ACPI规范AC.Extracted:
11.3.1 PSR (Power Source)
Returns the current power source devices. Used for the AC adapter and is located under the AC adapter
object in name space. Used to determine if system is running off the AC adapter.
Arguments:
None
Result Code:
0x00000000 – Off-line
0x00000001 – On-line
这是错误的代码:
Method (_PSR, 0, NotSerialized)
{
If (\_SB.PCI0.PIB.EC.ECOK)
{
Return (\_SB.PCI0.PIB.EC.ADP)
}
}
下面是解决的方法:
Method (_PSR, 0, NotSerialized)
{
If (\_SB.PCI0.PIB.EC.ECOK)
{
Return (0x01)
}
Else
{
Return (0x00)
}
11.Reserved method must return a value (_STA) 例:Method (_STA, 0, NotSerialized)
Warning 2026 - ^ Reserved method must return a value (_STA) 下面是原始代码:
Method (_STA, 0, NotSerialized)
{
STAL (0x60)
}
需要改成:
Method (_STA, 0, NotSerialized)
{
Return (STAL (0x60))
}
12.Result is not used, operator has no effect ^ 例: dsdt.dsl 10150: ShiftRight (BUF2, 0x04)
Warning 1105 - Result is not used, operator has no effect ^因为"Shiftright"不存储任何值,将产生错误:
原语句:
.....
Store (AAXB, MBUF)
ShiftRight (BUF2, 0x04) < ------- Error.
Store (BUF2, Local3)
Store (CMER, BUF0)
Store (0xFF, BUF1)
Store (Zero, BUF2)
.....
需要调整为:
Store (BUF2, Local4)
Store (AAXB, MBUF)
Store (BUF2, Local4) <------- Here.
Store (BUF2, Local3)
Store (CMER, BUF0)
Store (0xFF, BUF1)
Store (Zero, BUF2)
13.Warning 1099 -Unknown reserved name ^ (_BCG) 这个原因是编译器在解释编译的时候遇到了一个特殊的字符。不能识别,下面是例子:
Method (_BCG, 0, Serialized)
{
Store (C136, Local0)
Return (Local0)
}
}
只需要将_BCG改成BCG编译就会柳暗花明
Method (BCG, 0, Serialized)
{
Store (C136, Local0)
Return (Local0)
}
}
。。。。。。。。