Liunx系统 --雨林木风操作系统门户

您身边的系统顾问

注册
热点: Porteus 1.2 RC2下载 Devil Linux 1.6.1发布

您现在的位置是:主页 > Mac OS频道 > 疑难问题 >

MAC关于DSDT的修改及一些问题

时间:2010-11-17 10:13 来源:IT168 收藏 复制分享 共有评论(0)条

 

  本人 华硕主板 AMI 的BIOS 这几天爬文 学做 DSDT 看的我是头晕脑胀

  一、如果3项都选择 会出现2个Errors 如果是3项都不选 0 Errors 通过实验 是HPET 补丁的问题 选的话有2个Errors不选无Errors 。而 Aliases补丁 和RTC补丁 选不选都没有错误出现 。

  问:Aliases补丁 和RTC补丁 在修补的时候选还是不选?

  


1.jpg

  二、我提取的DSDT中有 13个Warnings 如果 4个都选上 变为 7个 。于是开始尝试单个的选。local0 与 DGPT 选不选无影响。单独选WAK 为14个Warnings。单独选 MUTE 为6个Warnings

  问:local0 与 DGPT 选与不选?

  


2.jpg

  三、本人把不影响 错误 警告 之类的修复都选上了 最终0 Errors, 6 Warnings, 25 Remarks, 98 Optimizations

  四、开始纠错。

  1.Remarks 的修改

  我的DSDT 中有25个类似的错误

  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 中 有 两种

  第一种: 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 但是究竟用那个? 爬文中 例子都是 用第二中 由于最先看到的是第一种方法所以 两个都尝试了一下。

  注意:这个时候出现了个有趣的事情。

  6个Warnings 当修改了一个 上例 错误后 消失了2个Warnings 也就是说 就该了一个第一种 Warnings 随之就少了一个 第二种Warnings

  望高手能解答一下这种现象。

  第二种 Warnings 这个不会 爬文也没有找到,而其改了 3个 第一种Warnings 3个第二种Warnings 也随之消失了。 费解中ING

  好了再写一些 我找到的 修改

  11dsdt.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即可

(责任编辑:咖啡)
顶一下
(3)
75%
踩一下
(1)
25%
最新评论 进入详细评论页>>
发表评论
已有0条跟贴(点击查看)
只允许会员评论,请先 登录注册
请自觉遵守互联网相关的政策法规,文明发言。