UEFI学习笔记(九):ACPI详解

一、基本概念

ACPI(高级配置和电源管理接口)是一个标准化的接口,用于操作系统与固件之间的硬件配置和电源管理通信。主要包括:

系统硬件配置: 描述系统中的设备、接口和它们的属性,例如设备的 ID、资源分配等。

电源管理: 提供电源状态、睡眠模式、唤醒条件等信息。

中断信息: 定义中断源和中断配置。

系统资源: 描述内存、IO 端口、DMA 通道等系统资源的分配和使用。

二、ASL语言

ASL(ACPI Source Language)是用于编写和描述 DSDT 内容的语言。ASL 代码被编译成二进制的 DSDT 表供操作系统使用。

1、ASL的一些基本准则

1)Scope形成作用域,概念类似于C++中的namespace
2)Method 或者 Function 定义函数,函数可以定义在 Device 下或者 Scope 下,但是不能脱离 Scope 定义 单独的函数,也就是说,函数必须依附于对象
3)以"_"字符开头的函数,都是系统保留的,不得给自己的函数取这样的名字
4)变量名必须由4个字符组成,第1个字符不能是数字

2、ASL数据类型

TPYE类型
Integer整数
String字符串
Event事件
Buffer数组
Package对象集合

3、常用关键字

1)Name

Name 关键字用于定义命名的对象或常量。

定义字符串:

Name (_HID, "ACPI0002")

定义整数:

Name (_UID, 0)

定义Package:

Name (_PRW, Package (0x02)
{
    0x0D,
    0x03
})

p.s. Package 关键字用于定义一个包含多个数据项的集合。每个数据项可以是不同的数据类型(例如,整数、字符串、缓冲区等)。Package 通常用于定义复杂的数据结构。

2)Method

Method 用于定义一个可以在 ACPI 设备对象中调用的函数或方法。例如:

Method (MADD, 2)
{
    Local0 = Arg0
    Local1 = Arg1
    Local0 += Local1

    Return (Local0) /* 在此处返回 */
}
3)Device

Device 关键字用于定义一个 ACPI 设备对象。它描述系统中的硬件设备,并且可以包含设备的特性、状态、方法等信息,例如:

Device (DEV0)
{
    Name (_HID, "ACPI0002")
    Name (_UID, 0)
}
4)Interrupt

Interrupt 用于定义设备的中断信息。它指定设备使用的中断请求(IRQ)线,并提供中断的配置细节。例如:

Interrupt (0x00, Level, ActiveLow, Exclusive)
{
    // 中断信息
}

三、DSDT

1、概述

功能: DSDT (Differentiated System Description Table)是 ACPI 表中的核心之一,定义了系统中的硬件和设备。它包括设备对象、方法、操作和控制策略。

作用: DSDT 描述了系统的设备和其功能,提供了系统启动和运行时所需的基本设备信息。

位置: 通常在系统固件中存储,并由操作系统在启动时加载和解释。

2、DSDT重要字段:

1) _HID (Hardware ID)

** 含义:** _HID 是硬件 ID,用于标识设备的硬件类型或类别。它是一个唯一的标识符,通常用于驱动程序识别设备。同一个设备的HID是一样的。

** 用途:**操作系统通过 _HID 字段识别设备并加载相应的驱动程序,以确保设备能够正常工作。

2) _CID (Compatible ID)

含义: _CID 是即插即用兼容 ID,用于表示设备与特定设备类或接口标准的兼容性。当设备无法通过其他方式提供兼容 ID 时,_CID 提供备用标识。

用途: 设备的兼容性信息可以帮助操作系统或驱动程序选择合适的处理程序来支持设备。_CID 允许设备支持多种标准或兼容模式。

3) _UID (Unique ID)

含义: _UID 是唯一 ID,用于标识设备的特定实例。在设备有多个实例时,_UID 用于区分这些实例。设置为0,1,2…

用途: 在具有多个相同类型设备的系统中(例如多个 USB 设备),_UID 使系统能够唯一地识别和管理每个设备实例。

4) _DSD (Device-Specific Data)

含义: _DSD 是设备特定数据,包含设备的额外配置信息。DSD对应一个Package,Pacakge里面描述了UUID和Data Structure(OS需要的)

用途: 操作系统和驱动程序可以使用 _DSD 中的信息来进行更详细的配置或优化设备的操作。例如,设备的特殊功能或配置选项可以通过 _DSD 字段提供。

5) _CCA(Cache Control Attributes)

这个字段描述了与设备相关的缓存控制属性。描述为1表示设备具有硬件管理的缓存一致性(所有设备共享同一内存,硬件负责确保数据的一致性)

6) _SB(System Bus)

这个字段用于表示系统总线的信息。它定义了设备如何连接到系统总线,并描述了相关的总线属性和配置。

参考文章

ASL语言
我所知道的ACPI(3) – ASL 入门简介

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值