bios开发:从Insyde到AMI
一、编译
AMI统一使用VEB编译 选择rebuild all
Insyde在VSCODE中手动编译
二、文件格式
elink在AmiCrbPkg.sdl中有;elink是一种高速串行接口技术,用于芯片内部或芯片间的通信。elink通常会在:平台初始化模块(
AmiCrbPkg.sdl由TOKEN,一串ELINK,一些FFS_FILE,还有LibraryMapping构成
| AMI .sdl | INSYDE .dsc | |
|---|---|---|
| 来源 | AMI 专有格式 | EDKII 标准格式 |
| 核心功能 | 定义Token,组件条件,FFS布局 | 定义模块包含,编译选项,PCD值 |
| 条件编译 | SDL 对象可以通过Token = "Name" "=" "1"这样的条件来控制是否启用。 | 使用 !if !else 宏 |
| 布局 | 在 .sdl 中定义 | 在 .fdf 中定义 |
Token、eLink、InfComponent 等对象都存储在 SDL 文件中
三、AMI Aptio 5.x 类似于INSYDE H2O
| 对比维度 | AMI Aptio 5.x | INSYDE H2O / H2O UEFI |
|---|---|---|
| 构建系统基础 | GNU make + EDKII,深度集成 AMI 自定义工具(AMISDL, FontTool) | 基于 EDKII 或自家脚本,较少暴露复杂工具链 |
| 配置方式 | 图形化(Visual eBIOS)编辑 SDL 文件,配置集中存储在.sdl中。支持复杂的 Token 依赖和条件逻辑 | 主要基于 EDK II 原生文件(.dsc,.fdf,.inf) |
| 抽象层次 | 通过 eLink 和 Token 实现了高层次的抽象:例如,一个 IRQLINK 对象可同时生成 ACPI _PRT、MP Table、PIR 表等多种输出 | 通常需要手动维护多个表(ACPI)缺乏像 SDL 这样的统一描述语言 |
| 模块化与复用 | 强调 eLink 对象、InfComponent、LibraryMapping,模块间依赖关系明确;INFCOMPONENT+LIBRARYMAPPING+PCDMAPPING完整描述 EDK II 模块,支持自动预处理 INF 文件中的宏 | 导入模块需手动修改 DSC 文件 |
| ROM 布局配置 | FD_INFO,FD_AREA,FFS_FILE对象,支持复杂的偏移量(Auto、Top_FV)、属性(PEI、DXE、BDS、签名、测量等) | 使用 EDK II 标准 FDF 文件,布局控制较直接,高级功能需手工编写 |
| 构建选项override | 通过BuildOptionseLink 的Override字段和ReplaceStandardFlags,可以精确替换或追加特定模块的编译标志 | 需要在 INF 节或 DSC 中手动添加 |
| 打包与布局控制 | 通过FFS_FILE、FDF 规则、ROM Layout Wizard 灵活控制 | 也支持 FDF 规则 |
| 学习曲线 | 较陡,需理解 SDL、eLink、AMISDL、Visual eBIOS 等专有概念 | 相对平缓,更贴近原生 EDKII,但部分高级功能仍需 Insyde 专有工具 |
| 文档与社区 | 文档详细但属 NDA 内容,社区支持有限 | 文档相对开放,Insyde 也提供 NDA 资料,但部分客户反馈其工具链不如 AMI 灵活 |
FFS_FILE是固件文件布局配置,告诉构建系统如何组织bios固件中的各个模块;运行时,bios通过解析EFI_FFS_FILE_HEADER来找到并加载对应的模块
FFS_FILE
Name = "FwKeyHobPei" //该 FFS 文件的逻辑名称,用于内部引用和调试,不影响最终二进制内容
FD_AREA = "FV_BB" //指定将此模块打包到FV_BB这个 Firmware Volume 中。
在 AMI 默认布局中,FV_BB通常是PEI 阶段的 Boot Block,存放早期初始化的驱动(PEIM、SEC 等)
INFComponent = "AmixxxPkg.FwKeyHobPei" //这里表示将FwKeyHobPei这个 PEIM 打包进FV_BB。
Apriori_Index = "1" //将该模块放入 PEI 阶段的Apriori 列表,1表示其在列表中的顺序索引。
Apriori 列表中的模块会在 PEI 阶段最早被调度执行,常用于关键初始化(如密码服务、HOB 生产)。数值越小越靠前,1通常意味着较高的优先级。
End
四、Visual eBIOS —— 图形化 SDL 编辑器
Visual eBIOS 是 AMI 提供的 Windows GUI 工具,Using VeB for importing EDKII modules,
用于:
以树形视图编辑 SDL 对象(PCIDEVICE、TOKEN、ELINK 等)
通过向导快速添加新设备、模块、ROM 布局
管理项目中的 SDL 文件层次结构
调用构建过程(编译、打包)
查看构建日志和错误
Visual eBIOS是操作 SDL 的工具。
