【基础】 - ACPI是什么?

news/2025/10/8 15:50:37/文章来源:https://www.cnblogs.com/eesky/p/19129735

【基础】 - ACPI是什么?

ACPI(高级配置与电源接口)表格是固件与内核间的“硬件说明书”,包含设备拓扑、电源管理、中断路由等关键信息,直接影响内核对硬件的识别与控制。Linux内核通过解析ACPI表格实现硬件抽象,而在嵌入式场景(如高通平台ABL引导)中,需手动生成或修改表格以适配多系统需求。 

一、核心ACPI表格及其内核作用

1. 基础表格:启动必备的“硬件身份证”

  • RSDP(Root System Description Pointer)
    内核启动时首先扫描的“入口指针”,存储在低内存(如0x000E0000~0x000FFFFF),指向XSDT表格。其结构包含校验和与ACPI版本,内核通过它定位其他表格。 

  • XSDT(Extended System Description Table)
    表格索引,列出所有ACPI表的物理地址,类似“目录”。内核解析XSDT后可遍历所有子表

  • FADT(Fixed ACPI Description Table)
    定义电源管理核心参数,如复位寄存器(ResetReg)、唤醒向量(WAK)、睡眠状态(_Sx)等。内核根据FADT配置系统休眠/唤醒逻辑。

  • DSDT(Differentiated System Description Table)
    设备命名空间的主体,包含硬件设备(如GPIO、I2C)的AML(ACPI机器语言)代码。例如,通过Device (CPU0)定义CPU设备,_STA方法返回设备状态(如0x0F表示正常运行)。

2. 扩展表格:功能增强的“硬件手册”

  • MADT(Multiple APIC Description Table)
    中断控制器配置表,对ARM64平台而言,需描述GIC(Generic Interrupt Controller)的分发器(Distributor)和重分布器(Redistributor)基地址,内核据此映射中断号与硬件中断源

  • GTDT(Generic Timer Description Table)
    提供系统定时器信息,包括ARM Generic Timer的基地址和看门狗配置,内核依赖此表初始化时钟子系统。

  • SSDT(Secondary System Description Table)
    辅助设备描述表,用于动态加载设备(如热插拔组件)或补充硬件细节。例如,为Wi-Fi模块添加电源状态方法(_PS0/_PS3)

二、内核如何使用ACPI表格

  1. 启动阶段:扫描与解析
    Linux内核在启动早期(如acpi_scan_init阶段)通过RSDP定位XSDT,再解析FADT、DSDT等表格,将AML代码加载到内核空间。例如,通过iasl工具解析DSDT生成的.dsl文件,可查看设备树结构与控制方法

  2. 运行阶段:硬件交互
    内核通过ACPI提供的“方法”(如_ON开启设备、_PSS获取性能状态)与硬件通信。例如,CPU调频模块通过解析CPPC(协同性能控制)表中的_CST(时钟状态)和_PSS(性能状态)调整频率

  3. 调试工具:内核与用户态辅助

    • 内核调试:通过ACPI_DEBUG_PRINT()输出调试信息,或配置CONFIG_ACPI_DEBUG启用详细日志。

    • 用户态解析:使用acpidump导出原始表格(如acpidump -n DSDT -b生成dsdt.dat),再用iasl -d dsdt.dat反编译为人类可读的ASL代码。

三、嵌入式场景:ACPI表格的生成与适配

在高通平台ABL(Android Boot Loader)中,传统使用Device Tree(DT),但为支持Windows/Linux多系统,需集成ACPI表格生成功能,核心方案有两种:

路线A:轻量ACPI Emitter(快速验证)

  • 实现:在ABL中手写C模块拼装表格,例如通过append_table()函数构造RSDP、XSDT等二进制结构,DSDT则预编译为AML文件打包进固件

  • 示例:生成CPU设备节点的ASL代码:

ASL 
DefinitionBlock ("MyTable.aml", "DSDT", 2, "ACPI", "MyTable", 0x00000001) {Device (CPU0) {Name (_HID, "ACPI0007") // 硬件ID,内核据此匹配驱动Name (_UID, 0x00) // 唯一IDMethod (_STA, 0, NotSerialized) { Return (0x0F); } // 返回设备状态}}

编译为AML后,由ABL加载到内存并传递给内核。

路线B:半量EDK2集成(长期维护)

  • 实现:嵌入UEFI(EDK2)子集(如MdePkg、ArmPkg),复用其ACPI表格生成库(如CreateAcpiTable()),动态填充硬件信息(如CPU核心数、GIC地址) 

  • 优势:支持增量扩展,例如添加PCCT(电源协调表)实现与schedutil调度器的协同,优化功耗。

四、关键问题与最佳实践

  1. 兼容性:表格校验与版本

    • 所有表格需通过校验和检查(如RSDP的前20字节与扩展部分分别计算校验和),否则内核会忽略无效表。

    • 对于ARM64平台,需确保ACPI版本≥6.1,以支持GICv3和系统就绪(SystemReady ES/IR)标准。

  2. 调试:从内核日志到ASL验证

    • 若内核无法识别设备,可检查dmesg | grep ACPI输出,确认表格是否加载或存在解析错误。

    • 使用iasl -tc dsdt.dsl编译ASL代码,提前发现语法错误(如未闭合的Device节点)。

  3. 性能优化:精简表格与动态加载

    • 避免在DSDT中包含冗余设备,可拆分到SSDT按需加载(如仅在检测到PCIe设备时加载对应SSDT)。

    • 通过_DSM(设备特定方法)传递硬件特性,减少静态表格体积。

结语:ACPI表格——固件与内核的“契约”

ACPI表格是硬件抽象的“通用语言”,其质量直接决定内核对硬件的控制力。无论是x86服务器还是ARM嵌入式设备,理解ACPI表格的结构与生成逻辑,都是解决硬件兼容性问题的关键。未来,随着UEFI/ACPI在嵌入式领域的普及,“表格即硬件配置”的理念将进一步替代传统Device Tree,成为多系统适配的核心方案——你是否考虑过,如何通过动态修改SSDT实现设备热插拔的零接触配置?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我 是 人 机

花了两天时间把 Im Not A Robot 通关了,真有意思。 下面分享一下我的通关历程。 正解 Level 1 直接点即可。 Level 2 选择所有含有 STOP 标志的方块。 直接选即可。 Level 3 填字母。瞪两下就能看出来了。 Level 4 选…

28定律及其扩展衍生

28定律及其扩展推演 28定律这四个字是十分简洁凝练的,它及其衍生描述可以用来描述身边的大多数现象。 描述 28定律的描述: 1.我第一次接触28定律是在对社会经济描述上:“社会20%的人掌握全社会80%以上的财富。” 2.…

电脑怎么创建网站吗科技创新的重要前沿是

fastermaker-boot 是基于Spring Boot3 、Vue3 的一个代码简洁、结构清晰、开发高效、模块可扩展的单体项目的基础开发框架,包含代码生成器模块,适合初级开发者特别是大学生学习研究使用,也是中小型系统快速开发的利器。 开发技术: JDK 17、Sp…

广东省人防工程建设网站wordpress首页打开很慢

植物神经紊乱是一种内脏功能失调的综合征,是由于社压会力、工作压力、生活压力等等因素而导致的一种神经类疾病。长期患有这个疾病会给患者的生活、工作以及学习带来很严重的影响和危害。 有很多患有植物神经紊乱的患者,各种各样的症状的患者被所轻或重的…

3516cv610在sample_aiisp上多创一路编码流,方法 - 详解

3516cv610在sample_aiisp上多创一路编码流,方法 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

网站建设与维护技术浅谈论文代理加盟做什么好

http://cplusoj.com/d/senior/p/SS231025D 答案为 ∑ w [ x ] − w [ s o n [ x ] ] \sum w[x]-w[son[x]] ∑w[x]−w[son[x]], x x x 非儿子 要维护断边,LCT固然可以,但不一定需要 发现如果发生了变化,只会由重儿子变成次重儿子…

注册公司制作网站门户网站建设维护

LRU是什么意思 LRU是操作系统底层的一个页面置换算法,当空间不够需要换出最长时间没有使用的页面,在本题中的意思就是当到达容量上限的时候要换出最长时间没有被访问过的节点。 如何实现 LRU的实现可以使用链表的方式,参照MySQL的实现&…

手机模板网站模板下载工具网络网站建设推广

GODADDY的虚拟主机控制面板虽然使用起来非常方便,对于文件管理的很多操作也非常到位,但是有一个非常令人头疼的问题,就是GODADDY在 主机控制面板中只支持小于20M的文件打包,这对于大部分的站长朋友来说,是非常不方便的…

方法作业

https://files.cnblogs.com/files/blogs/847621/20243866牛蕴韬01方法作业.zip?t=1759908795&download=true

公司网站建设属于软件销售湖南金科建设有限公司网站

任何程序都可能出现错误,在SQL Server中执行Transact-SQL也不例外。如果在Transact-SQL中发生了错误,一般有两种捕捉错误的方法,一种是在客户端代码(如 c#、delphi等)中使用类似try...catch的语句进行捕捉;另外一种就是…

网站登录入口大全网站制作预算

作用:线程安全的全局静态变量初始化 声明: Q_GLOBAL_STATIC(MyType,globalState) Q_GLOBAL_STATIC_WITH_ARGS(MyType, globalState, (42, "Hello", "World")) //带参数的初始化 注: 构造函数和析构函数必须是公有的 如果…

实现仿中国婚博会微信小应用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[100ask_imx6ullpro] buildroot构建emmc镜像并烧录

[100ask_imx6ullpro] buildroot构建emmc镜像并烧录 本文参考百问网韦东山老师视频 嵌入式Linux系统裁剪移植之二:使用Buildroot制作根文件系统 本文的主机环境为 Ubuntu22.04 1.准备工作 1.1.下载buildroot 从官网下载…

湘潭网站建设厦门网站制作wordpress页面排版插件

抖音API允许开发者进行二次开发,使得第三方应用程序可以与抖音进行交互。要将抖音API应用于抖音视频的录制和上传,你需要遵循以下步骤: 获取抖音API密钥:首先,你需要从抖音官网注册一个开发者账号,并创建一…

建设网站科目网络平台制作多少钱

在微服务架构下随着服务越来越多,定位问题也变得越来越复杂,因此监控服务的运行状态以及针对异常状态及时的发出告警也成为微服务治理不可或缺的一环。服务的监控主要有日志监控、调用链路监控、指标监控等几种类型方式,其中指标监控在整个微服务监控中比重最高,也是实际生…

什么网站做美式软装设计方案报告模板

🍅 作者主页:Java李杨勇 🍅 简介:Java领域优质创作者🏆、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我,都给你】 🍅 欢迎点赞 👍 收藏 ⭐留言 &…

2025 汽车改装公司最新推荐榜:一站式服务生态企业盘点,含奔驰宝马新能源改装及新锐品牌权威测评重庆宝马汽车改装/重庆新能源汽车改装/重庆汽车改装贴膜/重庆汽车改装轮毂刹车公司推荐

汽车后市场的蓬勃发展推动改装需求向个性化、全场景升级,但行业乱象让车主选择陷入困境。多数机构业务单一,难以覆盖从配件选购到售后养护的完整链条,导致服务体验碎片化;技术层面,部分机构缺乏标准化流程,合规性…

2025 布袋包装厂家最新推荐榜:自贸区实力厂商领衔,含手提袋、帆布袋等全品类,年销 500 万级生产商精选无纺布袋/布袋生产/云南布袋包装/茶叶布袋厂家推荐

在 “双碳” 目标与 “限塑令” 深化的双重催化下,布袋包装市场规模年增速超 20%,但行业乱象同步滋生:67% 的企业客户反映曾遭遇样品与成品不符问题,材料以次充好、定制周期失控等痛点频发。同时,环保认证缺失、产…

上海高端网站建设服陕西省建设网三类人员成绩公示

GitHub中readme.md文件的编辑和使用 | YuuiChungs BlogGitHub - guodongxiaren/README: README文件语法解读,即Github Flavored Markdown语法介绍

给缅甸公司网站做维护工作时间段怎样做免费网站会员

今天做了个测试,写了个测试用例来看看merge与update时控制台打印出来的日志有什么不一样。实体bean很简单,就id和name两个字段,接下来分别给出以下几种测试情形的控制台日志内容: 1. 数据库记录已存在,更改person的nam…