• 简析 ACPI 表

1.ACPI表

  For ACPI on arm64, tables also fall into the following categories:

  • Required: DSDT, FADT, GTDT, MADT, MCFG, RSDP, SPCR, XSDT

  • Recommended: BERT, EINJ, ERST, HEST, PCCT, SSDT

  • Optional: BGRT, CPEP, CSRT, DBG2, DRTM, ECDT, FACS, FPDT, IBFT, IORT, MCHI, MPST, MSCT, NFIT, PMTT, RASF, SBST, SLIT, SPMI, SRAT, STAO, TCPA, TPM2, UEFI, XENV

  • Not supported: BOOT, DBGP, DMAR, ETDT, HPET, IVRS, LPIT, MSDM, OEMx, PSDT, RSDT, SLIC, WAET, WDAT, WDRT, WPBT

1.1.解析ACPI表

root@uos-PC:/sys/firmware/acpi/tables# tree
.
├── APIC
├── data
├── DSDT
├── dynamic
├── FACP
├── FACS
├── MCFG
├── SLIT
└── SRAT
2 directories, 7 files

2.解析工具

2.1.iasl
  iasl是一个编译和解析ACPI的工具,在编译UEFI的时候也是必不可少的。默认系统不会安装,需要额外安装:apt install iasl

  然后就可以通过iasl命令来解析ACPI文件了,但不能直接在/sys/firmare/acpi/tables上来解析,会报错:

root@uos-PC:/sys/firmware/acpi/tables# iasl -d APIC
Intel ACPI Component Architecture
ASL+ Optimizing Compiler/Disassembler version 20181213
Copyright (c) 2000 - 2018 Intel Corporation

Input file APIC, Length 0x5E (94) bytes
ACPI: APIC 0x0000000000000000 00005E (v01 LOONGS LOONGSON 00000002 LIUX 01000013)
Could not open output file APIC.dsl

  先将需要解析的文件拿出来再解析:

root@uos-PC:/home/uos# iasl -d APIC 
Intel ACPI Component Architecture
ASL+ Optimizing Compiler/Disassembler version 20181213
Copyright (c) 2000 - 2018 Intel Corporation

Input file APIC, Length 0x5E (94) bytes
ACPI: APIC 0x0000000000000000 00005E (v01 LOONGS LOONGSON 00000002 LIUX 01000013)
Acpi Data Table [APIC] decoded
Formatted output:  APIC.dsl - 3519 bytes

root@uos-PC:/home/uos# cat APIC.dsl 
[000h 0000   4]                    Signature : "APIC"    [Multiple APIC Description Table (MADT)]
[004h 0004   4]                 Table Length : 0000005E
[008h 0008   1]                     Revision : 01
[009h 0009   1]                     Checksum : 39
[00Ah 0010   6]                       Oem ID : "LOONGS"
[010h 0016   8]                 Oem Table ID : "LOONGSON"
[018h 0024   4]                 Oem Revision : 00000002
[01Ch 0028   4]              Asl Compiler ID : "LIUX"
[020h 0032   4]        Asl Compiler Revision : 01000013

[024h 0036   4]           Local Apic Address : 1FE01400
[028h 0040   4]        Flags (decoded below) : 00000001
                         PC-AT Compatibility : 1

[02Ch 0044   1]                Subtable Type : 00 [Processor Local APIC]
[02Dh 0045   1]                       Length : 08
[02Eh 0046   1]                 Processor ID : 01
[02Fh 0047   1]                Local Apic ID : 00
[030h 0048   4]        Flags (decoded below) : 00000001
                           Processor Enabled : 1

[034h 0052   1]                Subtable Type : 00 [Processor Local APIC]
[035h 0053   1]                       Length : 08
[036h 0054   1]                 Processor ID : 02
[037h 0055   1]                Local Apic ID : 01
[038h 0056   4]        Flags (decoded below) : 00000001
                           Processor Enabled : 1

[03Ch 0060   1]                Subtable Type : 00 [Processor Local APIC]
[03Dh 0061   1]                       Length : 08
[03Eh 0062   1]                 Processor ID : 03
[03Fh 0063   1]                Local Apic ID : 02
[040h 0064   4]        Flags (decoded below) : 00000001
                           Processor Enabled : 1

[044h 0068   1]                Subtable Type : 00 [Processor Local APIC]
[045h 0069   1]                       Length : 08
[046h 0070   1]                 Processor ID : 04
[047h 0071   1]                Local Apic ID : 03
[048h 0072   4]        Flags (decoded below) : 00000001
                           Processor Enabled : 1

[04Ch 0076   1]                Subtable Type : 01 [I/O APIC]
[04Dh 0077   1]                       Length : 0C
[04Eh 0078   1]                  I/O Apic ID : 00
[04Fh 0079   1]                     Reserved : 00
[050h 0080   4]                      Address : 10000000
[054h 0084   4]                    Interrupt : 00000040

[058h 0088   1]                Subtable Type : 04 [Local APIC NMI]
[059h 0089   1]                       Length : 06
[05Ah 0090   1]                 Processor ID : 02
[05Bh 0091   2]        Flags (decoded below) : 0000
                                    Polarity : 0
                                Trigger Mode : 0
[05Dh 0093   1]         Interrupt Input LINT : 01

Raw Table Data: Length 94 (0x5E)

    0000: 41 50 49 43 5E 00 00 00 01 39 4C 4F 4F 4E 47 53  // APIC^....9LOONGS
    0010: 4C 4F 4F 4E 47 53 4F 4E 02 00 00 00 4C 49 55 58  // LOONGSON....LIUX
    0020: 13 00 00 01 00 14 E0 1F 01 00 00 00 00 08 01 00  // ................
    0030: 01 00 00 00 00 08 02 01 01 00 00 00 00 08 03 02  // ................
    0040: 01 00 00 00 00 08 04 03 01 00 00 00 01 0C 00 00  // ................
    0050: 00 00 00 10 40 00 00 00 04 06 02 00 00 01        // ....@.........

2.2.acpidump

  iasl工具获取ACPI表需要从特定目录去拿,比较复杂,这里还可以用一个简单的工具acpidump来获取。它是一系列工具中的一个,可以通过如下的命令来安装:

apt install acpica-tools

  acpidump工具需要在root用户下使用:

root@uos-PC:~# acpidump -s   (-s来查看现有的表)
ACPI: MCFG 0x0000000000000000 00003C (v01 LOONGS LOONGSON 00000001 LIUX 01000013)
ACPI: APIC 0x0000000000000000 00005E (v01 LOONGS LOONGSON 00000002 LIUX 01000013)
ACPI: SLIT 0x0000000000000000 00002D (v01 LOONGS LOONGSON 00000002 LIUX 01000013)
ACPI: DSDT 0x0000000000000000 00202C (v02 LOONGS LOONGSON 00000002 INTL 20190509)
ACPI: SRAT 0x0000000000000000 0000C0 (v02 LOONGS LOONGSON 00000002 LIUX 01000013)
ACPI: FACP 0x0000000000000000 0000F4 (v03 LOONGS LOONGSON 00000002 LIUX 01000013)
ACPI: FACS 0x0000000000000000 000040

root@uos-PC:~# acpidump -n APIC -b
root@uos-PC:~# ls
APIC  apic.dat
root@uos-PC:~# iasl -d apic.dat 
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐