《UEFI内核导读》之ACPI编程入门 第7章:特殊对象与类型

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

固件C字营·版权所有·欢迎转载

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

敬请关注QQ群:1052307

敬请关注CSDN博客:Cstyle_0x007

图片=====================================================================


          ACPI/ASL支持一些预定义的对象类型和算子,它们有一些不同于其他对象的特性,极容易造成混淆,本章节对他们进行简单介绍。

  • ArgX(Method Argument Data Objects)

参数数据对象,用来向Method传递参数,作用域在Method内且只能用于传递参数使用。分为Arg0-Arg6共7个。

从ArgX参数读数据:

  1. ObjectReference:类似DeRefOf效果,自动进行“去引用”,返回被引用的对象
  2. Buffer:返回Buffer,可以用相关算子算子创建Index、Field、Buffer引用对象
  3. Package:返回Package,可以创建Index或Package引用对象
  4. All other object types:返回对象

         例:MTHD (RefOf (Obj), Buf, Pkg, Obj)此方法有4个参数,分别是:Arg0为引用类型、Arg1为Buf类型、Arg3为Pkg类型、Arg4为一般对象。

往ArgX参数写数据:

  1. ObjectReference objects:类似DeRefOf效果,自动进行“去引用”,复制并覆盖最终目标对象,ArgX赋值为最终目标对象的引用。
  2. All other object types:用复制的对象覆盖ArgX。

  1. LocalX(Method Local Data Objects)

本地数据对象,只能在Method作用域内使用,分为Local0-Local7共8个。

LocalX变量读数据:

  1. ObjectReference:返回对象引用,若使用DeRefOf则返回原对象
  2. All other object types:返回对象

LocalX变量写数据:

  1. All object types,先删除LocalX保存的对象,然后复制原对象到LocalX

  • Name ( ObjectName, Object )

在全局ACPI名字空间(Global ACPI namespace)创建一个对象,对象名为ObjectName,该对象名是对“Object”的引用。

从Name对象读数据:

  1. ObjectReference:返回对象的引用,若使用DeRefOf则返回对象。
  1. All other object types:返回对象

往Name对象写数据:

  1. All object types :先删除Name保存的已存的对象,然后复制原对象到Name。Store算子会先使用隐式类型转换,把源对象转换成与Name匹配的类型,CopyObject算子不执行隐式类型转换。

  • RefOf (Create Object Reference) RefOf (Object) => ObjectReference

创建一个对目标Object的引用对象。如果被引用的对象不存在则报错。通常用在调用Method的时候向Method传递参数,使用RefOf可以避免在OSPM加载Method的时候同时对对象进行求值计算,进而避免资源访问冲突。例如:对EC的访问。

  • CondRefOf (Create Object Reference Conditionally)  CondRefOf (Source, Result) => Boolean

类似RefOf区别是在引用对象时判断对象是否存在,若不存在则返回failure,否则返回True

  • DerefOf (Dereference an Object Reference)  DerefOf (Source) => Object

作用与RefOf相反,解除对象引用,如果操作数Source是一个被引用的对象,则返回原对象。若操作数Source是字符串,则返回当前作用域内以该字符串命名的对象。如果操作数Source找不到则报错。若操作数Source是使用Index()算子创建的并且引用的是未初始化的Package成员则会报错。

  • Store (Store an Object)  Store (Source, Destination)

计算原对象Source的值,把结果转换成目标对象Destination类型,并把结果存储到目标对        象。不得把只读对象做为目标对象Destination。

  • CopyObject (Copy and Store Object) CopyObject (Source, Destination) => DataRefObject

        把原对象Source转换成DataRefObject引用类型,然后直接覆盖目标Destination对象。若        目标对象已经被初始化为DataRefObject引用类型,则被目标对象引用的原对象将被        Source对象覆盖。

存储其他类型到目标类型

使用"Store"的算子
Store(Source,ArgX)
Store(Source,LocalX)
Store(Source,FIELD)
Store(Source,NAME)

使用“CopyObject”算子
CopyObject(Source,ArgX)
CopyObject(Source,LocalX)
CopyObject(Source,FIELD)
CopyObject(Source,NAME)

Method ArgX

ArgX使用Source类型存储,若ArgX是对其他的对象的引用(RefOf)则自动进行”去引用DerefOf “,复制Source覆盖ArgX引用的原对象,ArgX的值为复制后的对象的引用

同Store一致

Method LocalX

LocalX使用Source类型存储,即使LocalX是对其他对象的引用,也直接覆盖并存储到LocalX

同Store一致

Field Unit or BufferField

先对Source进行隐试类型转换,再存储到FIELD

Field类型不可被改变,只有整形或Buffer类型可以使用CopyObject(Source,FIELD)

Named data object

先对Source进行隐试类型转换,再存储到NAME

Source和Source类型都被复制到NAME

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

固件C字营·版权所有·欢迎转载

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

敬请关注QQ群:1052307

敬请关注CSDN博客:Cstyle_0x007

图片=====================================================================

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ACPI(高级配置和电源接口)是现代计算机系统中负责管理硬件和电源的重要组件。编写ACPI编程代码是深入了解和掌握系统的关键。 ACPI编程的入门首先需要了解ACPI的原理和基本概念。ACPI主要包括了ACPI表、ACPI命名空间、ACPI方法、ACPI设备和ACPI事件等组件。其中最重要的是ACPI表,它是存储ACPI配置和信息的数据结构,在操作系统启动时由固件(如BIOS或UEFI)提供。 接下来,我们需要学习如何使用UEFI提供的接口来访问ACPI表。UEFI是用于取代传统BIOS的新一代固件接口标准,它提供了许多用于操作硬件的接口函数。在UEFI内核导读中,我们可以学习到如何使用UEFI提供的接口函数,如GetSystemTable和LocateProtocol来获取ACPI表。 一旦获取了ACPI表,就可以使用ACPI编程来操作和管理系统的硬件。我们可以通过解析ACPI表的结构和字段来获取硬件信息,如处理器、硬盘和显卡等。同时,ACPI编程还可以用于配置和控制硬件,如设置电源管理策略、启用和禁用设备等。 在ACPI编程入门中,我们也需要学习如何处理ACPI事件。ACPI事件是指硬件状态或系统事件的通知,如按键事件、电源事件和温度事件等。通过注册和处理ACPI事件,我们可以编写更加智能和灵活的系统管理代码。 最后,了解ACPI编程的最佳实践和调试技巧也是非常重要的。ACPI编程常常需要谨慎处理硬件和系统的复杂逻辑,同时需要进行灵活的错误处理。熟悉ACPI规范和文档,以及使用调试工具来分析和解决问题,都是提高ACPI编程效率和质量的关键。 总之,ACPI编程是一项重要而复杂的任务,通过学习UEFI内核导读中的ACPI编程入门知识,我们可以更好地了解和掌握ACPI的原理和操作方法,为开发和管理现代计算机系统提供强大的工具和技术支持。 ### 回答2: 《UEFI内核导读》中的ACPI编程入门节主要介绍了在UEFI环境下进行ACPI编程的基础知识和技巧。ACPI (Advanced Configuration and Power Interface) 是一种用于操作系统和硬件之间通信的标准接口,它定义了电源管理、设备配置和配置信息传递等功能。 ACPI编程的入门主要包括以下内容: 1. ACPI的概述:介绍了ACPI的基本概念、作用和结构,说明了在UEFI中如何使用ACPI来进行设备配置和管理。 2. ACPI表:解释了ACPI表的类型和作用,如DSDT(Differentiated System Description Table)、SSDT(Secondary System Description Table)等,以及如何在UEFI中获取和使用这些表。 3. AML语言:AML(ACPI Machine Language)是一种用于编写ACPI表的高级语言,介绍了AML的基本语法和常用指令,以及如何在UEFI中加载和执行AML代码。 4. 设备电源管理:讲解了如何使用ACPI进行设备电源管理,包括睡眠、唤醒和电源状态转换等操作。 5. 事件和中断处理:说明了如何使用ACPI来处理系统事件和中断,以及如何编写ACPI方法来响应这些事件和中断。 通过学习这些内容,读者可以掌握在UEFI环境下进行ACPI编程的基础知识和技巧。ACPI编程在UEFI开发中起着重要的作用,对于实现系统设备管理和电源管理等功能非常重要,对于理解和使用UEFI内核也具有重要意义。 ### 回答3: acpi(高级配置和电源接口)是一种被广泛使用在现代计算机系统中的标准,用于管理硬件设备的电源管理和配置信息。在UEFI(统一可扩展固件接口)内核导读中,acpi编程入门是其中一个重要的主题。 acpi编程入门的目的是让开发者了解如何使用acpi来控制硬件设备的电源管理和配置操作。acpi提供了一组标准的接口和语言,使开发者可以编写具体的acpi代码来实现特定的功能。通过acpi编程,开发者可以实现诸如电源管理、设备状态监控和系统配置等功能。 在acpi编程入门中,首先需要了解acpi的基本概念和架构。acpi的核心是acpi表,它包含系统的配置信息和控制信息。开发者需要了解如何解析和读取acpi表,以获取系统的配置信息。同时,了解acpi命名空间和对象模型,可以帮助开发者理解acpi中的各个组件和其关系。 在实际的acpi编程中,开发者需要学习acpi语言(ASL)和acpi命令(AML)。ASL是一种类似于C语言的高级语言,用于编写acpi代码。AML是一种二进制格式的编码,用于实际执行acpi代码。了解如何编写和编译ASL代码,并将其转换为AML代码是开发者的关键任务。 此外,理解acpi的工作原理和常见的acpi编程技巧也是入门的重要内容。开发者需要知道如何注册和操作acpi设备,如何监听和处理acpi事件,以及如何控制电源状态和硬件配置。 总之,在UEFI内核导读中,acpi编程入门是为开发者提供的一项重要教学内容。通过学习acpi编程,开发者可以更好地理解和掌握UEFI系统中的电源管理和硬件配置操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值