一直不太清楚ACPI驱动在WINDOWS中的作用.
甚至不了解ACPI协议的作用.
于是, 随便翻了下"格蠹汇编"中的第24章, 如何跟踪ACPI代码, 算是对ACPI有了一个初步性的了解.
ACPI向OS报告硬件信息, 而OS通过ACPI控制硬件.
ACPI就是OS与硬件/固件之间的一个标准接口协议.
ACPI通过ASL(ACPI SOURCE LANGUAGE)来描述系统硬件的属性与方法, ASL最终会被编译为AML(ACPI MACHINE LANGUAGE)的字节码(BYTECODE).
之后, 翻阅了一下WDK中关于ACPI的内容:
ACPI设备包括:
low-level system devices such as batteries, thermal zones, and other devices defined in a system‘sACPI namespace.
ACPI设备在WINDOWS驱动中的表现形式:
即definition block和它其中的一块operation region.
An ACPI device is specified by a definition block in the ACPI System Description Tables. A device‘s definition block specifies, among other things, anoperation region, which specifies a contiguous block of device memory that is used to
access device data.
ACPI设备的Windows软件构成:
1. ACPI系统驱动ACPI.SYS
2. vendor提供的WDM驱动
3. ACPI BIOS, 就是所谓的固件
这一组合的操作流程是:ACPI.SYS调用vendor提供的WDM驱动中的operation region handler来访问operation region, 以达到对ACPI设备数据/控制的目的.
关于设备堆栈:
分为该APCI设备是主板集成的, 则ACPI驱动建立FDO, 位于WDM驱动建立的FDO之下, 位于ROOT BUS驱动建立的PDO之上
如果不是主板集成的, 则ACPI为该设备建立PDO, 位于WDM建立的FDO之下.
ACPI的控制方法:
所谓的ACPI控制方法, 就是由ASL/AML描述的用来查询与配置硬件的软件.
由ACPI驱动负责解释执行.
Control methods are written in the ACPI Machine Language (AML), loaded from the system firmware into the ACPI namespace, and interpreted by the ACPI driver.
ACPI的命名规则:
ABCD parent device (缩进一次)
CHL1 child device of ABCD (缩进二次)
CHL2 child device of ABCD (缩进二次)
CHL3 child device of CHL2 (缩进三次)
_FOO control method (缩进三次)
_FOO control method (缩进一次)
WINDOWS对ACPI设备的命名由对象来表述(object), 一个对象可以包括子对象, 而对象既可以是子设备(child device), 也可以是控制方法(control method).