统一可扩展固件接口 (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

字符串

内核命令行