5.2.5. 根系统描述指针 (RSDP)
在OS初始化期间,OSPM必须从平台获取根系统描述指针(RSDP)结构。当OSPM定位根系统描述指针(RSDP)结构时,它会使用RSDP中提供的物理系统地址定位根系统描述表(RSDT)或扩展根系统描述表(XSDT)。
5.2.5.1. 在 IA-PC 系统上查找 RSDP
OSPM 通过在 16 字节边界上的物理内存范围中搜索有效的根系统描述指针结构签名和校验和匹配来查找根系统描述指针 (RSDP) 结构,如下所示:
扩展BIOS数据区 (EBDA) 的前 1 个KB。对于EISA或MCA系统,EBDA可在BIOS数据区的两字节位置 40:0Eh 中找到。
BIOS 只读存储空间位于 0E0000h 和 0FFFFFh 之间。
5.2.5.2. 在启用 UEFI 的系统上查找 RSDP
在启用统一可扩展固件接口 (UEFI) 的系统中,指向 RSDP 结构的指针存在于 EFI 系统表中。在调用时,OS加载程序提供了一个指向EFI系统表的指针。 OS加载器必须从EFI系统表中检索指向RSDP结构的指针,并使用OS相关数据结构将该指针传送到OSPM,作为从OS加载器向OS移交控制权的一部分。
OS加载程序通过检查EFI系统表中的EFI配置表来定位指向RSDP结构的指针。 EFI 配置表条目由全局唯一标识符 (GUID)/表指针对组成。 UEFI规范为ACPI定义了两个 GUID;一个用于 ACPI 1.0,另一个用于 ACPI 2.0 或更高版本的规范修订版。
指向 ACPI 1.0 规范 RSDP 结构的指针 EFI GUID 为:
- eb9d2d30-2d88-11d3-9a16-0090273fc14d。
指向 ACPI 2.0 或更高版本规范 RSDP 结构的指针 EFI GUID 为:
- 8868e871-e4f1-11d3-bc22-0080c73c8881。
与 ACPI 兼容的 OS 的 OS 加载程序将首先使用当前版本 GUID 搜索 RSDP 结构指针(RSDP 结构),如果找到,将使用相应的 RSDP 结构指针。如果找不到GUID,则OS加载程序将使用ACPI1.0 版本GUID来搜索RSDP结构指针。
在通过EFIExitBootServices 接口进行平台控制之前,OS加载程序必须从EFI系统表中检索指向RSDP结构的指针。有关详细信息,请参阅UEFI规格。
5.2.5.3. 根系统描述指针 (RSDP) 结构
结构中包含的修订号指示表结构的大小。
| 表 5.3 RSDP 结构 字段 | 字节长度 | 字节偏移 | 描述 |
|---|---|---|---|
| 签名 | 8 | 0 | “RSD PTR ”(请注意,此签名必须包含尾随空白字符。) |
| 校验和 | 1 | 8 | 这是 ACPI 1.0 规范中定义的字段的校验和。这仅包括该表的前 20 个字节,即字节 0 到 19,包括校验和字段。这些字节之和必须为零。 |
| OEMID | 6 | 9 | OEM 提供的字符串,用于标识 OEM。 |
| 修订 | 1 | 15 | 15本结构的修订。较大的修订号向后兼容较低的修订号。该表的ACPI版本 1.0 修订号为零。 ACPI版本 1.0 RSDP结构仅包括该表的前 20 个字节,即字节 0 到 19。它不包括长度字段及其他字段。该字段的当前值为 2。 |
| Rsdt地址 | 4 | 16 | 16 RSDT的 32 位物理地址。 |
| 长度* | 4 | 20 | 表的长度,以字节为单位,包括表头,从偏移0开始。该字段用于记录整个表的大小。此字段在ACPI版本 1.0RSDP结构中不可用。 |
| Xsdt地址* | 8 | 24 | XSDT的 64 位物理地址。 |
| 扩展校验和* | 1 | 32 | 32这是整个表的校验和,包括两个校验和字段。 |
| 保留* | 3 | 33 | 33保留字段 |
- 仅当修订值为 2 或以上时,这些字段才有效。