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