ACPI 调试

ACPICA 调试接口

如需开启 ACPICA 的调试输出,请将“enable_acpi_debug = true”build 实参传递给 GN。启用此选项后,ACPICA 会使用两个全局变量来控制调试输出。

AcpiDbgLevel

AcpiDbgLevel 是一个位图,其中包含 third_party/acpica/src/source/include/acpica/acoutput.h 中定义的值,并以“ACPI_LV_”为前缀。为方便起见,我们预定义了一些详细程度级别:ACPI_LV_VERBOSITY1、ACPI_LV_VERBOSITY2、ACPI_LV_VERBOSITY3。这些控制变量用于指定要记录的跟踪事件类型。例如,如果您想跟踪所有函数调用和互斥锁操作,可以将 AcpiDbgLevel 设置为

“ACPI_LV_FUNCTIONS | ACPI_LV_MUTEX”

AcpiDbgLayer

AcpiDbgLayer 是 third_party/acpica/src/source/include/acpica/acoutput.h 中定义的位图值。这些值没有共同的前缀,但被列为“组件 ID”。这些变量用于控制要跟踪的 ACPICA 子模块。例如,若要跟踪命名空间逻辑和执行器,您可以将 AcpiDbgLayer 设置为

“ACPI_NAMESPACE | ACPI_EXECUTOR”

设置这些值

我们可以在 third_party/acpica/src/source/os_specific/service_layers/osfuchsia.cpp 中定义的 AcpiOsInitialize 方法中轻松设置这些值。一种可能很有用的方法是在 AcpiOsInitialize 中将这两个值归零,并在调用感兴趣的 ACPICA 之前立即将其设置为非零值。

AcpiDebugTrace

此外,ACPIA API 中还有一个名为 AcpiDebugTrace 的方法。它应该支持按其 4 字符命名空间名称跟踪特定 ACPI 方法(但没有针对特定节点的范围界定)。如需了解详情,请参阅 ACPICA 手册。