ACPI CA 除錯輸出¶
ACPI CA 可以生成除錯輸出。本文件描述瞭如何使用此功能。
編譯時配置¶
ACPI CA 除錯輸出由 CONFIG_ACPI_DEBUG 全域性啟用。如果未設定此配置選項,除錯訊息甚至不會編譯到核心中。
啟動時和執行時配置¶
當 CONFIG_ACPI_DEBUG=y 時,您可以選擇您感興趣的元件和訊息級別。在啟動時,使用 acpi.debug_layer 和 acpi.debug_level 核心命令列選項。啟動後,您可以使用 /sys/module/acpi/parameters/ 中的 debug_layer 和 debug_level 檔案來控制除錯訊息。
debug_layer(元件)¶
“debug_layer”是一個掩碼,用於選擇感興趣的元件,例如 ACPI 直譯器中的特定部分。要構建 debug_layer 位掩碼,請在 ACPI 原始檔中查詢“#define _COMPONENT”。
您可以使用 acpi.debug_layer 命令列引數在啟動時設定 debug_layer 掩碼,也可以在啟動後透過向 /sys/module/acpi/parameters/debug_layer 寫入值來更改它。
可能的元件在 include/acpi/acoutput.h 中定義。
讀取 /sys/module/acpi/parameters/debug_layer 顯示支援的掩碼值。
ACPI_UTILITIES 0x00000001
ACPI_HARDWARE 0x00000002
ACPI_EVENTS 0x00000004
ACPI_TABLES 0x00000008
ACPI_NAMESPACE 0x00000010
ACPI_PARSER 0x00000020
ACPI_DISPATCHER 0x00000040
ACPI_EXECUTER 0x00000080
ACPI_RESOURCES 0x00000100
ACPI_CA_DEBUGGER 0x00000200
ACPI_OS_SERVICES 0x00000400
ACPI_CA_DISASSEMBLER 0x00000800
ACPI_COMPILER 0x00001000
ACPI_TOOLS 0x00002000
debug_level¶
“debug_level”是一個掩碼,用於選擇不同型別的訊息,例如與初始化、方法執行、資訊性訊息等相關的訊息。要構建 debug_level,請檢視 ACPI_DEBUG_PRINT() 語句中指定的級別。
ACPI 直譯器使用幾個不同的級別,但 Linux ACPI 核心和 ACPI 驅動程式通常只使用 ACPI_LV_INFO。
您可以使用 acpi.debug_level 命令列引數在啟動時設定 debug_level 掩碼,也可以在啟動後透過向 /sys/module/acpi/parameters/debug_level 寫入值來更改它。
可能的級別在 include/acpi/acoutput.h 中定義。讀取 /sys/module/acpi/parameters/debug_level 顯示支援的掩碼值,目前是這些。
ACPI_LV_INIT 0x00000001
ACPI_LV_DEBUG_OBJECT 0x00000002
ACPI_LV_INFO 0x00000004
ACPI_LV_INIT_NAMES 0x00000020
ACPI_LV_PARSE 0x00000040
ACPI_LV_LOAD 0x00000080
ACPI_LV_DISPATCH 0x00000100
ACPI_LV_EXEC 0x00000200
ACPI_LV_NAMES 0x00000400
ACPI_LV_OPREGION 0x00000800
ACPI_LV_BFIELD 0x00001000
ACPI_LV_TABLES 0x00002000
ACPI_LV_VALUES 0x00004000
ACPI_LV_OBJECTS 0x00008000
ACPI_LV_RESOURCES 0x00010000
ACPI_LV_USER_REQUESTS 0x00020000
ACPI_LV_PACKAGE 0x00040000
ACPI_LV_ALLOCATIONS 0x00100000
ACPI_LV_FUNCTIONS 0x00200000
ACPI_LV_OPTIMIZATIONS 0x00400000
ACPI_LV_MUTEX 0x01000000
ACPI_LV_THREADS 0x02000000
ACPI_LV_IO 0x04000000
ACPI_LV_INTERRUPTS 0x08000000
ACPI_LV_AML_DISASSEMBLE 0x10000000
ACPI_LV_VERBOSE_INFO 0x20000000
ACPI_LV_FULL_TABLES 0x40000000
ACPI_LV_EVENTS 0x80000000
示例¶
例如,drivers/acpi/acpica/evxfevnt.c 包含此內容
#define _COMPONENT ACPI_EVENTS
...
ACPI_DEBUG_PRINT((ACPI_DB_INIT, "ACPI mode disabled\n"));
要開啟此訊息,請在 acpi.debug_layer 中設定 ACPI_EVENTS 位,並在 acpi.debug_level 中設定 ACPI_LV_INIT 位。(ACPI_DEBUG_PRINT 語句使用 ACPI_DB_INIT,它是基於 ACPI_LV_INIT 定義的宏。)
在啟動期間啟用所有 AML“除錯”輸出(在解釋 AML 時儲存到 Debug 物件中)
acpi.debug_layer=0xffffffff acpi.debug_level=0x2
啟用所有 ACPI 硬體相關訊息
acpi.debug_layer=0x2 acpi.debug_level=0xffffffff
啟動後啟用所有 ACPI_DB_INFO 訊息
# echo 0x4 > /sys/module/acpi/parameters/debug_level
顯示所有有效的元件值
# cat /sys/module/acpi/parameters/debug_layer