<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=RSDP</id>
	<title>RSDP - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=RSDP"/>
	<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=RSDP&amp;action=history"/>
	<updated>2026-05-14T23:56:13Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=RSDP&amp;diff=952&amp;oldid=prev</id>
		<title>Zhang3：创建页面，内容为“'''RSDP''' (根系统描述指针-Root System Description Pointer) 是 ACPI 编程接口中使用的数据结构。  在ACPI版本1.0中，它具有以下结构：  &lt;source lang=&quot;c&quot;&gt; struct RSDPDescriptor {  char Signature[8];  uint8_t Checksum;  char OEMID[6];  uint8_t Revision;  uint32_t RsdtAddress; } __attribute__ ((packed)); &lt;/source&gt;  从2.0版开始，对其进行了扩展，并添加了以下新字段：  &lt;source lang=&quot;c&quot;&gt; struct RSDPDescriptor20 {…”</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=RSDP&amp;diff=952&amp;oldid=prev"/>
		<updated>2022-03-19T11:49:16Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;#039;&amp;#039;&amp;#039;RSDP&amp;#039;&amp;#039;&amp;#039; (根系统描述指针-Root System Description Pointer) 是 &lt;a href=&quot;/index.php?title=ACPI&quot; title=&quot;ACPI&quot;&gt;ACPI&lt;/a&gt; 编程接口中使用的数据结构。  在ACPI版本1.0中，它具有以下结构：  &amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt; struct RSDPDescriptor {  char Signature[8];  uint8_t Checksum;  char OEMID[6];  uint8_t Revision;  uint32_t RsdtAddress; } __attribute__ ((packed)); &amp;lt;/source&amp;gt;  从2.0版开始，对其进行了扩展，并添加了以下新字段：  &amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt; struct RSDPDescriptor20 {…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''RSDP''' (根系统描述指针-Root System Description Pointer) 是 [[ACPI]] 编程接口中使用的数据结构。&lt;br /&gt;
&lt;br /&gt;
在ACPI版本1.0中，它具有以下结构：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct RSDPDescriptor {&lt;br /&gt;
 char Signature[8];&lt;br /&gt;
 uint8_t Checksum;&lt;br /&gt;
 char OEMID[6];&lt;br /&gt;
 uint8_t Revision;&lt;br /&gt;
 uint32_t RsdtAddress;&lt;br /&gt;
} __attribute__ ((packed));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
从2.0版开始，对其进行了扩展，并添加了以下新字段：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
struct RSDPDescriptor20 {&lt;br /&gt;
 RSDPDescriptor firstPart;&lt;br /&gt;
&lt;br /&gt;
 uint32_t Length;&lt;br /&gt;
 uint64_t XsdtAddress;&lt;br /&gt;
 uint8_t ExtendedChecksum;&lt;br /&gt;
 uint8_t reserved[3];&lt;br /&gt;
} __attribute__ ((packed));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 检测RSDP ==&lt;br /&gt;
&lt;br /&gt;
RSDP位于[[EBDA]]（扩展BIOS数据区-Extended BIOS Data Area）的前1KB内（指向它的2字节实模式段指针位于0x40E）， 或在0x000E0000到0x000FFFFF的内存区域(主[[BIOS]]区域低于1 MB)中。 要查找表，操作系统必须在两个区域之一中找到 “RSD PTR” 字符串 (注意最后一个空格字符)。 此签名始终位于16字节边界上。&lt;br /&gt;
&lt;br /&gt;
如果您使用的是UEFI，您可以在EFI_SYSTEM_TABLE中的某个地方找到它。 因此，没有必要搜索内存。&lt;br /&gt;
&lt;br /&gt;
'''注意'''： 查找RSDP的标准方法在UEFI系统上可能不起作用。 因此，在EFI_SYSTEM_TABLE中找到它是正确且可靠的方法 (请参阅ACPI 6.2 5.2.5.2节 “在启用UEFI的系统上查找RSDP”)。&lt;br /&gt;
&lt;br /&gt;
当使用符合multiboot2的加载程序引导时，RSDP的副本分别包含在ACPI new RSDP或ACPI old RSDP标记中。&lt;br /&gt;
&lt;br /&gt;
==验证RSDP==&lt;br /&gt;
&lt;br /&gt;
找到RSDP表后，您必须查看BIOS使用的ACPI版本，然后必须检查校验和是否有效。&lt;br /&gt;
&lt;br /&gt;
===检测ACPI版本===&lt;br /&gt;
可以使用RSDP中的修订字段来检测ACPI版本。 如果此字段包含0，则使用ACPI版本1.0。 对于后续版本（ACPI版本2.0至6.1），使用值2[http://www.uefi.org/sites/default/files/resources/ACPI_6_1.pdf]. 可以通过[[FADT]]表推导出ACPI的确切版本。&lt;br /&gt;
&lt;br /&gt;
=== 校验和验证 ===&lt;br /&gt;
在依赖RSDP之前，您应该检查校验和是否有效。&lt;br /&gt;
对于ACPI1.0(第一个结构)，将结构中的每个字节相加，并确保结果的最低字节等于零。 对于ACPI 2.0及以后，您将对第二个结构的原始 (ACPI 1.0) 部分执行完全相同的操作，然后对属于ACPI 2.0扩展的部分的字段再次执行此操作。&lt;br /&gt;
&lt;br /&gt;
== 字段解释 ==&lt;br /&gt;
=== 总是存在 ===&lt;br /&gt;
====签名（Signature）====&lt;br /&gt;
此8字节字符串(非NULL终止！)必须包含“RSD PTR”。它位于16字节边界上。&lt;br /&gt;
==== 校验和（Checksum） ====&lt;br /&gt;
要添加到 (版本1.0表的) 所有其他字节的值，以计算表的校验和。 如果该值加在所有其他值上并强制转换为字节不等于0，则必须忽略该表。&lt;br /&gt;
==== OEMID ====&lt;br /&gt;
规范说：“OEM提供的标识OEM的字符串”。&lt;br /&gt;
&lt;br /&gt;
====修订版（Revision）====&lt;br /&gt;
ACPI的修订。较大的修订编号向后兼容较低的修订编号。有关更多信息，请参见 [[# 检测ACPI版本 | 检测ACPI版本]]。&lt;br /&gt;
====Rsdt地址====&lt;br /&gt;
[[RSDT]]表的32位物理(重复一遍：物理)地址。&lt;br /&gt;
&amp;lt;hr/&amp;gt;&lt;br /&gt;
===从2.0版开始===&lt;br /&gt;
==== 长度（Length） ====&lt;br /&gt;
从偏移0到末尾的整个表的大小。&lt;br /&gt;
==== Xsdt地址 ====&lt;br /&gt;
[[XSDT]]表的64位物理地址。如果检测到ACPI 2.0版，即使在IA-32上，也应该使用此表而不是RSDT，将地址强制转换为uint32_t。&lt;br /&gt;
==== 扩展校验和（Extended Checksum）====&lt;br /&gt;
This field is used to calculate the checksum of the entire table, including both checksum fields.&lt;br /&gt;
&lt;br /&gt;
==== 保留 ====&lt;br /&gt;
3 bytes to be ignored in reading and that must not be written.&lt;br /&gt;
&lt;br /&gt;
下一步是什么==&lt;br /&gt;
现在，您应该解析[[RSDT]](或[[XSDT]])。&lt;br /&gt;
&lt;br /&gt;
[[Category:ACPI]]&lt;/div&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
</feed>