ACPI规范

发布于 2017-08-18  8.9k 次阅读


为什么会有ACPI规范?

众所周知,BIOS是计算机最底层的软件部分,是操作系统与底层硬件打交道的桥梁。而ACPI规范则是处于操作系统与BIOS之间的桥梁。

为了遵循软件开发的“高内聚,低耦合”的原则,BIOS应该保持功能足够单一,而只是负责控制硬件和硬件控制器就已经很复杂了。操作系统则主要是实现关键的软件部分,如进程、内存、磁盘管理,所以剩下的“操作系统与BIOS交接”这个同样比较复杂的事就专门抽象出来了一个规范出来。如此,只要BIOS提供了ACPI兼容的接口,则任何ACPI Compatible OS都能在上面运行了。

大多数硬件厂商使用的都是2011年左右或更早的ACPI标准,文档在这:http://www.uefi.org/specifications。如果要针对新的操作系统,如Linux 内核4,macOS 10.13进行BIOS的适配或开发,最好选择6.1版本。

ACPI表

ACPI表就是BIOS给OS提供的硬件配置数据。BIOS ROM中的ASL代码就是ACPI表。

ACPI表有很多,各司其职。下面是常用的ACPI表(取自6.1版):

  1. RSDP Structure:BIOS刚开机的时候就会加载它到内存1M以内的地方,里面含有一个RSD PTR指针,这个指针指向了RSDP Table
  2. RSDP:包含了其他ACPI表的位置信息,操作系统通过Signature从RSDP表中获取其他所有表的位置。为了兼容ACPI1.0标准而保留。
  3. XSDT:Extended System Description Table,ACPI3.0中取代RSDP,指向了FADT表。
  4. FADT:Fixed ACPI Description Table,包含了一些ACPI固定表的位置,比如DSDT表的位置。其Signature是“FACP”。
  5. RSDT:Root System Description Table,根系统描述表,其中第一个表是XSDT。
  6. FACS:位于ACPI NVS内存空间,保存了S3休眠状态下的恢复指针。
  7. DSDT:ACPI标准中规定了一些硬件和规格,而DSDT就是为了记录每台电脑独特于ACPI的规范部分。换句话说,因为ACPI只规定了最基础的部分,所以DSDT就是整个电脑的配置信息。
  8. SSDT:DSDT的补充部分。加载了DSDT以后会按顺序加载SSDT。SSDT的内容并不能覆盖DSDT,只能作为补充。
  9. APIC:高级可编程中断控制器。可以控制I/O中断和处理器内部中断。包含了处理器APIC和南桥中的I/O APIC。

还有不少表格没列出来,如果想查阅非典型表,或者某寄存器具体功能,请见P106。