菜单

kaoqi
kaoqi
发布于 2026-07-24 / 34 阅读
0
0

ACPI框架

这里讨论的是在linux的kernel中ACPI的实现机制(来源于微软的ACPICA项目),可以很明显的观察到ACPI的driver中函数实现主要依赖acpica的文件功能。而acpica的文件中,又旗帜鲜明的分为10个不同的系列。

系列名

文件名

功能

db系列

共同构成AML调试器

dbcmds.c

AML调试器的核心部分,负责实现调试器可识别的各种命令

dbconvert.c

ACPI调试器中的数据转换于格式化输出,负责将ACPI内部的对象类型转换为人类可读的字符串形式,以便在调试时显示

dbdisplay.c

负责格式化并输出ACPI命名空间对象详细内容的模块

dbexec.c

AML调试器的执行控制核心,负责将dbcmd.c接收到的执行类命令真正落实为对AML控制方法的调用和调试

dbfileio.c

负责文件输入、输出操作的模块,让调试器可以读取一个AML字节码的文件,如.aml或.dat文件

dbhistry.c

负责命令历史记录管理的模块,它维护了一个环形缓冲区,用于保存用户在调试器交互界面中输入过的命令字符串

dbinput.c

用于调试器的用户输入处理核心

dbmethod.c

调试器用于显示ACPI控制方法详细信息的模块

dbnames.c

转储命名空间对象名称和路径的模块

dbobject.c

调试器中负责显示ACPI内部对象详细内容的模块

dbstats.c

统计于显示ACPI子系统内部状态信息的模块

dbtest.c

执行预定义测试命令的模块

dbutils.c

一些调试器工具的模块,比如字符串处理、数据格式化等

dbxface.c

调试器的外部接口层,封装了调试器的核心功能,内核的其他模块可以在ACPI发生错误时,通过这个文件中的函数来触发调试器,从而绕开dbcmd.c或dbinput.c文件的功能

ds系列

AML解析器与执行器

dsargs.c

ACPI加载命名空间时,用于解析并执行静态参数初始化的文件,在ACPI表被加载到内存后,负责执行其中定义的控制方法的静态参数默认值。

dscontrol.c

AML控制流解析与执行模块,用于处理AML代码中的流程控制语句

dsdebug.c

AML代码执行中添加断点调试的功能文件,支持单步执行、断点与异常调试

dsfield.c

在加载ACPI表时,处理操作区域中定义的各类字段,并将它们创建为命名空间中的节点

dsinit.c

ACPI中负责命名空间初始化过程的整体调度与协调的文件,在ACPI表加载完成后,遍历整个命名空间树,并对每个节点执行必要的初始化操作。

dsmethod.c

ACPI中专门负责准备和执行单个AML控制方法的文件

dsmthdat.c

管理控制方法内部数据对象的文件,在AML方法执行期间,维护该方法私有的局部变量和参数

dsobject.c

ACPI子系统中创建并初始化命名空间对象的文件,根据AML字节码中的对象定义,创建对应的ACPI_OPERAND_OBJECT结构体并关联到namespace_node中去的模块

dsopcode.c

解析并执行AML操作码,作为操作码分派其,将dsmethod.c启动的执行流程中的每一条AML命令,路由对应的处理函数

dspkginit.c

解析并初始化package对象的文件,针对AML解释器中的package操作码,提取包中元素的数量以及每个元素的初始值定义,最终将所有解析出来的元素组装成一个完整的operand object并关联到namespace node上去

dsutils.c

AML解析与执行通用工具函数的文件,提供获取、验证和转换

dswexec.c

负责执行AML操作码的辅助处理函数集文件,是dsopcode.c的一种补充,处理那些需要与命名空间、操作区域、字段单元等实体进行交互的复杂操作码

dswload.c

将AML字节码加载到命名空间的第一遍加载,在命名空间中创建所有具名对象的节点,此时只建立层次结构,不解析细节

dswlaod2.c

AML的第二遍加载,解析并填充每一个对象的完整内容

ev系列

事件管理、操作区域与硬件访问

evevent.c

ACPI中负责事件检测与分发的文件,处理ACPI规范中定义的固定事件

evglock.c

ACPI事件全局锁文件,提供一套互斥机制,确保在访问共享硬件资源时,操作系统和固件之间不会发生冲突

evgpe.c

处理通用事件(GPE)的核心文件,包括检测GPE事件(操作GPE状态寄存器和使能寄存器)、分发GPE事件、处理GPE唤醒

evgpeblk.c

管理GPE块数据结构的文件,可以创建或销毁GPE块、管理GPE寄存器、初始化GPE列表等

evgpeutil.c

为GPE处理提供底层工具的文件,比如可以为evgpe.c、evgpeblk.c提供一组可复用的辅助功能,如GPE状态操作、GPR使能操作、GPE信息查询等

evhandler.c

管理事件处理程序、管理事件处理程序注册表,允许内核其他部分注册回调函数,以便在特定ACPI事件发生时被通知

evmisc.c

misc本身就是kernel中的一种轻量级字符设备,这里具体来说就是管理一些杂项,来源自miscellaneous的缩写

evregion.c

管理操作区域(Operation Region)的文件,作为操作区域的运行时管理器,处理操作区域的初始化、访问和地址空间切换

evrgnini.c

初始化操作区域的文件,具体来说就是,该文件负责遍历命名空间中所有ACPI_TYPE_REGION节点,并为每个节点执行初始化,绑定地址空间处理程序如一个SystemMemory类型的区域会绑定到系统内存访问处理程序,而一个SystemIO类型的绑定到IO端口访问处理程序

evsci.c

处理系统控制中断(SCI)的文件,在系统启动时,向内核中断子系统注册SCI的中断处理程序,并在系统关闭时注销,处理SCI中断,当硬件产生一个SCI中断时,evsci.c文件中的处理函数将会被调用,最后这个文件还会管理SCI的状态相关的寄存器

evxface.c

为内核其他部分提供一组标准化的接口,用于注册或注销与ACPI事件相关的回调函数,提供事件注册接口、提供操作区域注册接口、隔离内部实现等方法

evxfevnt.c

提供固定事件的外部接口,是evevent文件的向外可暴露的接口,会暴露一些启用、禁用、清除固定事件的接口

ex系列

AML解释器执行引擎

exconcat.c

负责执行字符串连接操作的文件,用于处理Concatenate操作码,当遇到dsopcode.c时会调用此函数

exconfig.c

执行与配置相关的AML操作码,比如_PRS命令可以获取设备可能的资源设置、_CRS可以获取设备当前的资源设置,此外,这一exconfig文件还是dsopcode中调用即插即用功能的核心执行者,当操作系统需要配置一个设备时,会调用这里的方法,由exconfig去解析对应的AML代码

exconvrt.c

数据类型转换的文件,根据ACPI规则定义的隐式转换规则,将acpi_operand_object从一种类型转换为另外一种类型

excreate.c

创建AML解释器内部的一个对象,包括创建一个具体的缓冲区对象、一个包对象、一个操作域对象,或者是一个Mutex、Event、Semaphore相关的一种同步对象

exdebug.c

提供AML解释器的调试支持,在AML方法执行期间,将指定的对象存储到一个内部的调试缓冲区中,供调试器读取

exdump.c

格式化输出ACPI对象内容的文件,可以将debug中捕捉到的有关acpi_operand_object或者acpi_namespace_node的数据结构打印为可读文本的形式进行输出

exfield.c

执行字段对象访问操作的文件,处理针对ACPI_TYPE_FIELD_UNIT的读写操作,是dswexec.c文件的实际执行层

exfldio.c

执行字段对象的底层IO操作的文件,处理字段读写时的具体数据传输逻辑,比如最复杂的位操作和数据对齐逻辑,为exfield.c提供底层支持,确保AML代码能正确访问硬件寄存器中的任意位字段

exmisc.c

处理具体杂项事务的文件

exmutex.c

负责执行互斥锁相关操作的文件,在AML方法执行期间,管理互斥锁的获取与释放,确保对共享资源的互斥访问,mutex本身就是一种互斥锁的设备描述

exnames.c

AML的文件名称路径解析的文件

exoparg1.c

处理单操作数AML操作码的文件,执行ACPI规定中定义的所有单操作数指令,比如store--将数据存储到目录对象、notify--向设备发送通知事件、sizeof--获取对象的大小

exoparg2.c

双操作数指令,比如算术运算、逻辑运算、位运算、字符串操作等

exoparg3.c

三操作数指令,如CondRefOf条件引用,检查对象是否存在,Mid,从字符串或缓冲区中提取指定位置和长度的子串

exoparg6.c

六操作数指令,比如搜索包指令、匹配操作码指令、起始索引指令

exprep.c

执行字段准备操作的文件,AML代码中的Field指令,比如计算字段偏移、锁定操作区域

exregion.c

执行操作区域访问的文件

exresnte.c

解析命名空间节点引用的文件,将指向命名空间节点的引用,比如RefOf操作码的结果,解析为实际的数据对象

exresolv.c

将resolve operands的东西解析为最终可用的数据值

exresop.c

专门解析操作码对应操作数的文件

exserial.c

执行串行化操作的文件,一些AML代码中的串行化指令,比如Acquire获取互斥锁、Release释放已获取的同步对象等,需要对operand对象进行同步,管理其状态和等待队列的操作

exstore.c

执行store操作的文件,处理AML中的store命令,将数据存储到目标对象中,是一个store命令的总接口

exstoren.c

命名空间存储执行器,专门处理将数据存储到命名空间的逻辑,与exstore不同的是,这个东东专门处理namespace_node相关的数据保存

exstorob.c

将数据存储到对象内部,处理operand_object对象的存储

exsystem.c

系统级接口文件,是访问操作系统内核服务的桥梁

extrace.c

执行trace操作码,在debug中对调试程序进行跟踪执行

exutils.c

AML解释器的工具函数,包括对象引用技术、操作数栈操作、返回值处理等内容

hw系列

AML解释器在硬件寄存器层级的具体操作

hwacpi.c

ACPI硬件寄存器直接访问的文件,提供对ACPI标准硬件寄存器的底层读写操作

hwesleep.c

执行系统休眠流程的文件

hwgpe.c

对于通用事件的硬件寄存器操作

hwpci.c

负责PCI配置空间访问的文件

hwregs.c

最底层的硬件寄存器物理访问层、提供了一些诸如IO空间读写、内存映射IO读写的功能

hwsleep.c

系统休眠状态切换的底层硬件操作文件

hwtimer.c

电源管理定时器操作的文件

hwvalid.c

负责IO端口访问验证的文件,包括端口范围检查、访问宽度检查等

hwxface.c

用于将这一部分hw代码封装后给外部访问的接口形式的文件

hwxfsleep.c

提供休眠功能的外部接口文件

ns系列

命名空间相关的文件

nsaccess.c

命名空间节点访问和权限控制的文件

nsalloc.c

命名空间节点内存管理的文件

nsarguments.c

处理控制方法参数的文件,比如将传入的参数包拆解为独立的参数对象

nsconvert.c

命名空间对象类型转换文件

nsdump.c

命名空间调试输出与转储的文件

nsdumpdv.c

一个已经废弃的调试模块,用于设备节点的转储

nseval.c

对象评估与控制方法执行,比如输入控制方法时,转向AML解释器执行其代码,输入对象时,返回其当前值,输入路径时,进行路径解析

nsinit.c

命名空间初始化,遍历命名空间树、初始化设备节点、初始化热插拔对象,服务于kernel启动流程

nsload.c

命名空间加载、卸载和扩展

nsnames.c

命名空间节点名称和路径操作的核心文件

nsobject.c

命名空间对象基本操作的核心文件

nsparse.c

命名空间表解析,可以处理传入的PassNumber参数,实现从AML字节码到命名空间节点的完整解析逻辑

nspredef.c

预定义ACPI方法和对象的核心文件,负责验证BIOS暴露的预定义ACPI对象和方法

nsprepkg.c

预定义包验证器,专门校验BIOS暴露的预定义方法返回的包对象是否符合规范

nsrepair.c

ACPI中对象修复模块,专门负责处理BIOS返回的预定义方法对象类型不匹配的问题,会尝试将不符合规范的对象修复或转换为预期类型,而不是直接报错,从而提高系统的兼容性

nsrepair2.c

专门负责处理更复杂、需要返回特定数据包的修复场景

nssearch.c

在命名空间中定位特定名称和类型的对象

nsutils.c

提供了一系列通用的命名空间操作工具函数,是命名空间的基础工具模块

nswalk.c

遍历引擎,负责按指定规则遍历整个ACPI命名空间树

nsxfeval.c

外部评估接口模块,为内核其他部分调用ACPI对象和方法的高级入口,封装了命名空间查找、方法执行、结果校验和修复的完整流程

nsxfname.c

外部名称转换与路径解析接口模块,在内核其他部分访问ACPI命名空间时,进行名称字符串到内部对象转换的统一入口,处于nsxfeval.c评估接口的前置环节

nsxfobj.c

外部对象操作接口模块,作为内核其他部分操作ACPI的统一入口

ps系列

AML命令参数解析器

psargs.c

AML解析参数模块

psloop.c

负责驱动AML解释器的主循环

psobject.c

创建、初始化和维护解析器内部使用的中间对象

psopcode.c

AML 操作码信息表模块

psopinfo.c

操作码信息查询模块

psparse.c

解析器状态管理模块‌,是 AML 解析执行流程的总控中心。

psscope.c

解析作用域管理模块‌,负责维护 AML 解析过程中的作用域栈。

pstree.c

解析树构建模块‌,负责将解析过程中创建的对象组装成完整的解析树。

psutils.c

解析器基础工具模块‌,为其他解析模块提供通用辅助功能。

pswalk.c

解析树遍历模块‌,提供对解析树的遍历和访问能力。

psxface.c

解析器外部接口模块‌,是解析器与 ACPI 核心其他部分的交互入口。

rs系列

Resource相关的文件

rsaddr.c

地址资源处理模块,专门处理ACPI地址类资源描述符

rscalc.c

资源计算模块‌,负责计算 ACPI 资源描述符的长度和大小

rscreate.c

‌资源创建模块‌,负责创建 ACPI 资源描述符。

rsdump.c

‌资源调试输出模块‌,负责将资源描述符格式化为可读字符串。

rsdumpinfo.c

‌资源调试信息表模块‌,提供资源类型的元数据信息。

rsinfo.c

‌资源信息查询模块‌,提供资源描述符的元数据查询接口。

rsio.c

‌IO 资源处理模块‌,专门处理 IO 端口资源描述符。

rsirq.c

‌中断资源处理模块‌,专门处理中断资源描述符。

rslist.c

‌资源列表管理模块‌,负责资源描述符列表的遍历和操作。

rsmemory.c

内存资源处理模块‌,专门处理内存资源描述符。

rsmisc.c

杂项资源处理模块‌,处理非标准或辅助类型的资源描述符。

rsserial.c

串行总线资源处理模块‌,处理 I2C、SPI、UART 等串行总线资源描述符

rsutils.c

‌资源工具模块‌,为其他资源模块提供通用辅助功能。

rsxface.c

资源外部接口模块‌,是资源管理模块与 ACPI 核心其他部分的交互入口。

tb系列

专门处理表的文件

tbdata.c

表数据管理模块‌,负责 ACPI 表的全局数据结构和状态管理

tbfadt.c

‌FADT 表解析模块‌,专门处理固定 ACPI 描述表(FADT)

tbfind.c

表查找模块‌,负责在已加载的表中按签名查找特定表

tbinstal.c

‌表安装模块‌,负责将新表加载到 ACPI 子系统中

tbprint.c

表调试输出模块‌,负责将 ACPI 表内容格式化为可读字符串

tbxface.c

‌表管理外部接口模块‌,是表管理模块与 ACPI 核心其他部分的交互入口

tbxfload.c

‌表加载外部接口模块‌,负责从固件或内存中加载 ACPI 表

tbutils.c

表管理工具模块‌,为其他表管理模块提供通用辅助功能

tbxfroot.c

‌根表查找模块‌,负责定位 RSDP 并初始化根表指针。

ut系列

实用工具Utilities模块文件

utaddress.c

‌地址验证工具模块‌,负责验证物理地址的有效性和可访问性。

utalloc.c

‌内存分配工具模块‌,提供 ACPI 子系统专用的内存管理功能。

utascii.c

ASCII 转换工具模块‌,负责 ASCII 字符的转换和判断。

utbuffer.c

缓冲区操作工具模块‌,提供通用的缓冲区处理功能。

utcopy.c

数据复制工具模块‌,负责内部对象与外部缓冲区之间的数据转换。

utdebug.c

‌调试输出工具模块‌,提供 ACPI 子系统的调试日志功能。

utcache.c

缓存管理工具模块‌,负责 ACPI 内部对象的内存缓存管理。

utdecode.c

‌解码工具模块‌,负责将 ACPI 内部编码值转换为可读字符串。

utdelete.c

‌对象删除工具模块‌,负责安全地删除和释放 ACPI 内部对象。

uterror.c

‌错误处理工具模块‌,提供统一的错误信息输出和异常处理。

uteval.c

评估工具模块‌,提供对象评估的辅助功能。

utexcep.c

‌异常处理工具模块‌,负责 ACPI 异常码的转换和处理。

utglobal.c

‌全局变量管理模块‌,定义和管理 ACPI 子系统的全局变量。

uthex.c

十六进制转换模块‌,负责十六进制字符串与数值之间的转换。

utids.c

‌硬件 ID 处理模块‌,负责解析和匹配硬件 ID(_HID、_CID)。

utinit.c

初始化工具模块‌,负责 ACPI 子系统的初始化流程。

utlock.c

自旋锁工具模块‌,提供 ACPI 专用的自旋锁实现。

utmath.c

‌数学运算模块‌,提供 ACPI 所需的数学运算功能。

utmisc.c

杂项工具模块‌,提供各种通用辅助功能。

utmutex.c

‌互斥锁工具模块‌,提供 ACPI 专用的互斥锁实现。

utnonansi.c

‌非 ANSI 函数模块‌,提供非标准 C 库函数的实现。

utobject.c

对象操作工具模块‌,提供内部对象的创建和操作功能。

utosi.c

OSI 接口模块‌,处理操作系统接口(_OSI)的评估。

utownerid.c

‌所有者 ID 管理模块‌,负责分配和管理所有者 ID。

utpredef.c

‌预定义对象验证工具模块‌,负责校验预定义对象的返回值类型。

utprint.c

‌格式化输出模块‌,提供 ACPI 专用的字符串格式化功能。

utresdecode.c

资源解码模块‌,负责将 ACPI 资源描述符解码为可读字符串。

utstate.c

‌状态管理模块‌,负责管理 ACPI 子系统的全局状态。

utstring.c

字符串操作模块‌,提供 ACPI 专用的字符串处理功能。

utstrsuppt.c

字符串支持模块‌,提供字符串操作的辅助功能。

utstrtoul64.c

‌字符串转整数模块‌,负责将字符串转换为 64 位整数。

uttrack.c

‌内存跟踪模块‌,提供内存分配的调试和跟踪功能。

utuuid.c

UUID 处理模块‌,负责 UUID 的解析和比较。

utxface.c

‌外部接口模块‌,是 Utilities 模块与 ACPI 核心其他部分的交互入口。

utxferror.c

错误处理外部接口模块‌,提供错误处理的统一入口。

utxfinit.c

‌初始化外部接口模块‌,负责 ACPI 子系统的全局初始化。

utxfmutex.c

‌互斥锁外部接口模块‌,提供互斥锁的外部调用接口。

到这里可以说ACPICA项目的文件过完了一遍含义


评论