ACPI(Advanced Configuration and Power Interface)主要用于固件初始化的标准化,其主要功能包括如下几个点:
1、热拔插管理,枚举与识别硬件资源配置
2、进行中断向量的分配
3、整机电源管理,性能、功耗、温度的三向调节
4、处理器主频管理、状态与电压管理
ACPI通过固件提供的ACPI表向操作系统描述硬件拓扑,并利用AML解释器完成对底层硬件敏感信息的封装。
ACPICA接口函数主要包括:(可以前往/drivers/acpi/acpica目录查看)
1、ACPI Table Management:负责分析和管理在操作系统中存放的DSDT、FAT等描述符,ACPI表在操作系统引导时放入系统内存中。
2、Namespace Management:负责创建ACPI表在操作系统中存放的名字空间,并管理这些空间。
3、Resource Management:在名字空间中包含一些硬件资源,如IO地址空间以及中断向量等,这组API管理命名空间中的资源
4、Event Management:负责ACPI中的Event事件注册、监听,包括GPE事件(General Purpose Event)和PM事件
5、ACPI Hardware Management:访问ACPI提供的各类硬件资源,包括寄存器和中断
通过ACPI提供的接口函数,最终形成以AML语言描述的硬件抽象层。这里注意的是,ACPI一般会管理不太标准的设备,一些很标注的设备,比如PCI设备,其标准的BAR地址空间不由ACPI管理,但是ACPI会管理PCI总线中的中断路由表。
ACPI主要表项:
1、XSDT(Extended System Description Table):XSDT包含ACPI规范的版本号与一些OEM相关的信息,并含有其他描述符表的64位物理地址,如FADT或者SSDT的地址。
2、RSDT(Root System Description Table):RSDT中的信息与XSDT基本一致,只是在RSDT中存储的物理地址位32位,在XSDT中存储的物理地址是64位,属于兼容性表格。
3、FADT(Fixed ACPI Description Table):包含ACPI寄存器组使用的IO端口地址,存放FACS和DSDT的基地址信息。FADT的Boot Architecture Flags字段会存放一些有关CPU系统初始化的基本信息。
4、FACS(Firmware ACPI Control Structure):包含OS与BIOS(UEFI固件)进行数据交换的一些参数,包括处理器系统的硬件签名,以及Frimware在处理器系统被唤醒后使用的、用来通知操作系统的一些中断向量,即Firmware Waking Vector。在处理器被唤醒后,Firmware将执行一些基本加载类操作,并通过Firmware Waking中断向量,将控制权还给操作系统。在FACS中还包含一个全局锁,当Firmware和操作系统对某些临界资源进行访问时,需要使用该锁。
5、DSDT(Differentiated System Description Table):这是ACPI最复杂也最重要的一个表,包含处理器系统使用的硬件资源以及对这些硬件资源的管理操作。SSDT表可以视为对DSDT表的一个补充。
6、其他表项,MADT(Multiple ACPI Description)多处理器、SBST(Smart Battery Table)电源管理、SRAT(System Resource Affinity Table)、SLIT(System Locality Information Table)等表项,SRAT与SLIT与NUMA系统的资源管理相关。