ACPI > 处理未解决的外部控制方法

ACPI > 处理未解决的外部控制方法

我想提取并反编译我的笔记本电脑 ACPI 表。我运行的是 Ubuntu mate 20.04。

看起来有很多方法可以做到这一点。我跟随本指南

获取所有表:sudo acpidump > acpi.log
提取 DSDT 和 SSDT:acpixtract acpi.log

这给了我...

Intel ACPI Component Architecture
ACPI Binary Table Extraction Utility version 20190509
Copyright (c) 2000 - 2019 Intel Corporation

  DSDT -   36705 bytes written (0x00008F61) - dsdt.dat
  SSDT -    7917 bytes written (0x00001EED) - ssdt1.dat
  SSDT -    2144 bytes written (0x00000860) - ssdt2.dat
  SSDT -    2706 bytes written (0x00000A92) - ssdt3.dat
  SSDT -    1790 bytes written (0x000006FE) - ssdt4.dat
  SSDT -     281 bytes written (0x00000119) - ssdt5.dat
  SSDT -    2107 bytes written (0x0000083B) - ssdt6.dat
  SSDT -     771 bytes written (0x00000303) - ssdt7.dat

拆表:iasl -e *.dat -d dsdt.dat

这是输出...

Intel ACPI Component Architecture
ASL+ Optimizing Compiler/Disassembler version 20190509
Copyright (c) 2000 - 2019 Intel Corporation

File appears to be binary: found 12206 non-ASCII characters, disassembling
Binary file appears to be a valid ACPI table, disassembling
Input file dsdt.dat, Length 0x8F61 (36705) bytes
ACPI: DSDT 0x0000000000000000 008F61 (v01 DELL   CL09     00000000 ASL  00040000)
External object resolution file        ssdt7.dat
Input file ssdt7.dat, Length 0x303 (771) bytes
ACPI: SSDT 0x0000000000000000 000303 (v01 PmRef  ApIst    00003000 INTL 20121220)
Pass 1 parse of [SSDT]
Pass 2 parse of [SSDT]
External object resolution file        ssdt6.dat
Input file ssdt6.dat, Length 0x83B (2107) bytes
ACPI: SSDT 0x0000000000000000 00083B (v01 PmRef  Cpu0Cst  00003001 INTL 20121220)
Pass 1 parse of [SSDT]
Pass 2 parse of [SSDT]
External object resolution file        ssdt5.dat
Input file ssdt5.dat, Length 0x119 (281) bytes
ACPI: SSDT 0x0000000000000000 000119 (v01 PmRef  ApCst    00003000 INTL 20121220)
Pass 1 parse of [SSDT]
Pass 2 parse of [SSDT]
External object resolution file        ssdt4.dat
Input file ssdt4.dat, Length 0x6FE (1790) bytes
ACPI: SSDT 0x0000000000000000 0006FE (v01 COMPAL CRV ORB  00001000 ACPI 00040000)
Pass 1 parse of [SSDT]
Pass 2 parse of [SSDT]
External object resolution file        ssdt3.dat
Input file ssdt3.dat, Length 0xA92 (2706) bytes
ACPI: SSDT 0x0000000000000000 000A92 (v01 COMPAL CRV ORB  00003000 ACPI 00040000)
Pass 1 parse of [SSDT]
Pass 2 parse of [SSDT]
External object resolution file        ssdt2.dat
Input file ssdt2.dat, Length 0x860 (2144) bytes
ACPI: SSDT 0x0000000000000000 000860 (v01 COMPAL CRV ORB  00003000 ACPI 00040000)
Pass 1 parse of [SSDT]
Pass 2 parse of [SSDT]
External object resolution file        ssdt1.dat
Input file ssdt1.dat, Length 0x1EED (7917) bytes
ACPI: SSDT 0x0000000000000000 001EED (v01 COMPAL CRV ORB  00001000 ACPI 00040000)
Pass 1 parse of [SSDT]
Pass 2 parse of [SSDT]
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)

Parsing completed

Found 7 external control methods, reparsing with new information
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)

Parsing completed
Disassembly completed
ASL Output:    dsdt.dsl - 330062 bytes

 iASL Warning: There were 7 external control methods found during
 disassembly, but only 2 were resolved (5 unresolved). Additional
 ACPI tables may be required to properly disassemble the code. This
 resulting disassembler output file may not compile because the
 disassembler did not know how many arguments to assign to the
 unresolved methods. Note: SSDTs can be dynamically loaded at
 runtime and may or may not be available via the host OS.

 In addition, the -fe option can be used to specify a file containing
 control method external declarations with the associated method
 argument counts. Each line of the file must be of the form:
     External (<method pathname>, MethodObj, <argument count>)
 Invocation:
     iasl -fe refs.txt -d dsdt.aml

我是否可以反编译/反汇编我的 ACPI 表并且没有那些未解决的外部控制方法?

我认为通过使用此命令:iasl -e *.dat -d dsdt.dat所有可能的外部控制命令都将得到解决,因为我在命令中包含了所有笔记本电脑 SSDT iasl

干杯

答案1

我认为运行此命令后得到的未解决的依赖关系:iasl -e *.dat -d dsdt.dat即:反编译 DSDT 文件本身并不是错误,甚至不一定是问题。

它们很可能是由于从我的文件中调用的方法未在我随反编译 DSDT 文件的命令dsdt.dat提供的列表 (*.dat) 中的任何 SSDT 中定义。iasl

您可能没有所有系统原始 SSDT(ACPI 表),因为有些可能仅在需要时加载,因此当您运行命令来提取 DSDT 和所有 SSDT 时可能尚未使用。

我尝试使用以下命令重新编译 DSDT.dsl 文件:iasl DSDT.dsl并且它确实编译没有错误。我只收到 3 条警告和一些其他信息性消息。

ACPICA 文档是有关 ACPI 表以及如何使用命令反编译它们的非常有用的信息源iasl

我不知道的是有没有办法看到那些“未解决的外部控制方法”的定义。如果有人知道如何找到包含这些方法的(?卸载的)SSDT,请随时贡献。

相关内容