注:以前一直觉得Linux在我的清华同方上电源管理有问题,不止是电池电量显示不对,而且很多功能键也老出错,也发生过死机,因此以前常常是关闭acpid而开启apmd了事; 后来不知道从什么时候起,功能键都正常了,死机也不见了,所以就没有再注意过它,但是昨天学点软件的时候我长时间开着笔记本,后来结果机器居然又死掉了,开机之后做了一次磁盘检查,结果正在写的和课题有关的东西不见了,真是郁闷。然后我检查了一下系统,估计问题可能还是出在ACPI上,于是就在网上查了些资料,花了{yt}时间,应该算是解决了这个问题了,所以就写了本文以记录自己操作及参考的文章。由于本文没有任何原创内容,方法xx参照参考的文章,没有太大价值,故请勿转载本文,如需参考的,不妨注意文末列出的参考文章。
——by realasking
我的主板是微星做的,BIOS版本是:A1414NT2 V1.08,
我的操作系统是: Linux 12
在操作中使用了如下工具:dmidecode,acpi,iasl, cat, gnu编译器
所有这些工具都可以从源里直接下载。
由于学校Ftp上已经有新的内核的源代码了,所以我顺便更新了一下内核,因此这个办法是通过重新编译内核来实现的:
1.把系统原来内核的.config文件拷到新内核的文件夹下,然后做好其它配置工作。
2.生成需要的文件(先用dmidecode查bios版本号,看有没有人解决过):
a. sudo cat /proc/acpi/dsdt > dsdt
b. iasl -d dsdt
c. 执行一下iasl -tc dsdt.dsl,记录下全部错误信息和警告信息
然后修改dsdt.dsl,再执行,使这些信息全部消失为止
我只是按照下面的参考文章,简单的把所有的warning中的地址都改为0xFFFF,
并把 If (MCTH (_OS, "Linux"))
{
Store (0x3, OSVR)
}
节的0x3改成了Zero,然后把这一节移动到了正确的位置。
d. iasl -tc dsdt.dsl生成dsdt.hex
3.修改内核配置:
a. 把生成的dsdt.hex拷贝到内核目录的include文件夹下
b. vi .config,
删除:CONFIG_STANDALONE=y
添加:CONFIG_ACPI_CUSTOM_DSDT=y
CONFIG_ACPI_CUSTOM_DSDT_FILE="dsdt.hex"
编译内核即可。然后我又跑了昨天跑的软件,发现这次没有死机了,而且发现conky的电池状态显示也正常了,同时各个热键依然能够使用,此外还有一个意外的惊喜:再次进入系统,自动错误报告没有再弹出内核出现mtrr错误是否报告的提示了,估计问题已经解决。
使用效果如图所示,注意右边的conky和右下角的KDE小工具:
另外,如果不想升级内核的话,不重新编译内核应该也能解决这个问题,估计有人弄过。