据我了解,ACPI 定义了一个通用硬件编程模型,其中操作系统依赖 OEM 固件提供的 AML(ACPI 机器语言)代码来操作硬件。
为了执行 AML 代码,操作系统必须包含一个 AML 解释器。
因此,在我看来,固件开发人员使用 AML 来提供平台硬件和操作系统之间的控制接口。
但我们真的需要 AML 吗?
我认为最终只能通过平台的本机指令配置硬件。因此 AML 解释器必须将 AML 翻译成本机指令,否则无法在平台上执行。
但是使用像 AML 这样的中间语言有什么意义呢?我的意思是虽然 AML 据说是平台无关的,这意味着我可以使用 AML 以非本地方式描述我的平台。
但 AML 实际上是平台固件的一部分。并且整个固件已经内置到目标平台的本机指令中。那么让固件的一小部分独立于平台有什么好处呢?为什么不只使用本机指令?必须有某种方法让操作系统也使用它。这样操作系统就根本不需要 AML 解释器。可以避免很多复杂性。