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