查看: 53843|回复: 124

[分享] 关于Haswell平台使用AIDA64提取的DSDT的错误修复

  [复制链接]
daxuexinsheng 发表于 2014-2-4 13:46 | 显示全部楼层 |阅读模式
快御云安全
本帖最后由 daxuexinsheng 于 2014-2-8 20:37 编辑

本帖的主楼主要针对Haswell平台(主要是一些笔记本在Windows下使用AIDA64提取的DSDT的修复和常见的警告和提醒修复2楼3楼4楼提供一些通用的常见修复方法以及本论坛其它DSDT修复相关链接
在修复错误前,请先试试这个帖子的方法:https://bbs.pcbeta.com/viewthread-1475332-1-1.html
发帖原因
      我有几次帮助Haswell平台的景友修复DSDT的经验,在这两次修复过程中,我发现了很可能是在Windows下用AIDA64提取Haswell平台的DSDT都具有相似的错误即会有很多的Object does not exits ( )”、”Object is not accessible from this scope ( )”的错误提示。其中一个景友的有40多个这样的提示,另一个景友的有100多个这样的提示。
      我刚下载这些景有的DSDT时也很吃惊,因为一般不会出现这么多的相似错误,经过一边修改,一边分析后,我发现这些错误都是由其它出现次数只有几次的错误所引起的,其实这应该是一般的思路。在编程里,这一般叫做级联错误
      分析之后,要修复就变得更有针对性了。
      以下是我修复过的DSDT修复前的情况。

      对于其中一个DSDT引起提示这么多错误的原因其实是这个错误syntax error,unexpected ‘}’,expecting ‘(’ ”,另外的这个错误” syntax error, unexpected PARSEOP_IF”也是由前者所引起的,于是,修复前者就成为了关键的一步。
      对于另一个DSDT引起提示这么多错误的原因其实是这个错误 syntax error, unexpected PARSEOP_FIELD”,所以需要先修复它,修复它后,熟悉的”syntax error,unexpected ‘}’,expecting ‘(’ ”提示就出现了,继续修复就行。
      下面开始具体的修复方法。(一般Haswell平台修复以下错误如果你的存在),其它几十或成百的错误提示就会随之消失。)

     、错误提示”syntax error,unexpected ‘}’,expecting ‘(’ ”。定位到错误行后,代码如下:
      If (CondRefOf (\_SB.PCI0.XHC.PS0X))
      {
      PS0X
      }
      错误的提示很清楚,这是语法错误。即应该是要对PS0X进行某种操作可是代码中却只有要操作的对象没有操作的动作
      修改方法:  在PS0X后加上一对小括号PS0X ( )。 或者对PS0X添加一个操作,如Store(Zero, PS0X)
      If (CondRefOf (\_SB.PCI0.XHC.PS0X))
      {
      PS0X ( )      或者可以改为Store(Zero, PS0X)
      }
      其它一样的错误提示的修改方法相同,只是不是同样的字母。修改好所有这样的错误后,”Object does not exits ( )的提示就全都消失了
      (感谢35F同学的建议:“External (PS0X,MethodObj)语句把 PS0X定义成方法,那么执行应该用 PS0X()”本贴原本提供的方法是删除PS0X或改为Return (PS0X)还是希望高手能给出更合适的修改方法。)

      、错误提示” syntax error, unexpected PARSEOP_FIELD”,定位到错误行后,代码如下:
      OperationRegion (HRPE, SystemMemory,\_GPE.MMTB (0x04), Field (HRPE, DWordAcc, Lock, Preserve)
      {
      VDPC,  32
      })
      根据提示,容易知道这是语法错误,即对Field的操作有误。需要把Field从OperationRegion中分离
      OperationRegion (HRPE, SystemMemory,\_GPE.MMTB (0x04), 0x04)   在这里加一个前面的0x04最后再加上小括号
      Field (HRPE, DWordAcc, Lock, Preserve)
      {
      VDPC,  32
      }   在这里删除小括号
      修改完后,有可能会出现”syntaxerror,unexpected ‘}’,expecting ‘(’ ”,按错误一的修改方法修改即可。

      、另外,还有一个典型错误” syntax error,unexpected PARSEOP_LOCAL0”,类似地提示相同只是最后的字母不同有可能是LOCAL0LOCAL1ARG0Zero等。定位到错误行后,代码类似:
      Store (CMSR (0x63), Local1)
      Store (CMSR (0x64), Local0)
      Store (^^^GFX0.DD1F.LGBR, Local1)
      Local1
      Store (^^^GFX0.DD1F.LGBR, Local0)
      Local0
      Or (ShiftLeft (Local1, 0x04), Local0,Local0)
      Or (ShiftLeft (Local0, 0x10), CAUS, Local0)
      Store (Zero, ^^EC0.WHOK)
      Store (Zero, CAUS)
      Return (Local0)
      修改方法
      这是语法错误。即应该是要对 Local0进行某种操作可是代码中却只有要操作的对象没有操作的动作
      在Local0前添加两个斜线如  // Local0 ,两斜线是使该行代码无效。
      或者可以直接删除Local0
      (修改的方法不太严谨,由于不知道要对Local0做何种操作,只好采取使其失效或者删除的方式,还希望高手们能给出最合适的修改方法。将该对象放到Return ( )的括号里也可行但不知是否符合代码原本的意义希望高手能给出最合适的修改方法。)

修复警告

      警告1:  "Not allcontrol paths return a value"。一般出现在方法中,即Method中。提示的意思是,不是所有控制路径都返回了值。在程序中,方法(Method)一般需要返回一个值才能结束。于是,对于这一种情况,我们需要给方法返回一个值。

      Method (      )
      {
            代码(方法中的代码可能很多,有可能会看不清哪是哪,你只需要找到Method后的第一个”{“,再找     到方法中与它平行的最后一个”}”,在”}”前加如下的代码就可以了。)
      Return (Zero)
      }  Method的第一个”{“对应

      警告2:  ”Called method may not always return a value该警告提示会随着所有警告1的修改而消失

      警告3:  ”Unknown reserved name (_***),该警告的意思是未知的保留名称,一般,名称前有下划线的名称,是DSDT的语法里保留的名称,即编译器“认识” 很多名称前有下划线的名称,但是,有的有下划线的名称并不是保留名称(它带着迈克尔杰克逊的帽子,但它并不是迈克尔 杰克逊),这时,只要把下划线删除(摘下帽子),即改了名,就可以了。
      _WDG -> WDG
      _WED -> WED
      等等。

修复提醒

      提醒1:  ”Use of  compiler reserved name (_T_*),这个提醒的意思是,使用了编译器的保留名称,即_T_*这样的名称是编译器保留的,一般就不要再用这样的名称了,删除第一个下划线就可以了。
      感谢点评的同学,可以使用软件查找替换功能,一次性把类似_T_*的替换成T_*
      _T_0 -> T_0 等等。

      提醒2:  ”Effective AML package length is zero。修改方法:
      Return (Package (0x00) {})
      修改为
      Return (Package (Zero) {})

      小结
      DSDT一般不会出现这么多的相同错误一般这些相同错误都是由其它出现次数只有几次的错误所引起的,即级联错误只要先修复那些出现次数只有几次的错误其它错误也就随之解决了建议在安装系统时一般不需要放入DSDT可以在安装好系统后再在OS X下提取DSDT也许错误会少甚至没有但没有实际测试过)。

      楼下将进一步给出一些DSDT常见错误的修复方法

一个DSDT修复前.png

评分

8

查看全部评分

s1025xfei 发表于 2014-2-4 20:50 | 显示全部楼层
本帖最后由 s1025xfei 于 2014-2-22 11:53 编辑

好吧,帮你补上附件和使用方法吧


百度云盘地址
  1. http://pan.baidu.com/s/1qWrs6i4
复制代码
AIDA64从4.0版本以后仅在Business(商业版)里面含有提取DSDT的提取工具,其他版本请使用4.0之前的

12.png

34.png

点评

怎么 shan chu 也变成星号了。  发表于 2014-2-4 20:57
***  发表于 2014-2-4 20:55
谢谢督察了。另外想请督察看看,能不能***子第一页的那位占了10楼的仁兄的回复。  发表于 2014-2-4 20:55
回复

使用道具 举报

daxuexinsheng  楼主| 发表于 2014-2-4 13:50 | 显示全部楼层
本帖最后由 daxuexinsheng 于 2014-2-6 17:05 编辑

一些通用的DSDT修复方法,部分内容转载自http://blog.csdn.net/zengconggen/article/details/6721056

1Object not found or not accessible from scope ( PEG0.PEGP.TGPC) 括号里的名称不一定相同
CreateField (^^^PEG0.PEGP.TGPC, 0x0A, 0x02, PRGE)
修改为
CreateField (\_PR.PEG0.PEGP.TGPC, 0x0A, 0x02, PRGE)
再在DSDT开始的地方
DefinitionBlock ()
{
在这下面添加
External(\_PR.PEG0.PEGP.TGPC)

2Access width of Field Unit extends beyond region limit
OperationRegion (GPIO, SystemIO, 0x1180, 0x3B)  增大0x3B比如改为0x3C
Field (GPIO, WordAcc, Lock, Preserve)
{
AccessAs (DWordAcc, 0x00),
Offset (0x0F),
, 4,
LV28, 1,
Offset (0x2D),
, 5
..........
}

3、syntax error, unexpected PARSEOP_NAMESEG,expecting PARSEOP_DEFINITIONBLOCK
查看DSDT开始的地方
ACPIError (dmutils-0261): Argument count mismatch for method\_SB_.VWAK 3 1 [20080926]
ACPIError (dmutils-0261): Argument count mismatch for method\_GPE.VBRE 2 1 [20080926]
/*
* Intel ACPI ComponentArchitecture
* AML Disassemblerversion 20080926
修改:删除 /* 之前的语句。
删除了语句
/*
* Intel ACPI ComponentArchitecture
* AML Disassemblerversion 20080926

4、Internal compiler error ^ (null Op pointer)
If (LNot (\_OSI ("Windows2006")))
{
PHSR (0x10, 0x00)
}
修改为
If (\_OSI ("Windows2006"))
{
}
Else
{
PHSR (0x10, 0x00)
}

5、Method local variable is not initialized (Local0) 括号里的名称不一定相同
Scope (\_SI)
    {
       Method (_MSG, 1, NotSerialized)
       {
           Store (Local0, Local0)
       }
       Method (_SST, 1, NotSerialized)
       {
           Store (Local0, Local0)
       }
    }
修改为
Scope (\_SI)
    {
       Method (_MSG, 1, NotSerialized)
       {
           Store (Zero, Local0)
       }
       Method (_SST, 1, NotSerialized)
       {
           Store (Zero, Local0)
       }
    }

6、Object not found or not accessible from scope ^  (^CPU0._PPC)
External (^CPU0._PPC)
修改为
External (\_PR.CPU0._PPC)

7、Method local variable is not initialized (Local0) 错误5的另一种情况错误
Scope (\_SI)
  {
   Method (_MSG, 1, NotSerialized)
   {
   Store (Local0, Local0)
   }
  Method (_SST, 1, NotSerialized)
   {
   Store (Local0, Local0)
   If (LEqual (Arg0, 0x03)) {}
   If (LEqual (Arg0, 0x01)) {}
   }
  }
有两段代码需要修改
Scope (\_SI)
   {
   Method (_MSG, 1, NotSerialized)
    {
/* Store (Local0,Local0) */
    }
   Method (_SST, 1, NotSerialized)
    {
/* Store (Local0,Local0) */
   If (LEqual (Arg0, 0x03)) {}
   If (LEqual (Arg0, 0x01)) {}
    }
   }

8、Method local variable is not initialized  又一种情况
If (LNot (LEqual (ShiftRight (And (Local1, 0x10),0x03), And (Local2, 0x02))))
Error 1013 -  Method local variable is not initialized ^ (Local1)
修改
把 If 那一行的 Local1 修改为 Local2 ,只限于这种情况,其它情况会引起跟多的错误。

9、Missing ResourceSourcestring (required)
WordBusNumber (ResourceProducer, MinFixed, MaxFixed,PosDecode,
0x0000, /* Address SpaceGranularity */
0x0000, /* Address RangeMinimum */
0x00FF, /* Address RangeMaximum */
0x0000, /* AddressTranslation Offset */
0x0100, 0x00)
修改为
WordBusNumber (ResourceProducer, MinFixed, MaxFixed,PosDecode,
0x0000, /* Address SpaceGranularity */
0x0000, /* Address RangeMinimum */
0x00FF, /* Address RangeMaximum */
0x0000, /* AddressTranslation Offset */
0x0100)  删除0x00

10、Reserved methodmust return a value (_WAK)  仅对于Method(_WAK)其它方法的请看主
在_WAK方法的最后添加
Return (Package (0x02)
       {
           Zero,
           Zero
       })
例如
Method (_WAK, 1, NotSerialized)
    {
        原来的代码
       ......
       Return (Package (0x02)
       {
           Zero,
           Zero
       })
    }

11、Not all control paths return a value
请看主
12、Not all control paths return a value 又一种情况
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)
           把Debug修改为上面的 If 的 Return的值对于本例Store ("_SB.CMB0._BTP", 0x0F)
       }
    }
    ...
}

13、Object does not exist 括号里有提示的名称
在DSDT开始的地方
DefinitionBlock ()
{在这下面添加
External (括号里有提示的名称)
例如
DefinitionBlock (等等名称, 等等名称, 等等名称, 等等名称, 等等名称,等等名称)
{
External (\C001)         根据提示添加的
External (\_PR.C000)  根据提示添加的

14、Object does not exist ^ (\LOR)
If (\LOr (_OSI ("Darwin"), _OSI ("Windows2001")))
修改为
If (LOr (\_OSI ("Darwin"), \_OSI ("Windows2001")))
或者修改为
If (LOr (_OSI ("Darwin"), _OSI ("Windows2001")))

15、Operation Region requires ByteAcc
把那一行代码中的AnyAcc改为ByteAcc
16、Possible operator timeout is ignored
把0x****改为0xFFFF

17、Reserved method has too fewarguments (_EJ0 requires 1)
或者Reserved method has too many arguments
Method (_EJ0, 0, NotSerialized)
把0改为提示中requires后面的值,本例是1。
Method (_EJ0, 1, NotSerialized)

18、Reserved method must return a value (_PSR)
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)
    }
}

19、Reserved method must return a value (_STA)
Method (_STA, 0, NotSerialized)
           {
               STAL (0x60)
           }
修改为
Method (_STA, 0, NotSerialized)
           {
               Return (STAL (0x60))
           }

20、Result is not used, operator has no effect ^
.....
  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)   <------- 修改
Store (BUF2, Local3)
Store (CMER, BUF0)
Store (0xFF, BUF1)
Store (Zero, BUF2)

21、Result is not used, operator has no effect ^   另一种情况
And (CTRL, 0x1E)
修改为
And (CTRL, 0x1E, CTRL)

22、String must be entirely alphanumeric
(*PNP0A03)
修改为
(PNP0A03)

23、Reserved method has too many arguments ( _GLK requires 0)
Method (_GLK, 1, NotSerialized)
修改为:因为提示requires 0,可以把后面的部分删除。
Method (_GLK)

楼下还有其它的相关链接

评分

2

查看全部评分

回复

使用道具 举报

daxuexinsheng  楼主| 发表于 2014-2-4 13:51 | 显示全部楼层
本帖最后由 daxuexinsheng 于 2014-2-6 08:52 编辑

DSDT的更多修复方法请看这儿

部分内容转载自:http://blog.csdn.net/zengconggen/article/details/6721056

点评

可以使用查找 替换功能 ,这样就不用一个一个修改了 也可以用dsdtfixer 直接修复 例:查找:_T_0 替换:T_0 替换全部  发表于 2014-2-4 19:40
回复

使用道具 举报

daxuexinsheng  楼主| 发表于 2014-2-4 14:02 | 显示全部楼层
本帖最后由 daxuexinsheng 于 2014-2-6 08:54 编辑

备用楼。
回复

使用道具 举报

a137536519 发表于 2014-2-4 14:22 | 显示全部楼层
其实我试着在MAC下提取DSDT,但是提取老是提示错误,提取不出。。
回复

使用道具 举报

daxuexinsheng  楼主| 发表于 2014-2-4 14:25 | 显示全部楼层
a137536519 发表于 2014-2-4 14:22
其实我试着在MAC下提取DSDT,但是提取老是提示错误,提取不出。。

哦,你是用什么软件提取的呢?
回复

使用道具 举报

a137536519 发表于 2014-2-4 14:31 | 显示全部楼层
daxuexinsheng 发表于 2014-2-4 14:25
哦,你是用什么软件提取的呢?

使用终端,一个.SH的文件。
回复

使用道具 举报

neycwby09 发表于 2014-2-4 14:41 来自手机 | 显示全部楼层
占位一会上电脑详细看

p.s ls那位 呵呵……
回复

使用道具 举报

daxuexinsheng  楼主| 发表于 2014-2-4 14:45 | 显示全部楼层
a137536519 发表于 2014-2-4 14:31
使用终端,一个.SH的文件。

      哦,有时间的时候试试用MaciASL提取看看,有没有那么多的错误吧。
      另外,你的开机亮度低的问题有没有解决了呢?
      还有关于你的耳机声音的问题,可能是Platforms.xml里的CommonPeripheralDSP->SignalProcessing->SoftwareDSP->DspFunction的DspFunction的组合影响的,你可以把你的Device id放到不同的CommonPeripheralDSP里试试。
回复

使用道具 举报

a137536519 发表于 2014-2-4 15:07 | 显示全部楼层
daxuexinsheng 发表于 2014-2-4 14:45
哦,有时间的时候试试用MaciASL提取看看,有没有那么多的错误吧。
      另外,你的开机亮度低的问 ...

我去试试、
回复

使用道具 举报

846860757 发表于 2014-2-4 17:32 | 显示全部楼层
xxxxxxxxxxxxxxxxxxxxx
回复

使用道具 举报

xiao201261 发表于 2014-2-4 19:42 | 显示全部楼层
neycwby09 发表于 2014-2-4 14:41
占位一会上电脑详细看

p.s ls那位 呵呵……

  楼上那位禁言3天反省吧

点评

感谢提醒用替换功能,已更新内容。  发表于 2014-2-4 19:52
回复

使用道具 举报

xiao201261 发表于 2014-2-4 19:55 | 显示全部楼层
daxuexinsheng 发表于 2014-2-4 13:51
修复提醒:
      提醒1:  ”Use of  compiler reserved name (_T_*)”,这个提醒的意思是,使用了编译器的 ...

其实就是修改dsdt总结出来的
回复

使用道具 举报

s1025xfei 发表于 2014-2-4 19:59 | 显示全部楼层
win下可以提取dsdt的aida64最终版本仅有这个了Aida64extreme3.20.2600
回复

使用道具 举报

daxuexinsheng  楼主| 发表于 2014-2-4 20:06 | 显示全部楼层
s1025xfei 发表于 2014-2-4 19:59
win下可以提取dsdt的aida64最终版本仅有这个了Aida64extreme3.20.2600

      应该只是换了提取的操作方式,从原来的右键,换到了菜单栏的一个子菜单里,具体记不清了,好像是在菜单倒数第二项的子菜单里的 acpi explorer。
回复

使用道具 举报

s1025xfei 发表于 2014-2-4 20:15 | 显示全部楼层
daxuexinsheng 发表于 2014-2-4 20:06
应该只是换了提取的操作方式,从原来的右键,换到了菜单栏的一个子菜单里,具体记不清了,好像是在 ...

我把Aida64extreme所有选项打开都找不到呀,,难道搞进商业版里面去了
回复

使用道具 举报

daxuexinsheng  楼主| 发表于 2014-2-4 20:19 | 显示全部楼层
s1025xfei 发表于 2014-2-4 20:15
我把Aida64extreme所有选项打开都找不到呀,,难道搞进商业版里面去了

extreme我确实没有用过,我是在商业版里看到的。督查看看有没有explorer字样的项。
回复

使用道具 举报

s1025xfei 发表于 2014-2-4 20:32 | 显示全部楼层
daxuexinsheng 发表于 2014-2-4 20:19
extreme我确实没有用过,我是在商业版里看到的。督查看看有没有explorer字样的项。

111111111.png

好吧,找到了,把本来工程师版本里面的东西删了。搞到商业版里面去了,软件授权费用一下子高了不少,国外的软件商真坑- -

点评

呵呵,不好意思啦,我还把名字都记错了,浪费了督察一点时间了呢。抱歉啦。  发表于 2014-2-4 20:35
回复

使用道具 举报

xdod 发表于 2014-2-4 20:33 | 显示全部楼层
hd4600 或者说haswell有完美的加载AppleIntelpowermanager。kextAde方法吗?

点评

我的只是不加载那个驱动而已 实际不影响使用  发表于 2014-2-5 15:03
换破解AppleIntelPM啊, 或者你用clover的kernelPM使用XCPM不行么  发表于 2014-2-5 15:01
回复

使用道具 举报

xiao201261 发表于 2014-2-4 20:33 | 显示全部楼层
s1025xfei 发表于 2014-2-4 20:32
好吧,找到了,把本来工程师版本里面的东西删了。搞到商业版里面去了,软件授权费用一下子高了不少, ...

12 年的用着横好
回复

使用道具 举报

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

本版积分规则

小黑屋手机版联系我们

Copyright © 2005-2025 PCBeta. All rights reserved.

Powered by Discuz!  CDN加速及安全服务由「快御」提供

请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。

远景在线 ( 苏ICP备17027154号 )|远景论坛 |Win11论坛 |Win10论坛 |Win8论坛 |Win7论坛 |WP论坛 |Office论坛

GMT+8, 2025-1-9 22:01

快速回复 返回顶部 返回列表