持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
简介
ACPI控制方法机器语言(AML)语言。AML是ACPI控制方法的虚拟机语言,是一个虚拟机的机器代码,由ACPI兼容的操作系统支持。兼容ACPI的操作系统所支持的虚拟机的机器代码。ACPI控制方法可以用AML编写,但是人类通常是用ASL来写控制方法。
一、什么是AML?
AML是由ACPI AML解释器处理的语言。它主要是一种声明性语言。最好不要把它看成是一个代码流,而是看成一组声明,ACPI AML解释器将在定义块加载时编译到ACPI名称空间中。例如,请注意 DefByte 在 ACPI名称空间中分配了一个匿名的整数变量,其初始值为字节大小。
OEM或BIOS厂商需要编写ASL并能够单步AML进行调试。(调试器和其他 ACPI 控制方法语言工具应该是 AML 级工具,而不是源码级工具)。一个ASL翻译器的实施者必须了解如何读取ASL和生成AML
AML和ASL是不同的语言,尽管它们有着密切关联与联系。所有兼容ACPI的操作系统必须支持AML。一个特定的用户可以定义一些任意的源语言(以取代ASL),并写一个工具来把它翻译成AML。然而,ACPI集团将支持一个单一语言的翻译器,即ASL。
二、示例
下面部分代码块示例,意思是通过Notify指令,传递事件给端口0x80,来通知OSPM该事件。
// Define a control method sleep button
Device(\_SB.SLPB)
{
Name (_HID, EISAID("PNP0C0E"))
Name (_PRW, Package(){0x01, 0x04})
OperationRegion (\Boo, SystemIO, 0x201, 0x1)
Field (\Boo, ByteAcc, NoLock, WriteAsZeros)
{
SBP, 1, // sleep request
SBW, 1 // wakeup request
}
}
Scope (\_GPE) // Root level event handlers
{
Method (_L01) // uses bit 1 of GP0_STS register
{
If (\SBP)
{
\SBP = One // clear sleep button status
Notify(\_SB.SLPB, 0x80) // Notify OS of event
}
If (\SBW) {
\SBW = One
Notify(\_SB.SLPB, 0x2)
}
}
}
三、完结
本文结束,撒花。