linux kernel 怎么定位RSDP
时间: 2023-10-28 18:52:30 浏览: 128
在 Linux kernel 中,RSDP(Root System Description Pointer)是一个指向 ACPI Root System Description Table(RSDT)或 Extended System Description Table(XSDT)的指针,它位于系统 BIOS 中的固定地址范围内。要定位 RSDP,可以使用以下方法:
1. 在 Linux 启动时,内核会扫描系统 BIOS 中的固定地址范围,以查找 RSDP。在此过程中,内核会搜索 0x000E0000 到 0x000FFFFF 的地址范围,以查找 ACPI 1.0 版本的 RSDP,或搜索 0x00000000 到 0x0009FFFF 的地址范围,以查找 ACPI 2.0 或更高版本的 RSDP。
2. 通过 `acpi_find_root_pointer()` 函数查找 RSDP。这个函数会搜索内存中的固定地址范围,以查找 ACPI 1.0 或更高版本的 RSDP。如果找到了 RSDP,则返回指向 RSDP 的指针;否则返回 NULL。
3. 在某些情况下,可以通过在 bootloader 或操作系统内核命令行中指定 RSDP 的地址来定位它。例如,在 GRUB2 中可以使用 `acpi` 命令行选项来指定 RSDP 的地址。命令行选项的格式为 `acpi=[on|off|ht|force] [rsdp=addr]`,其中 `rsdp=addr` 指定 RSDP 的地址。
需要注意的是,RSDP 的地址是固定的,因此在不同的系统或固件版本中可能会有所不同。在使用上述方法定位 RSDP 时,应该确保使用正确的地址范围或地址值。
阅读全文