查看: 11064|回复: 7

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

[复制链接]
发表于 2013-11-18 11:16 | 显示全部楼层 |阅读模式 |IP属地北京
快御云安全
本帖最后由 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

查看全部评分

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

使用道具 举报

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

是淫道
回复

使用道具 举报

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

使用道具 举报

发表于 2013-11-21 17:00 | 显示全部楼层 |IP属地上海
是和尚吧     。。。。。。。。   花和尚
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2013-12-5 14:47 | 显示全部楼层 |IP属地日本
好文章
回复

使用道具 举报

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

本版积分规则

小黑屋手机版联系我们

Copyright © 2005-2024 PCBeta. All rights reserved.

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

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

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

GMT+8, 2024-12-22 09:56

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