您的位置:首页 > 其它

桌面电脑操作系统开发笔记(5)——ACPI

2014-05-16 17:33 155 查看
桌面电脑操作系统开发笔记(5)——ACPI

ACPI,英文全称为advanced configuration and power interface,即高级配置与电源接口,主要用来替代过时的将电源管理全部交给BIOS的APM(advanced power management),让系统软件可以直接管理系统和设备的电源,管理如睡眠和唤醒这样的事件。它还可以提供系统硬件的信息。有关ACPI的资料,可参考维基百科和ACPI的官方网站:

http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface

http://www.acpi.info/

ACPI规范目前已经到版本5,可从http://www.acpi.info/spec50.htm免费下载。

系统软件要使用ACPI,需要先找到BIOS固件(firmware)提供的ACPI根系统描述指针(root system description pointer,RSDP)。根据ACPI规范,在使用传统BIOS的系统上,系统可以以16字节边界遍历拓展BIOS数据区(EBDA,通常位于0x9FC00~0x9FFFF)或者BIOS的ROM(0xF0000~0xFFFFF),若发现起始有8字节的签名“RSD PTR ”,则可认为是ACPI RSDP。RSDP含有指向根系统描述表(RSDT)的32位指针和指向拓展根系统描述表(XSDT)的64位指针。下表给出了RSDP的结构。

字节长度起始字节偏移描述
签名80“RSD PTR ”(这个签名必须包含末尾的空格。)
校验和18这是ACPI 1.0规范定义的校验和,只包括本表的前20字节(0-19),包括本校验和域,这20字节加起来必须为0。
OEMID69OEM提供的用来是识别OEM的字符串。
版本115本结构的版本。大版本号向后兼容小版本号。ACPI 1.0版的这个域的值为0。当前版本的这个域的值为2。
RSDT

地址
416RSDT的32位物理地址。
长度420整个表的长度(字节数),包括从偏移量0开始的表头。这个域用来记录整个表的大小。
XSDT

地址
824XSDT的64位物理地址。
拓展

校验和
132这是整个表的校验和,包括两个校验和域。
保留333保留。
注:标红的是ACPI 1.0规范中没有的。

RSDT和XSDT中有指向固定ACPI描述表(FADT)、多APIC描述表(MADT)等其他ACPI系统描述表的指针。RSDT中的指针是32位的,而XSDT中的指针是64位的。为了适应64位系统的普及,ACPI规范中指出,如果存在XSDT,应该使用XSDT而不采用RSDT。RSDT和XSDT的结构如下:



字节长度

起始字节偏移

描述



 签名

4

0

“RSDT”/“XSDT”

 长度

4

4

整个RSDT的长度(字节数)。这个长度指示了表的后面表项的数目(n)。

 版本

1

8

1

 校验和

1

9

整个表加起来必须为0。

 OEMID

6

10

OEM ID

 OEM表ID

8

16

表ID是生产商的模型ID。这个域必须跟FADT中的OEM表ID匹配。

 OEM版本

4

24

OEM提供的RSDT/XSDT表的版本

 创建者ID

4

28

创建这个表的工具的供应商ID。对于包含定义块的表,这是ASL编译器的ID。

 创建者版本

4

32

创建这个表的工具的版本。对于包含定义块的表,这是ASL编译器的版本。



4*n(RSDT)/

8*n(XSDT)

36

指向其他描述表表头的32位(RSDT)/64位(XSDT)物理地址的数组。OSPM假定至少描述表表头是可寻址的,并且可根据其长度域进一步访问表中信息。

FADT中有指示世纪域位置、指示8042键盘控制器是否存在、指示VGA硬件是否存在、指示CMOS RTC是否存在等的信息。

MADT中有逻辑处理器及其本地APIC(LAPIC)、IO APIC等的多处理器或多核操作系统需要的信息。关于这些数据结构的具体内容,请见ACPI规范。

ACPI CA致力于给操作系统开发者提供ACPI的开源的软件实现,其官方网站为:https://acpica.org/

其源代码可在github中找到:https://github.com/acpica/acpica
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: