统一可扩展固件接口 (UEFI)¶
UEFI,即统一可扩展固件接口,是一项管理兼容固件接口行为的规范。它由 UEFI 论坛维护 - http://www.uefi.org/。
UEFI 是其前身“EFI”的演进版本,因此在本文档和相关的源代码中,EFI 和 UEFI 这两个术语可以互换使用。通常规则是,任何新的内容都使用“UEFI”,而“EFI”则指代遗留代码或规范。
Linux 中的 UEFI 支持¶
在符合 UEFI 规范的固件平台上引导,使得内核能够支持额外的功能
UEFI 运行时服务 (Runtime Services)
通过 UEFI 配置表的标准化接口获取各种配置信息。(ACPI,SMBIOS,……)
要实际启用 [U]EFI 支持,请启用
CONFIG_EFI=y
CONFIG_EFIVAR_FS=y 或 m
该实现依赖于在扁平设备树 (Flattened Device Tree, FDT) 中接收有关 UEFI 环境的信息 - 因此仅在配置了 CONFIG_OF 时可用。
UEFI 存根 (stub)¶
“存根 (stub)”是一项将 Image/zImage 扩展为有效的 UEFI PE/COFF 可执行文件的功能,它包含一个加载程序,使得可以直接从 UEFI shell、启动菜单或 Gummiboot 或 rEFInd 等轻量级引导加载程序中加载内核。
带有存根支持构建的内核映像在非 UEFI 环境中引导时,仍然是一个有效的内核映像。
ARM 上的 UEFI 内核支持¶
ARM 架构(arm 和 arm64)上的 UEFI 内核支持仅在通过存根执行引导时才可用。
在 UEFI 模式下引导时,存根会删除所提供 DT 中的任何内存节点。相反,内核会读取 UEFI 内存映射。
存根在 FDT 的 /chosen 节点中填充(内核会扫描这些参数)以下参数
名称 |
类型(Type) |
描述 |
|---|---|---|
linux,uefi-system-table |
64 位 |
UEFI 系统表的物理地址。 |
linux,uefi-mmap-start |
64 位 |
UEFI 内存映射的物理地址,由 UEFI |
linux,uefi-mmap-size |
32 位 |
前一项中指向的 UEFI 内存映射的大小(以字节为单位)。 |
linux,uefi-mmap-desc-size |
32 位 |
UEFI 内存映射中每个条目的大小(以字节为单位)。 |
linux,uefi-mmap-desc-ver |
32 位 |
mmap 描述符格式的版本。 |
kaslr-seed |
64 位 |
用于随机化内核映像基地址位置的熵。 |
bootargs |
字符串 |
内核命令行 |