查看: 11252|回复: 7

[教程] 贫道遇到的各种DSDT错误的修复方法【缓慢更新】

[复制链接]
P2Baby 发表于 2013-11-18 11:16 | 显示全部楼层 |阅读模式
快御云安全
本帖最后由 P2Baby 于 2013-11-20 15:14 编辑

我的机器有限,只有一台Dell OptiPlex 3010、Dell OptiPlex 980、ThinkPad x200、ThinkPad x301和一台ThinkPad R400,我会把我在修改过程中遇到的各种错误修改方法分享给大家。

1、Must be a multiple of alignment/granularity value
      DSDT中的原错误代码
  1.                     StartDependentFn (0x01, 0x01)
  2.                     {
  3.                         IO (Decode16,
  4.                             0x03BC,             // Range Minimum
  5.                             0x03BC,             // Range Maximum
  6.                             0x08,               // Alignment
  7.                             0x08,               // Length
  8.                             )
  9.                         IO (Decode16,
  10.                             0x07BC,             // Range Minimum
  11.                             0x07BC,             // Range Maximum
  12.                             0x08,               // Alignment
  13.                             0x08,               // Length
  14.                             )
  15.                         IRQNoFlags ()
  16.                             {7}
  17.                         DMA (Compatibility, NotBusMaster, Transfer8, )
  18.                             {0}
  19.                     }
  20.                     EndDependentFn ()
复制代码
修改为
  1.                     StartDependentFn (0x01, 0x01)
  2.                     {
  3.                         IO (Decode16,
  4.                             0x03BC,             // Range Minimum
  5.                             0x03BC,             // Range Maximum
  6.                             0x01,               // Alignment
  7.                             0x08,               // Length
  8.                             )
  9.                         IO (Decode16,
  10.                             0x07BC,             // Range Minimum
  11.                             0x07BC,             // Range Maximum
  12.                             0x01,               // Alignment
  13.                             0x08,               // Length
  14.                             )
  15.                         IRQNoFlags ()
  16.                             {7}
  17.                         DMA (Compatibility, NotBusMaster, Transfer8, )
  18.                             {0}
  19.                     }
  20.                     EndDependentFn ()
复制代码
解释:只需把0x08, // Alignment 修改为0x01,  // Alignment

2、Result is not used, operator has no effect
  1. Method (SX41, 0, NotSerialized)
  2.     {
  3.         Store (SXX2, Local0)
  4.         Add (Local0, 0x02)
  5.         If (LLessEqual (Local0, SizeOf (SXX0)))
  6.         {
  7.             CreateWordField (SXX0, SXX2, SX21)
  8.             Store (Local0, SXX2)
  9.             Return (SX21)
  10.         }
  11.         Return (Zero)
  12.     }
复制代码
修改为
  1. Method (SX41, 0, NotSerialized)
  2.     {
  3.         Store (SXX2, Local0)
  4.         Add (Local0, 0x02, Local0)
  5.         If (LLessEqual (Local0, SizeOf (SXX0)))
  6.         {
  7.             CreateWordField (SXX0, SXX2, SX21)
  8.             Store (Local0, SXX2)
  9.             Return (SX21)
  10.         }
  11.         Return (Zero)
  12.     }
复制代码
解释:只需把Add (Local0, 0x02)修改为 Add (Local0, 0x02, Local0) 即可

3、Invalid lrading asterisk
  1.         Device (AMW0)
  2.         {
  3.             Mutex (WMIX, 0x01)
  4.             Name (_HID, "*pnp0c14")
  5.             Name (_UID, Zero)
复制代码
修改为
  1.         Device (AMW0)
  2.         {
  3.             Mutex (WMIX, 0x01)
  4.             Name (_HID, "PNP0C14")
  5.             Name (_UID, Zero)
复制代码
解释:只需把小写的*pnp0c14修改为全大写的PNP0C14(还要注意把*号也删掉)


4、Called method may not always return a value
  1. Method (LFLS, 0, NotSerialized)
  2. {
  3.         Name (TMPB, Buffer (0x02)
  4.         {
  5.                 0x00, 0x00
  6.         })
  7.         CreateByteField (TMPB, 0x00, LPCT)
  8.         CreateByteField (TMPB, 0x01, SSUM)
  9.         TPHY (0x00)
  10.         Store (PH02, LPCT)
  11.         If (LPCT)
  12.         {
  13.                 Store (0x00, SSUM)
  14.                 Add (SSUM, PH01, SSUM)
  15.                 Add (SSUM, PH02, SSUM)
  16.                 Add (SSUM, PH03, SSUM)
  17.                 Add (SSUM, PPRQ, SSUM)
  18.                 Add (SSUM, PPLO, SSUM)
  19.                 Add (SSUM, PPRP, SSUM)
  20.                 Add (SSUM, PPOR, SSUM)
  21.                 Add (SSUM, TPRS, SSUM)
  22.                 Add (SSUM, TPMV, SSUM)
  23.                 Add (SSUM, MOR, SSUM)
  24.                 Add (SSUM, RSV0, SSUM)
  25.                 If (SSUM) {}
  26.                 Else
  27.                 {
  28.                         Return (0x00)
  29.                 }

  30.                 Return (0x02)
  31.         }
  32. }
复制代码
修改为
  1. Method (LFLS, 0, NotSerialized)
  2. {
  3.         Name (TMPB, Buffer (0x02)
  4.         {
  5.                 0x00, 0x00
  6.         })
  7.         CreateByteField (TMPB, 0x00, LPCT)
  8.         CreateByteField (TMPB, 0x01, SSUM)
  9.         TPHY (0x00)
  10.         Store (PH02, LPCT)
  11.         If (LPCT)
  12.         {
  13.                 Store (0x00, SSUM)
  14.                 Add (SSUM, PH01, SSUM)
  15.                 Add (SSUM, PH02, SSUM)
  16.                 Add (SSUM, PH03, SSUM)
  17.                 Add (SSUM, PPRQ, SSUM)
  18.                 Add (SSUM, PPLO, SSUM)
  19.                 Add (SSUM, PPRP, SSUM)
  20.                 Add (SSUM, PPOR, SSUM)
  21.                 Add (SSUM, TPRS, SSUM)
  22.                 Add (SSUM, TPMV, SSUM)
  23.                 Add (SSUM, MOR, SSUM)
  24.                 Add (SSUM, RSV0, SSUM)
  25.                 If (SSUM) {}
  26.                 Else
  27.                 {
  28.                         Return (0x00)
  29.                 }

  30.                 Return (0x02)
  31.         }
  32.         Return (Zero)
  33.         /*返回一个值*/
  34. }
复制代码
解释:只需在整段的末尾返回一个值,即代码中的Return (Zero)


5、Effective AML package length is zero
  1. Name (PIC3, Package (0x00) {})
  2.         Name (API3, Package (0x00) {})
复制代码
修改为
  1. Name (PIC3, Package (Zero) {})
  2.         Name (API3, Package (Zero) {})
复制代码
解释:只需将0x00修改为Zero


6、Recursive method call (STDG)
  1.     Method (STDG, 3, NotSerialized)
  2.     {
  3.         Store (Arg0, Local0)
  4.         If (LGreaterEqual (Arg0, 0x0A))
  5.         {
  6.             Divide (Arg0, 0x0A, Local0, Local1)
  7.             Store (STDG (Local1, Arg1, Arg2), Arg2)
  8.         }
  9.         Add (Local0, 0x30, Local0)
  10.         Store (Local0, Index (Arg1, Arg2))
  11.         Increment (Arg2)
  12.         Return (Arg2)
  13.     }
复制代码
修改为

  1.     Method (STDG, 3, NotSerialized)
  2.     {
  3.         Store (Arg0, Local0)
  4.         If (LGreaterEqual (Arg0, 0x0A))
  5.         {
  6.             Divide (Arg0, 0x0A, Local0, Local1)
  7.             Store (STDG (Local1, Arg1, Arg2), Arg2)
  8.         }
  9.         Add (Local0, 0x30, Local0)
  10.         Increment (Arg2)
  11.         Return (Arg2)
  12.     }
复制代码
解释:将原文中的
Store (Local0, Index (Arg1, Arg2))删除

7、ResourceTag larger than Field (Tag 64 bits, Field 8 bits)  注意注意啦:此处是Field 8 bit ,不是16bit或32bit
  1.                     CreateByteField (BUF0, \_SB.PCI0._Y0F._LEN, MSLN)
复制代码
修改为
  1.                     CreateQWordField (BUF0, \_SB.PCI0._Y0F._LEN, MSLN)
复制代码
解释:其实大家只需要注意错误中的Tag Bits是多少即可,如果Tag 64 bits,那就将Field中的CreateByteField修改为CreateQWordField,如果是32 Bits,那就修改为CreateDWordField,如果是16Bits,那就修改为CreateDWordField,如果是8bits,那就修改为CreateByteField。
普及姿势:Byte = 8, Word = 16, DWord = 32, QWord = 64.

8、Object does not exist (LNKA)
  1. Package (0x04)
  2.             {
  3.                 0xFFFF,
  4.                 Zero,
  5.                 LNKA,
  6.                 Zero
  7.             },
复制代码
在整个aml文件开头添加External (LNKA)
  1. DefinitionBlock ("dsdt.aml", "DSDT", 2, "5442B", "5442B170", 0x00000170)
  2. {
  3.     External (LNKA)
复制代码
解释:在整个aml文件开头的大括号 { 后面添加External (LNKA),由几个就添加几个,像我的Dell C6100服务器主板就添加了LNKA、LNKB、LNKC、LNKD、LNKE和LNKH
9、_HID suffix must be all hex digits (I000)
  1.     Scope (_SB)
  2.     {
  3.         Device (AC)
  4.         {
  5.             Name (_HID, "ACPI000")
  6.             Name (_PCL, Package (0x01)
  7.             {
  8.                 BAT0
  9.             })
  10.             Method (_PSR, 0, NotSerialized)
  11.             {
  12.                 And (MIS0, One, Local0)
  13.                 Return (Local0)
  14.             }
  15.             Method (_STA, 0, NotSerialized)
  16.             {
  17.                 Return (0x0F)
  18.             }
  19.         }
  20.     }
复制代码
修改为
  1.     Scope (_SB)
  2.     {
  3.         Device (AC)
  4.         {
  5.             Name (_HID, "ACPI0000")
  6.             Name (_PCL, Package (0x01)
  7.             {
  8.                 BAT0
  9.             })
  10.             Method (_PSR, 0, NotSerialized)
  11.             {
  12.                 And (MIS0, One, Local0)
  13.                 Return (Local0)
  14.             }
  15.             Method (_STA, 0, NotSerialized)
  16.             {
  17.                 Return (0x0F)
  18.             }
  19.         }
  20.     }
复制代码

10、Object is not accessible from this scope (ATT3)
  1.                     Method (_CRS, 0, NotSerialized)
  2.                     {
  3.                             Return (ATT3)
  4.                     }
复制代码

修改为
  1.                     Method (_CRS, 0, NotSerialized)
  2.                     {
  3.                             Return (BUF0)
  4.                     }
复制代码


评分

3

查看全部评分

头像被屏蔽
msjcn 发表于 2013-11-18 11:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

zmmwan 发表于 2013-11-18 11:51 | 显示全部楼层
msjcn 发表于 2013-11-18 11:32
看头像便知你是个淫僧吧。

是淫道
回复

使用道具 举报

enieng 发表于 2013-11-21 16:48 | 显示全部楼层
收藏了,这种帖子非常好
回复

使用道具 举报

miao-sang 发表于 2013-11-21 17:00 | 显示全部楼层
是和尚吧     。。。。。。。。   花和尚
回复

使用道具 举报

ud狼图腾 发表于 2013-12-5 11:34 | 显示全部楼层
9、_HID suffix must be all hex digits (I000)
这个你的修改前后一模一样。。。。。
回复

使用道具 举报

xtwz 发表于 2013-12-5 14:22 | 显示全部楼层
支持……赞一个
回复

使用道具 举报

handsome_xiang 发表于 2013-12-5 14:47 | 显示全部楼层
好文章
回复

使用道具 举报

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

本版积分规则

小黑屋手机版联系我们

Copyright © 2005-2025 PCBeta. All rights reserved.

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

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

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

GMT+8, 2025-4-17 21:39

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