RW 搜索ACPI协议RSD PTR表

本文介绍如何使用Read&WriteUtility工具定位并读取系统中难以找到的ACPI表,如RSDP和RSDT,通过内存搜索技巧,帮助理解和学习ACPI协议。

Read&Write Utility可以读取系统中各种ACPI表,下图是我的ThinkPad的ACPI表:

    通过这张图,可以说,RW读全了所有ACPI表。但是,有些品牌笔记本的实现,比如TOSHIBA/Dynabook,在RW的ACPI Table标签页上找不到RSDP结构和RSDT表!对于新人学习ACPI协议很不方便!经过一番尝试,笔者发现可以通过搜索内存的方式,定位到RSDP和RSDT。

    首先定位RSD PTR(即RSDP结构),根据ACPI协议,该结构中包含XSDT Base Address和RSDT Base Address。点击"Memory dump"按钮----在Memory对话框中点击Find----在Find pattern编辑框中输入 RSD PTR,同时勾选ASCII复选框:

当然,为了缩小范围,可以在Start Address和End Address中填写起始和终止地址。一般这个地址可以参考XSDT Table中Entry0起始地址和最后一个EntryN结束地址,比如我的XSDT Table中Entry0的地址为0x97FF6000,RSD PTR一般在这个地址之前,所以Start Address取0x97000000。Entry22的起始地址为0x97F57000,所以End Address取0x98000000:

搜索结果到两串"RSD PTR"开头的字符串,第二串所在的地址是RSD PTR结构所在内存,即图中地址Address=0x097FFE014。根据ACPI协议,从这个地址起,偏移0x10处是RSDT Base Address,偏移0x18是XSDT Base Address:

可以从这两处地址读取内容,跟RSDP/XSDT Table内容对比,此处以XSDT Table为例,比较ACPI Table中XSDT和Memory 0x0097FD1188处的内容:

以上步骤基于x64位系统,x86系统同样步骤也可以定位

可以通过以下几种方法保存ACPI以供调试或分析: ### 使用 `acpidump` 工具 `acpidump` 是 `acpi` 工具包的一部分,可以用来导出完整的 ACPI 。在大多数 Linux 发行版中,可以通过安装 `acpi` 或 `acpica-tools` 软件包来获取此工具。 1. **安装工具**(如果尚未安装): ```bash sudo apt install acpica-tools # Debian/Ubuntu sudo dnf install acpica-tools # Fedora ``` 2. **导出 ACPI **: ```bash sudo acpidump > acpi_table.dump ``` 此命令将所有 ACPI 信息保存到 `acpi_table.dump` 文件中。 ### 使用 `dmidecode` 和 `dmesg` 提取部分信息 虽然 `dmidecode` 主要用于提取系统硬件信息,但它也可以显示部分 ACPI 相关内容。此外,`dmesg` 可以显示内核启动过程中解析的 ACPI 信息。 1. **使用 `dmidecode` 导出 ACPI 信息**: ```bash sudo dmidecode --type 17 > acpi_info.txt ``` 2. **使用 `dmesg` 查看 ACPI 加载情况**: ```bash dmesg | grep -i acpi > acpi_dmesg.log ``` ### 使用 `sysfs` 接口查看特定 Linux 内核通过 `sysfs` 提供了部分 ACPI 的访问接口,路径通常为 `/sys/firmware/acpi/tables/`。可以使用 `cat` 命令将这些保存为文件。 ```bash sudo cat /sys/firmware/acpi/tables/DSDT > dsdt_table.bin ``` ### 使用 `acpixtract` 提取特定 `acpixtract` 是 `acpica-tools` 中的一个工具,可以从 `acpidump` 的输出中提取特定的 ACPI 。 ```bash sudo acpixtract -a acpi_table.dump ``` ### 使用 `UEFITool`(适用于 UEFI 固件) 如果需要分析完整的 UEFI 固件镜像中的 ACPI ,可以使用 `UEFITool` 来提取和保存 ACPI ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值