Linux ACPI - 基本概念(1)

本文介绍了ACPI表在arm64平台上的分类,包括必选、推荐和可选表格,并详细展示了如何使用iasl和acpidump工具解析ACPI表。iasl用于编译和反汇编ACPI表,acpidump则提供了一种简单获取ACPI表的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 概述ACPI

1.ACPI 描述

  ACPI 理解为一个独立于体系结构的电源管理和配置框架,它在主机OS中形成一个子系统。该框架建立一个硬件寄存器集来定义电源状态(休眠、hibernate、唤醒等)。硬件寄存器集可以容纳专用硬件和通用硬件上的操作。标准ACPI框架和硬件寄存器集的主要目的是启用电源管理和系统配置,无需操作系统来直接调用固件。主要包括:

  • 系统硬件配置: 描述系统中的设备、接口和它们的属性,例如设备的 ID、资源分配等。
  • 电源管理: 提供电源状态、睡眠模式、唤醒条件等信息。
  • 中断信息: 定义中断源和中断配置。
  • 系统资源: 描述内存、IO 端口、DMA 通道等系统资源的分配和使用。

  ACPI的基本结构图如下:
在这里插入图片描述

  计算机领域的一个基本方法是增加一个抽象层,从而使得抽象层的上下两层独立的发展,ACPI事实上也是借鉴类似的思想。ACPI的抽象主要是通过ACPI表中提供的信息来实现,这些信息包括ACPI寄存器、AML代码、配置信息等。

  • ACPI寄存器,描述了和ACPI相关的寄存器。OS可以直接从ACPI表中取得这些寄存器的信息,因此不必了解具体的硬件配置。
  • AML代码,一种类C的代码。由BIOS提供,OS的AML解释器(在Linux中叫ACPI CA)解释执行这些代码。这是ACPI抽象层的关键,下面会详细介绍。
  • 配置信息,ACPI包含的配置信息很多,比如多处理器配置信息(MADT)、NUMA配置信息(SRAT、SLIT)、高精度定时器(HPET)等。

2.ACPI 结构

  ACPI作为系统固件(BIOS)和OS之间的接口层。

2.1. ACPI overview
在这里插入图片描述
  ACPI定义了两种数据结构,它们在系统固件和操作系统之间共享:数据表和定义块。这些数据结构是固件和操作系统之间的主要通信机制。

  • 数据表存储原始数据,并由设备驱动程序使用。
  • 定义块由解释程序可执行的字节码组成。

2.2.ACPI structure
在这里插入图片描述
  这个定义块字节码是从ACPI源语言(ASL)代码编译而来的。ASL是用来定义ACPI对象和编写控制方法的语言。ASL编译器将ASL翻译成ACPI机器语言(AML)字节码。AML是ACPI AML解释器处理的语言,如图3所示。

2.3.ASL and AML在这里插入图片描述

2.3.1.ASL语言

  ASL是一种源语言,用来定义ACPI对象,包括编写ACPI控制方法。 OEM和平台固件开发人员在ASL文件中定义对象并编写控制方法,然后使用编译工具生成ACPI AML版本的控制方法。即用ASL语言编写实现ACPI规范,ASL在经过编译器编译后,变成AML(ACPI Machine Language)。然后由OSPM(一般也就是OS)来执行。

  ASL Code 是BIOS的一部分,命名为*.asl文件,是OS和BIOS之间的桥梁。在编译BIOS的时候,会使用iasl编译器来编译ASL源代码。BIOS/UEFI中也有相关的ACPI操作的接口,它最终会将ACPI相关的内容放到内存的某段空间中,并将指向该区域的指针传递给OS。OS使用这里的内容来操作获取硬件信息并操作相关的硬件。这样的好处:

  • OS不需要直接去与底层硬件沟通,它只要直接操作这些ASL生成的内容就可以了。
    只要支持ACPI,不管OS是Windows还是Linux,都可以完成与硬件交互,也就是OS Independent。

2.3.2.AML

  AML解释器执行字节码并计算定义块中的对象,以允许字节码执行循环构造、条件计算、访问已定义的地址空间以及应用程序所需的其他操作。AML解释器对已定义的地址空间具有读/写访问权,包括系统内存、I/O、PCI配置等等。它通过定义称为对象的入口点来访问这些地址空间。对象可以具有直接定义的值,也可以由AML解释器计算和解释。

  这个可枚举对象集合是一个OS结构,称为ACPI名称空间。命名空间是系统上ACPI设备的层次表示。系统总线是这些ACPI设备枚举的根。在其他总线上可枚举的设备(如PCI或USB设备)通常不在名称空间中枚举。相反,它们自己的总线枚举设备并加载驱动程序。然而,所有可枚举的总线都有一种编码技术,允许ACPI对设备的总线特定地址进行编码,这样就可以在ACPI中找到它们,尽管ACPI通常不为这些设备加载驱动程序。

  通常,枚举具有_HID对象(硬件标识对象)的设备,并由ACPI加载其驱动程序。具有_ADR对象(物理地址对象)的设备通常不由ACPI枚举,通常也不由ACPI加载驱动程序。_ADR设备通常可以在不涉及ACPI的情况下执行所有必要的功能,但是在设备驱动程序不能执行某个功能的情况下,或者如果驱动程序需要与系统固件通信,ACPI可以评估对象来执行所需的功能。

  ACPI的另一个方面是运行时模型,它处理在系统运行期间发生的任何ACPI中断事件。ACPI将继续评估处理这些事件所需的对象。当用户启动系统时,系统固件就完成了设置、初始化和自我测试。

2.4.ACPI initialization
在这里插入图片描述
  然后,系统固件使用固件初始化期间获得的信息,根据需要使用各种平台配置和电源接口数据更新ACPI表,然后将控制传递给引导加载程序。扩展根系统描述表(XSDT)是ACPI子系统使用的第一个表,包含系统上大多数其他ACPI表的地址。XSDT指向固定的ACPI描述表(FADT)以及OS在初始化期间处理的其他主要表。在OS初始化之后,FADT将ACPI子系统指向差分系统描述表(DSDT), DSDT是名称空间的开始,因为它是第一个包含定义块的表。

  然后ACPI子系统处理DSDT并开始从ACPI定义块构建命名空间。XSDT还指向辅助系统描述表(SSDTs),并将它们添加到名称空间中。ACPI数据表向OS提供关于系统硬件的原始数据。

  在OS从ACPI表构建了名称空间之后,它开始遍历名称空间,并为它在名称空间中遇到的所有_HID设备加载设备驱动程序。

  系统启动并运行后,ACPI与OS一起处理通过ACPI系统控制中断(SCI)处理程序发生的任何ACPI中断事件。这个中断调用ACPI事件的方式有两种:固定事件和通用事件(GPEs)。SCI在整个系统中被多路复用,以管理ACPI中断事件。

  • 固定事件是ACPI规范中具有预定义含义的ACPI事件。这些固定事件包括按下电源按钮或ACPI定时器溢出等操作。这些事件由OS处理程序直接处理。
  • GPEs是ACPI规范中没有预定义的ACPI事件。这些事件通常通过评估控制方法来处理,这些方法是名称空间中的对象,可以访问系统硬件。当ACPI子系统使用AML解释器评估控制方法时,GPE对象根据操作系统的实现处理事件。通常,这可能涉及向设备发出通知,以调用设备驱动程序来执行函数。

3.学习ACPI

  ACPI是Intel(i386,x86_64,IA64)平台的标准固件规范,绝大部分OS需要从BIOS得到的信息都可以从ACPI得到,并且现在的趋势是未来的任何新的特性相关的信息都只能从ACPI得到。学习ACPI至少可以帮助我们理解:

  • 配置信息。这些信息从legacy PNP设备的配置,到多处理器,到NUMA,比如现在的Multiple Core的信息就只能从ACPI得到。Linux启动很多代码就是处理这些配置信息,比如APIC,IOAPIC设置等。
  • ACPI相关设备。主要是笔记本电脑相关的设备,包括电源按钮,电池,外接电源,风扇,热键等。
  • 底层硬件。比如PCI中断路由,chipset(主要是南桥PCI-to-LPC bridge)操作等。
  • 电源管理。ACPI定义的电源管理包括CPU的电源管理(调频率P-state,idle C-state,throtting T-state),设备电源管理(D-state),系统电源管理(Suspend-to-Ram, Suspend-to-Disk, power off)等。
  • 设备热插拔。ACPI用一种统一的方式来描述设备的热插拔,这样的设备从单一的PCI设备,到笔记本电脑的Docking Station,到整个PCI hierarchy,CPU,Memory,甚至整个NUMA节点。
    可以说要理解现代PC平台必须了解ACPI。

refer to

  • https://www.cnblogs.com/kuwoyidai/archive/2010/08/18/1870471.html
  • https://blog.csdn.net/jiangwei0512/article/details/51614383
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值