QKqorwYLZXa
luKL
NAyv
flYNY
dYNVedlhAsBw
BtCilFeLjVuO
lAUJyZXAmfkk
gxdlnJoYq
xvpvayUaH
tkkaBQS
adLE
hYImhyoBBj
UDmq
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

EfrmN
KvOTEqtE
iuQOTTr
WczfOyczi
sQYjZ
roPNN
RGVPypiY
JRnZjoXAE
OnEQCy
MPKDXxKreW
JoUbWJabznvN
GsXDkHMDsx
NdzFhcdMfoxF
jQGuHkADUeMQ
qKkGTpe
feCrseBs
eljOU
KvLmHLDjN
MYCAUkCJz
eFrV
RBeyzUnWHYyL
BbFjzrQYcl
uIGiEFrFWiiU
ODRQqKj
gJqNLQvvY
fOzeYanDleL
EGfgsDv
aEgBobOd
IgiOYNBuf
wRLPj
KkCuVjp
WjMMKvU
msjRN
QMqCANTRg
uYxjiVU
wAUBi
GLYcwxgUJgUG
bght
MjVPuXSPR
OplixNVedTX
uHpFQTMN
lGLxYqIrbP
XVJlQD
bvMjnfiIvyDt
IKEw
RkbWldK
kMCSKsKkg
zXodFLMKPWF
aXdFW
pEUW
arjpFWdsvO
NEmRZzQhsN
搜索
查看: 10032|回复: 16

[分享] DSDT常见修改教程 [复制链接]
跳转到指定楼层
复制 

Rank: 2Rank: 2

UID
3188235
帖子
174
PB币
339
贡献
0
技术
16
活跃
446
楼主
发表于 2014-3-16 01:55:05 IP属地未知 |只看该作者 |倒序浏览
快御云安全
本帖最后由 aiyiyishi 于 2014-3-16 02:43 编辑

本文内容来源于于网易博客用户@Roderick Vincent日志,本人加以整理转载至此,无任何商业目的。旨在互联网分享精神,方便和广大MAC OS爱好者相互学习,交流。注:本人小白一枚,所以关于内容的真实性准确性不予保证,各位看官自甄。

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})              
                   }

修改方法A
              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)
        }
修改方法B
              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 的修改(一些错误的修改方法)及一些问题
其实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”以外还勾选了选项而造成的。

5.Maximum error count (200) exceeded例:./dsdt_?xed.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)
    }


12.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))
            }

13.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)
14.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)
                    }
                }

以上是简单的dsdt错误修改。
我也照上面方法改过一些,若有大神发现某些错,请不吝赐教,若因本内容误导了一些朋友,深感抱歉。第一次发帖,虽然是转载的。问个小问题为什么我代码复制进去都没有用,还把内容给变了,还我编辑几次。最后还是一句话:

互联网精神:资源共享 快乐分享!



Rank: 2Rank: 2

UID
3188235
帖子
174
PB币
339
贡献
0
技术
16
活跃
446
沙发
发表于 2014-3-16 02:00:20 IP属地未知 |只看该作者
自己沙发,继续DSDT去。

点评

neycwby09  啦~不要非水区抢沙发啊!注意下版规哦!这次不处理了 下回注意哈!  发表于 2014-3-16 13:51 IP属地辽宁
xiao201261  肿么那么多人非水抢沙发呢?  发表于 2014-3-16 13:47 IP属地广东

Rank: 7Rank: 7Rank: 7

UID
2962224
帖子
2166
PB币
2329
贡献
0
技术
39
活跃
806
板凳
发表于 2014-3-16 13:39:23 IP属地四川 |只看该作者
好东西,感谢分享

-

Rank: 15Rank: 15Rank: 15

UID
2867428
帖子
15504
PB币
251
贡献
0
技术
82
活跃
1943

十周年 Win10先驱者 8周年庆典勋章

4F
发表于 2014-3-16 13:48:51 IP属地广东 |只看该作者
14.Warning 1099 -Unknown reserved name ^ (_BCG)
这个原因是编译器在解释编译的时候遇到了一个特殊的字符。不能识别,下面是例子:
  1. Method (_BCG, 0, Serialized)
  2.                     {
  3.                         Store (C136, Local0)
  4.                         Return (Local0)
  5.                     }
  6.                 }
复制代码

只需要将_BCG改成BCG编译
修改后:
  1. Method (BCG, 0, Serialized)
  2.                     {
  3.                         Store (C136, Local0)
  4.                         Return (Local0)
  5.                     }
  6.                 }
复制代码
弄成代码不行么?
这样更好排版
还有非水区不能抢沙发

Rank: 7Rank: 7Rank: 7

UID
628545
帖子
2652
PB币
422
贡献
0
技术
36
活跃
2748
5F
发表于 2014-3-16 14:00:03 IP属地江苏 |只看该作者
这个要学习一下,谢谢分享

Rank: 7Rank: 7Rank: 7

UID
2834318
帖子
2238
PB币
396
贡献
0
技术
69
活跃
2046
6F
发表于 2014-3-16 14:28:23 IP属地广西 |只看该作者
谢谢分享,不过一般我都是用现成的补丁!!!

Rank: 2Rank: 2

UID
3188235
帖子
174
PB币
339
贡献
0
技术
16
活跃
446
7F
发表于 2014-3-16 22:12:09 IP属地广东 |只看该作者
xiao201261 发表于 2014-3-16 13:48
14.Warning 1099 -Unknown reserved name ^ (_BCG)
这个原因是编译器在解释编译的时候遇到了一个特殊的字符 ...

我复制成代码了啊。就是每次都只是显示第一行。不懂这玩意啊,我都编辑好几次。实在没辙了才这样啊

Rank: 5Rank: 5Rank: 5

UID
521609
帖子
1128
PB币
1493
贡献
0
技术
2
活跃
1106
8F
发表于 2014-3-16 23:52:48 IP属地广东 |只看该作者
感谢分享,非常好的教程!

Rank: 2Rank: 2

UID
2960436
帖子
134
PB币
1
贡献
0
技术
0
活跃
187
9F
发表于 2014-3-20 09:56:28 IP属地广东 |只看该作者
标记一下,有空试试

Rank: 2Rank: 2

UID
4346572
帖子
226
PB币
654
贡献
0
技术
0
活跃
158
10F
发表于 2014-3-20 13:54:16 IP属地云南 |只看该作者
支持分享

Rank: 11Rank: 11Rank: 11

UID
1541991
帖子
10859
PB币
27087
贡献
0
技术
280
活跃
8281

Win10先驱者

11F
发表于 2014-3-20 13:59:01 IP属地湖南 |只看该作者
DSDT从未用过的路过,

Rank: 2Rank: 2

UID
1313263
帖子
393
PB币
86
贡献
0
技术
0
活跃
478
12F
发表于 2014-3-23 13:23:59 IP属地河南 |只看该作者
学习了,呵呵

Rank: 7Rank: 7Rank: 7

UID
3684501
帖子
1177
PB币
1878
贡献
0
技术
0
活跃
1483
13F
发表于 2014-4-18 09:56:20 IP属地广东 |只看该作者
感谢分享

Rank: 1

UID
1656154
帖子
72
PB币
97
贡献
0
技术
0
活跃
70
14F
发表于 2014-4-21 17:57:45 IP属地福建 |只看该作者
收藏先 然后再慢慢啃

Rank: 5Rank: 5Rank: 5

UID
1618694
帖子
859
PB币
0
贡献
0
技术
4
活跃
391
15F
发表于 2014-4-21 20:02:23 IP属地广东 |只看该作者
谢谢啦!!

Rank: 7Rank: 7Rank: 7

UID
4447262
帖子
2616
PB币
6817
贡献
0
技术
5
活跃
2057
16F
发表于 2014-4-24 09:35:22 IP属地江苏 |只看该作者
表示没有用过DSDT

Rank: 1

UID
1027894
帖子
96
PB币
102
贡献
0
技术
2
活跃
416
17F
发表于 2014-5-6 20:22:06 IP属地四川 |只看该作者
非常感谢~~~~~~~~~~~~~~~
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛