news 2026/11/5 6:53:53

UEFI ASL 模块怎么写?基于 AMI Aptio 平台手把手完整实现(附代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UEFI ASL 模块怎么写?基于 AMI Aptio 平台手把手完整实现(附代码)

📖前言

真实产线场景往往是这样:你手头有一块Coffee Lake / Whiskey Lake工控主板,厂商只给了一个.ROM,而你需要——

  • 给自研板卡挂一个ACPI设备;
  • 补一段唤醒逻辑、温度上报方法;
  • 让OS侧驱动能通过_DSM拿到板卡私有配置。

这些需求的答案都指向同一件事:往固件里加一张自己的SSDT。

本期全程基于AMI Aptio(V为例,兼容说明Aptio 4):写ASL →编译→封装成AMI标准模块五件套→编进ROM →MMTOOL验证→ AFU刷写真机→ RU / Linux / Windows三层确认。每一步都是量产姿势。

0背景知识:ACPI / ASL / AML / DSDT / SSDT

老规矩,先把概念钉死:

ASL(源代码,人写)

│ iasl 编译

▼

AML(字节码,机器"读")

│ 塞进

▼

DSDT / SSDT(ACPI 表)

│ 固件启动时递给 OS

▼

OS 里的 AML 解释器逐条执行

(Windows 内置解释器 / Linux 的 ACPICA 子系统)

ACPI表家族:

RSDP(根指针:固件留给 OS 的"入口纸条")

└── XSDT(表目录)

├── FACP 电源管理总开关

├── DSDT 主描述表:整机"户口本",一块主板一份

├── SSDT ★ 副表:今天的"外挂",想加就加

├── APIC 中断控制器

├── MCFG PCIe 配置空间基址

└── HPET / BGRT / …

三个关键认知:

  1. AML在OS里执行,不在固件里。固件只是“投递员”——把表放进内存、把指针告诉OS。AMI Aptio源码树里那些平台自带的.asl文件(DSDT等),最终也是被编译后随镜像投递。
  2. 加SSDT,别动DSDT。AMI项目的DSDT是整包生成、跟芯片组代码强绑定的,侵入式修改维护噩梦;SSDT是即插即用的补充表,OS会把DSDT +所有SSDT合并进同一命名空间,效果等价。
  3. ASL名字规则:对象名最多4字符;下划线_开头(_HID、_STA…)是规范保留名,不能自己发明。

2准备工作

2.1 AMI Aptio项目包(公司授权交付)

AMI源码是授权+ NDA交付的,相信在座各位手里都有公司给的项目包(本文以Aptio V项目树为基准)。

2.2工具清单

工具

用途

来源

iasl

编译/反汇编ASL

ACPICA官网,或AMI工具合集自带(AFU/AMIBCP/MMTOOL那一套里就有IASL.exe)

build(build.bat)

编译Aptio项目

项目包自带

MMTOOL

查看/抽取/替换ROM里的FFS模块

AMI工具合集

AFU(AFUWINx64 / AFUDOS / AFULNX)

刷写固件

AMI工具合集

RU.EXE

不进OS直接看ACPI表/寄存器

AMI工具合集

USB转TTL串口线

看DEBUG日志(Aptio走串口)

淘宝20块

编程器(DediProg等)

💀救砖用,强烈建议备着

同上

2.3硬件

一块可以随便折腾的开发板(示例:Coffee Lake工控板)。

3实战总览:我们要做什么

目标:在固件里添加自定义ACPI设备MYCO0001(一段MMIO寄存器+若干方法),最终在Linux里看到:

$ls/sys/bus/acpi/devices/

MYCO0001:00 PNP0103:00 PNP0C01:00 ...

AMI平台的全流程:

① 写 SsdtDemo.asl

│ iasl 编译 + acpiexec 自测

▼

② SsdtDemo.aml →(iasl -tc)→ SsdtDemoHex.h(C 数组)

│

▼

③ 封装成 AMI 模块五件套(.c/.dxs/.cif/.mak/.sdl)

│ 拷进项目模块树 + SDL 使能

▼

④ build 编译出 ROM

│

▼

⑤ MMTOOL 打开 ROM,按 GUID 找到我们的模块(上机前先自证)

│

▼

⑥ AFU 刷写真机 → RU / Linux / Windows 三层验证

熟悉本系列的老读者会发现:相比DXE阶段的其他模块,ACPI模块最大的特点是“固件侧只管投递,执行发生在OS”——这决定了我们验证工作的重心。

4源码编写步骤及解析

4.1 第一步:写 ASL 文件(逐行精讲)

在模块目录(下一步建立)里新建SsdtDemo.asl:

/*

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 6:47:53

下单不付款库存被占?Flask定时任务自动取消超时订单+回滚库存

⚠️ 免责声明:本文项目仅供技术学习参考,严禁直接作为毕业设计或课程作业提交。请结合自身需求进行二次开发与创新,学术诚信从我做起 🙂这事服务端不干,库存就锁死了 先还原一个事故现场。 你的商城里有一件爆款卫衣&…

作者头像 李华
网站建设 2026/11/5 6:45:57

CRA Draft Guidance(指导文件草案)解读:谁才是真正的制造商?

为什么需要关注 CRA Draft Guidance 2026 年 3 月,欧盟委员会发布了《Cyber Resilience Act(CRA)Draft Guidance》征求意见稿,旨在帮助企业更好地理解和落实 CRA 的具体要求。CRA 法规本身规定了企业需要履行的义务,而…

作者头像 李华
网站建设 2026/11/5 6:45:56

中项-案例分析2

规划质量管理过程中可用来规避该问题的工具 / 技术: 1. 过程决策程序图 (PDPC) 这是一种系统性的管理规划工具,旨在识别正在制定的计划中可能出现的问题。通过该工具,团队可以提前制定对策来预防或抵消这些问题,从而修订计划以避开…

作者头像 李华
网站建设 2026/11/5 6:45:52

15个字符串处理绝招,让你代码效率翻倍

一、同样的这个写作的情况, 为什么人家那边只用了那个三行就搞定了,但是你自己这边却写了足足三十行之多呢?从事开发工作的人都有一个比较一致的共识, 就是字符串处理这个事情, 在日常的编码任务里面所占的比重是高达百分之六十以上的。无论你是需要爬取数据, 还是…

作者头像 李华
网站建设 2026/11/5 6:44:43

微调、蒸馏、RAG 之后,要不要重新备案?三种改造方式的触发差异

1. 先说结论:三种改造方式,备案触发点完全不同 很多团队在模型上线后做了一轮优化——微调、蒸馏、接入 RAG——然后卡在同一个问题上:这些改造是否需要重新备案? 先给一个可以直接拿去与合规同学对齐的结论表:改造方式…

作者头像 李华