MemacX 发表于 13/12/6 19:05:07

DSDT常见Warnings解决方法


论坛上随处可见。到处充斥着修改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.dsl2254:                           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.dsl7668:         Method (TGET, 1, NotSerialized)            Warning1087 -                  ^ Not all control paths return a value (TGET)
第二种   dsdt.dsl7827:             Store (FGET (Local0), Local1)            Warning1092 -                     ^ 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 ())            }      }
有两种改法一种是:在末 加入 Return (Zero)   一种是在末尾加入                   Else                                  {                                           Return(Package(0x02){0x00, 0x00})                               } 也就是            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 ())            }       Return (Zero)      }

或者             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 ())            }            Else                                  {                                           Return(Package(0x02){0x00, 0x00})                               }      }
两种都能解决 Warnings   但是究竟用那个? 爬文中 例子都是 用第二中由于最先看到的是第一种方法所以 两个都尝试了一下。也希望众多坛友们多多尝试,并不是说出现错误一味的删除就会减少错误,有时候会带来更多的错误和警告。一般情况下。出现第二种错误是伴随着第一种错误的出现而发生的。当把第一种错误通过上面的方法修改之后,第二种警告就会消失。3.一下三种情况大致类似。大家可以依葫芦画瓢。将其修改:dsdt.dsl1101:             Add (Local0, 0x02)Warning1105 -                         ^ 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

页: [1]
查看完整版本: DSDT常见Warnings解决方法