【ACPI规范】ASL基础

参考链接
https://blog.csdn.net/jiangwei0512/article/details/54851544
https://blog.csdn.net/weixin_45279063/article/details/121203362


前言

记录一些常见的ASL语言关键字,更详细知识在acpi spec第19章

BIOS开发者可以通过ASL(ACPI Source Language)对一些设备总线等进行操作,然后被AML编译器编译成AML语言,AML语言可以被硬件所识别。


一、ASL对象

  1. “\”是根命名空间
  2. ASL中变量的名称都是固定的4个字节大小,不包括“\”,不满4个字节的,后面用“_”补全;
  3. “_”开头的是规范预留的名称

根作用域下面的5个域:

  • _GPE, 主要负责ACPI的事件处理
  • _PR, 处理器相关
  • _SB, 所有的设备和总线
  • _SI, 系统指示灯
  • _TZ, Thermal相关,用于读取某些温度值

另外一些

  • 根作用域下:

  • _GL,_OS,_OSI,_REV,_DLM

  • ACPI Table类:MADT表等

  • 设备配置类:

  • _HID(硬件ID,每个设备独一无二),HID是有规范的,可以网上查找CPU等设备HID为多少

  • _ADR(地址)

  • ACPI spec第6章

  • 电源管理:

  • PS0(Power state 0)

更多的预规范对象,碰到时查看spec

二、ASL操作码

2.1 ASL编译器控件

External 声明外部对象
Include 包括另一个ASL文件

2.2 ACPI表管理

DefinitionBlock Load definition block
Load Load Table from RSDT/XSDT

DefinitionBlock (
  "Tpm.aml",
  "SSDT",
  2,
  "INTEL ",
  "TcgTable",
  0x1000
  )
{
  Scope (\_SB)
  {
    Device (TPM)
    {

2.3 杂项命名对象创建

Scope 打开命名作用域,但是不能创建
Device 声明一个总线/设备对象
Function 声明一个控制方法
Method 声明一个控制方法,相当于C语言中定义一个函数
1.第一个参数是函数名,第二个参数是参数数量
2.函数必须依附于对象(Scope or device)
3.以"_"字符开头的函数,都是系统保留的,不得给自己的函数取这样的名字
4.函数最多可传递 8 个参数,在函数里用 Arg0~Arg7 引用,不可以自己定义名字
5.在函数中最多可以使用 8 个局部变量,用 Local0~Local7 表示,不用定义,但是在把局部变量的值赋给其他变量之前,局部变量必须是有效的值,也就是说,至少有一次把值赋给局部变量的操作
Name 声明命名对象,相当于C语言里面的赋值

2.4 操作区域和领域

Field 声明操作区域对象的字段
OperationRegion 声明一个操作区域

OperationRegion声明一个区域,可以是IO,Memory等;
Field相当于C语言中的结构体,定义了里面的变量名称;
两个加起来用,相当于设置了一个结构体变量,在声明的IO或者Memory里面进行操作

   OperationRegion (SMIP, SystemIO, FixedPcdGet16 (PcdSmiCommandIoPort), 1)
      Field (SMIP, ByteAcc, NoLock, Preserve)
      {
          IOPN, 8
      }

      //
      // Operational region for TPM access
      //
      OperationRegion (TPMR, SystemMemory, 0xfed40000, 0x5000)
      Field (TPMR, AnyAcc, NoLock, Preserve)
      {
        ACC0, 8,
      }

2.5缓存域

CreateBitField 声明一个缓冲区对象的位域对象

2.6 同步

Event Declare an event synchronization object
Wait Wait on an Event

2.7 对象引用

2.8 整数运算

Add 整数加
Or 按位或整数

2.9 逻辑运算符

LAnd 逻辑与

2.10 方法执行控制

Break,Case,Continue,Default ,Else,ElseIf ,Fatal ,If ,Return ,Sleep,Switch ,While 等。与C语言意义相同

2.11 数据类型转换和操作

Debug Debugger output
Unicode 字符串到Unicode转换宏
Timer 获取64位计时器值

2.12 资源描述符宏

DMA DMA资源描述符宏
IO IO资源描述符宏
Interrupt Interrupt Resource Descriptor macro
Memory32 Memory Resource Descriptor macro
Register Generic register Resource Descriptor macro

2.13 常量

2.14 控制方法对象


总结

后续有更深理解,会继续补充。
学艺不精,错误请指正;
如有侵权,请联系删除。

参考文档: 《ACPI_Spec_6_4_Jan22》

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值