ACPI控制方法机器语言

382 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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)
            }

        }
}

三、完结

本文结束,撒花。