麦创网

发表于 13/12/6 19:05:07 |显示全部楼层
论坛上随处可见。到处充斥着修改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 ())
            }
        }

有两种改法一种是:在末 加入 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.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编译出现错误,大多情况下是缺少返回值 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

打赏楼主

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

 
您需要登录后才可以回帖 登录 | 注册

本版积分规则

麦创网 ( 苏ICP备13053101号-1 )

@麦创网 禁止任何未经允许的修改,传播或使用。

Powered by Discuz!

©2012 @ iMac.vip. 用户言论不代表本站立场。

返回顶部