忙里偷闲解决了笔记本ACPI一个问题

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid/gid is 1400/1400 is not allowed to access /tmp owned by uid/gid 0/0 in /home/wangxum1/public_html/site/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid/gid is 1400/1400 is not allowed to access /tmp owned by uid/gid 0/0 in /home/wangxum1/public_html/site/includes/file.inc on line 190.

参见 linux 版面文章,多谢 loseweigh

下面是解决的结果,也是给华硕技术支持的信:

希望华硕修正 BIOS (ACPI DSDT) 中的一个问题。

您好,我是一位华硕 M2Ne 笔记本用户,同时也是一个 Linux 用户,发现近期此笔记本的温度传感器工作不很正常,确切地说是 SMBus 总线控制器无法正常工作 [1]

后经过检查,认定是 ACPI DSDT SMBL 字段导致的问题 [2]PCI 总线分配的 SMBus IO 空间为 0xe800 - 0xe81f 32 字节,而 ACPI BIOS DSDT 表中却有
    Name (SMBS, 0xE800)
  Name (SMBL, 0x10)
的字段,即,SMBus IO 空间长度 16 字节,使用 Intel ASL 编译器 (IASL) [3] 修改 DSDT SMBL 0x20,并使用此定制 DSDT 后,问题被解决。[2]

此问题刚刚出现的原因是 [4] 中补丁进入 Linux 内核之前,驱动申请该该 IO 区域长度是固定为 16 字节的,无论 PCI 总线给予多大空间,这样尽管 DSDT PCI 总线不一致,但没有暴露出冲突,不过,自从新的内核采用了更灵活的地址空间确定方式后,此问题被暴露出来 [5]

无论如何,这对于一般的 ACPI BIOS 来说,不是一个常见问题,新的更灵活的地址确定方式更适应驱动的发展 (Intel ICH 早期 SMBus 总线控制器地址空间为 8 字节,随后从 ICH4 开始为 16 字节,将来可能会有更新发展),而地址长度固定写在代码里被摒弃是驱动程序发展的趋势,驱动程序向后退化是不可能的。因此修改 DSDT 是比修改内核代码更为合理的解决方法。

我已经将自己修改过的对应 0204 版本 BIOS DSDT 上传至 Linux ACPI 网站 [6],不过,加载定制 DSDT 对于初学用户并不是一个容易做到的工作,需要为内核打补丁并重新配置、编译,并且,也不是所有用户都可以根据温度传感器问题找到这个 DSDT 并使用,更方便的方法还是华硕公司可以更新 BIOS,修正 DSDT

谢谢

[1] http://lists.lm-sensors.org/pipermail/i2c/2007-May/001118.html
[2] http://lists.lm-sensors.org/pipermail/i2c/2007-May/001129.html
[3] http://www.intel.com/technology/IAPC/acpi/downloads.htm
[4] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=6dcc19dfbc84b2ea5428711b7a47146b5b1788bb
[5] http://lists.lm-sensors.org/pipermail/i2c/2007-May/001134.html
[6] http://acpi.sourceforge.net/dsdt/view.php?id=787