Linux解析ACPI表

参考:

https://blog.csdn.net/jiangwei0512/article/details/83317890

 

查看系统的ACPI表:
lihui@6000pc:/sys/firmware/acpi/tables$ tree
.
├── APIC
├── data
├── DSDT
├── dynamic
├── FACP
├── FACS
├── IVRS
├── MCFG
├── PPTT
├── SLIT
├── SRAT
└── VIAT

iasl
iasl是一个编译和解析ACPI的工具,在编译UEFI的时候也是必不可少的。
sudo apt install iasl

lihui@6000pc:/sys/firmware/acpi/tables$ sudo iasl -d APIC

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

File appears to be binary: found 223 non-ASCII characters, disassembling
Binary file appears to be a valid ACPI table, disassembling
Input file APIC, Length 0xFA (250) bytes
ACPI: APIC 0x0000000000000000 0000FA (v06 LOONGS LOONGSON 00000002 LIUX 01000013)
Could not open output file APIC.dsl
之后就可以通过iasl命令来解析ACPI文件了。但是需要注意,不能直接在上述的/sys/firmare/acpi/tables上来解析,会报错

所以我们先将需要解析的文件拿出来再解析:
lihui@6000pc:/sys/firmware/acpi/tablessudocpAPIC /lihui@6000pc:/sys/firmware/acpi/tables cd ~
lihui@6000pc:~$ sudo iasl -d APIC

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

File appears to be binary: found 223 non-ASCII characters, disassembling
Binary file appears to be a valid ACPI table, disassembling
Input file APIC, Length 0xFA (250) bytes
ACPI: APIC 0x0000000000000000 0000FA (v06 LOONGS LOONGSON 00000002 LIUX 01000013)
Acpi Data Table [APIC] decoded
Formatted output: APIC.dsl - 6958 bytes

或者:
lihui@6000pc:~sudocat/sys/firmware/acpi/tables/APIC>APIC.binlihui@6000pc:  iasl -d APIC.bin

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

File appears to be binary: found 223 non-ASCII characters, disassembling
Binary file appears to be a valid ACPI table, disassembling
Input file APIC.bin, Length 0xFA (250) bytes
ACPI: APIC 0x0000000000000000 0000FA (v06 LOONGS LOONGSON 00000002 LIUX 01000013)
Acpi Data Table [APIC] decoded
Formatted output: APIC.dsl - 6962 bytes


可以看到解析成功了,并生成了新的dsl文件,可以通过cat来查看:
lihui@6000pc:~$ cat APIC.dsl
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20240827 (64-bit version)
* Copyright (c) 2000 - 2023 Intel Corporation
*
* Disassembly of APIC
*
* ACPI Data Table [APIC]
*
* Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue (in hex)
*/

[000h 0000 004h] Signature : "APIC" [Multiple APIC Description Table (MADT)]
[004h 0004 004h] Table Length : 000000FA
[008h 0008 001h] Revision : 06
[009h 0009 001h] Checksum : B9
[00Ah 0010 006h] Oem ID : "LOONGS"
[010h 0016 008h] Oem Table ID : "LOONGSON"
[018h 0024 004h] Oem Revision : 00000002
[01Ch 0028 004h] Asl Compiler ID : "LIUX"
[020h 0032 004h] Asl Compiler Revision : 01000013

[024h 0036 004h] Local Apic Address : 1FE01400
[028h 0040 004h] Flags (decoded below) : 00000001
PC-AT Compatibility : 1
...
...
...
acpidump
上述的iasl工具获取ACPI表需要从特定目录去拿,比较复杂,这里还可以用一个简单的工具acpidump来获取。它是一系列工具中的一个,可以通过如下的命令来安装:
apt install acpica-tools
acpidump工具需要在root用户下使用,帮助说明如下:
之后可以通过-s来查看现有的表:

root@6000pc:/home/lihui# acpidump -s
ACPI: MCFG 0x0000000000000000 00003C (v01 LOONGS LOONGSON 00000001 LIUX 01000013)
ACPI: APIC 0x0000000000000000 0000FA (v06 LOONGS LOONGSON 00000002 LIUX 01000013)
ACPI: SLIT 0x0000000000000000 00002D (v01 LOONGS LOONGSON 00000002 LIUX 01000013)
ACPI: VIAT 0x0000000000000000 00002C (v01 LOONGS LOONGSON 00000002 LIUX 01000013)
ACPI: IVRS 0x0000000000000000 00004C (v01 LARCH LOONGSON 00000001 LIUX 00000001)
ACPI: DSDT 0x0000000000000000 00282A (v02 LOONGS LOONGSON 00000002 INTL 20180629)
ACPI: SRAT 0x0000000000000000 000100 (v02 LOONGS LOONGSON 00000002 LIUX 01000013)
ACPI: FACP 0x0000000000000000 0000F4 (v03 LOONGS LOONGSON 00000002 LIUX 01000013)
ACPI: PPTT 0x0000000000000000 000128 (v03 LOONGS LOONGSON 00000002 LIUX 01000013)
ACPI: FACS 0x0000000000000000 000040
然后通过-n xxx -b来生成某个表的二进制文件,之后就又可以通过iasl来解析:
root@6000pc:/home/lihui# acpidump -n APIC -b
root@6000pc:/home/lihui# iasl -d apic.dat

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

File appears to be binary: found 223 non-ASCII characters, disassembling
Binary file appears to be a valid ACPI table, disassembling
Input file apic.dat, Length 0xFA (250) bytes
ACPI: APIC 0x0000000000000000 0000FA (v06 LOONGS LOONGSON 00000002 LIUX 01000013)
Acpi Data Table [APIC] decoded
Formatted output: apic.dsl - 6962 bytes

posted on   lh03061238  阅读(23)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-01-24 使用CCS调试基于AM335X的SPL、Uboot(原创)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示