使用定制的 DSDT
linux吧
全部回复
仅看楼主
level 1
root_public 楼主
DSDT (Differentiated System Description Table)是一个主要的ACPI表,它包含了很多AML代码。因为BIOS的bug,这些代码本身可能有错。Linux提供的一种方法能让你使用定制的DSDT表,这对于调试很有帮助。让kernel使用定制的DSDT步骤如下:
首先要得到原始的DSDT表(后面的章节会介绍acpidump等工具):$ acpidump > acpidump.out$ acpixtract DSDT acpidump > DSDT.dat这样我们就得到了DSDT表的二进制文件,将它反汇编$ iasl -d DSDT.dat我们会得到一个AML代码文件,你可以修改它$ vi DSDT.dsl然后重新编译$ iasl -tc DSDT.dsl把它拷贝到kernel source中$ cp DSDT.hex $SRC/include/加入下面几行到你的kernel配置文件(.config):
CONFIG_STANDALONE=nCONFIG_ACPI_CUSTOM_DSDT=yCONFIG_ACPI_CUSTOM_DSDT_FILE=”DSDT.hex”
编译kernel,运行,你的dmesg中应该有如下输出:Table [DSDT] replaced by host OS
使用这种方法,你可以修正DSDT的bug。这种方法带来的一个有用的debug方法是:将ACPI的debug选项打开,然后在你的DSDT中加入类似如下的语句:Store(”hello world!”, Debug)Store(Local0, Debug)即将某个变量存储到特殊的目标Debug中。加入了这样语句后的函数被kernel解释执行时你可以看到如下输出:[ACPI Debug] String: [0x0C] “hello world!”[ACPI Debug] Integer: 0×00000042由此我们可以在AML代码级别进行调试。

2011年08月04日 04点08分 1
level 6
dsdt表
2011年08月04日 09点08分 3
1