《UEFI内核导读》之ACPI编程入门 第6章:对象类型及命名

本文介绍了ACPI/ASL编程中的字符集、注释、数字、常量以及算子的使用规则。详细讲解了ASL中的命名规范,包括对象的命名、路径分隔符和大小写不敏感特性。此外,还概述了ACPI/ASL的预定义对象类型,如Buffer、Field Unit、Integer、Method和Mutex等,并强调了不同类型之间的转换和交互。


第6章:对象类型及命名固件C字营·版权所有

敬请关注微信公众号:“固件C字营”

=====================================================================

  • ACPI/ASL字符集

        与其他的编程语言类似,每一种语言都有其支持的字符集合,使用这些字符的组合来定义对象、路径、数字、常量、方法。字符集是组成ASL代码的最小基本单位。

  1. 多个空格相当于一个空格。空行、小括号、逗号、新行,都是分隔符
  2. “//”表示从”//”开始到行末都是注释
  3. “/*”表示直到最近的“*/”结尾都是注释
  4. “”表示ASCII字符串,支持转义字符‘\’
  5. 支持整形数字。10(十进制),0x0A(16进制),012(8进制)
  6. {Nothing}表示空的目标,或{}
  7. 支持的字符集为“A-Z”、“a-z”\“0-9”、“_”、‘^’、 ‘,’ 、‘\’等
  8. 常量True | False、Zero | One | Ones
  9. 算子‘+’ | ‘-‘ | ‘*’ | ‘/’ | ‘%’ | ‘&’ | ‘|’ | ‘^’ | ‘~’ | ‘<’ | ‘>’ | ‘!’ | ‘=’及其组合
  10. 命名可以使用数字、字母或下划线。0x00表示NULL字符
  11. True表示Ones,False表示Zero
  12. 父名字空间前缀“^”,用于在孩子域中访问“父名字空间”的资源
  13. 路径分隔符“.”,用于分割不同的路径域
  14. ASL名大小写不敏感,都会被编译器转化为大写
  15. 支持宏,宏会在编译之后生成算子集如:EISAID、For、Printf、ResourceTemplate、Unicode
  • ACPI/ASL对象(数据)类型

       ACPI/ASL是一种声明式编程语言,把一切都视作对象,预定义了多种对象类型(Object)以及对各种对象进行操作的算子(ASL operator)。每一种对象都有唯一的对象类型编码(ObjectType)范围是0~16,其他的未定义类型作为Reserved不能使用,可以使用ObjectType()方法获取类型编码。不同对象类型之间支持显示类型转换,也支持隐式类型转换。

[Uninitialized]:未定义类型。一般是未初始化的LocalX、ArgX或未初始化的Package成员
Buffer:字节数组,默认值为全部“0”的未初始化状态
Buffer Field:Buffer内部的字段,可以是bit、字节、双字节、4字节等。
Debug Object:调试对象,用于把需要打印的对象输出到系统调试接口或调试终端
Device:设备或总线对象,如CPU、PCI根控制器、USB控制器
Event:事件同步对象
Field Unit:地址空间内部的字段,可以按bit来访问。
Integer:64bit的小端模式整形,低32bit有效,高32bit为0(ACPI 1.0是32bit整形)
Integer constant:整形常量。“Zero”, “One”, “Ones”, and “Revision”.
Method:控制方法,可以编译成AML字节码被解释执行
Mutex:互斥同步对象,如对EC进行访问时对互斥锁。
Object Reference:引用对象。一般使用RefOf, Index, CondRefOf创建引用对象。
Operation Region:操作域,表示一个可以访问的地址空间,如IO、Memory、PCI等
Package:包含多个ASL对象的集合,最大包含255个对象。
Power Resource:能源对象或电源对象,如设备在D0/D3状态下不同的电源声类型明
Processor:处理器对象
RawDataBuffer:原始数据对象。仅包含纯数据,不会被编译器解析成AML字节码
String:Null结尾的ASCII字符串
Thermal Zone:热空间对象。_TZD通常会包含一个或多个温度传感器、风扇等

固件C字营·版权所有

敬请关注微信公众号:“固件C字营”

=====================================================================

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值