Linux acpi off關(guān)于Suspend to Disk 問題分析
對于debug_layer和debug_level,include/acpi/acoutput.h里面包含了很多值,這些值決定了Linux/ACPI輸出信息的詳細(xì)程度和內(nèi)容范圍。acpi.debug_level和 acpi.debug_layer是kernel參數(shù),也可以在系統(tǒng)運(yùn)行時(shí)改變這些值,它們是/sys/module/acpi/parameters/debug_{level,layer}。
注意,這些輸出信息可能很快就將kernel的ring buffer用完,你可能需要使用log_buf_len=XY來增加ring buffer的大小。使用serial console (Documentation/serial-console.txt)來得到kernel輸出是一個(gè)好的方法。如果你的筆記本電腦沒有串口,可以試試netconsole (Documentation/networking/netconsole.txt)。
Linux acpi off使用定制的 DSDT
Linux acpi offDSDT (Differentiated System Description Table)是一個(gè)主要的ACPI表,它包含了很多AML代碼。因?yàn)锽IOS的bug,這些代碼本身可能有錯(cuò)。Linux提供的一種方法能讓你使用定制的DSDT表,這對于調(diào)試很有幫助。讓kernel使用定制的DSDT步驟如下:
首先要得到原始的DSDT表(后面的章節(jié)會介紹acpidump等工具):
$ acpidump > acpidump.out
$ acpixtract DSDT acpidump > DSDT.dat
這樣我們就得到了DSDT表的二進(jìn)制文件,將它反匯編
$ iasl -d DSDT.dat
我們會得到一個(gè)AML代碼文件,你可以修改它
$ vi DSDT.dsl
然后重新編譯
$ iasl -tc DSDT.dsl
把它拷貝到kernel source中
$ cp DSDT.hex $SRC/include/
Linux acpi off加入下面幾行到你的kernel配置文件(.config):
CONFIG_STANDALONE=n
CONFIG_ACPI_CUSTOM_DSDT=y
CONFIG_ACPI_CUSTOM_DSDT_FILE=”DSDT.hex”
Linux acpi off編譯kernel,運(yùn)行,你的dmesg中應(yīng)該有如下輸出:
Table [DSDT] replaced by host OS
使用這種方法,你可以修正DSDT的bug。這種方法帶來的一個(gè)有用的debug方法是:將ACPI的debug選項(xiàng)打開,然后在你的DSDT中加入類似如下的語句:
Store(”hello world!”, Debug)
Store(Local0, Debug)
即將某個(gè)變量存儲到特殊的目標(biāo)Debug中。加入了這樣語句后的函數(shù)被kernel解釋執(zhí)行時(shí)你可以看到如下輸出:
[ACPI Debug] String: [0x0C] “hello world!”
[ACPI Debug] Integer: 0×00000042
由此我們可以在AML代碼級別進(jìn)行調(diào)試。
【編輯推薦】
- Linux 查看磁盤空間實(shí)現(xiàn)代碼介紹
- Linux操作系統(tǒng)需要微軟的十大幫助
- 探尋Linux到底需要多低的配置
- Linux測試工具tcpdump監(jiān)視TCP/IP連接命令介紹
- Linux流量控制實(shí)例應(yīng)用介紹