29.1. 关于 [U]EFI x86_64 支持的通用说明¶
EFI 和 UEFI 这两个术语在本文档中可以互换使用。
虽然构建内核不需要以下工具,但下面列出了具有 EFI 固件和规范的 x86_64 平台所需的引导加载程序支持和相关工具。
UEFI 规范: http://www.uefi.org
在 UEFI x86_64 平台上引导 Linux 内核可以使用 <EFI 启动存根> 或使用单独的引导加载程序。
带有 EFI/UEFI 固件的 x86_64 平台。
29.1.1. 机制¶
请参阅 <EFI 启动存根> 以了解如何使用 EFI 存根。
以下是在 x86_64 平台上通用的 EFI 设置指南,无论您使用 EFI 存根还是单独的引导加载程序。
使用以下配置构建内核
CONFIG_FB_EFI=y CONFIG_FRAMEBUFFER_CONSOLE=y
如果需要 EFI 运行时服务,应选择以下配置
CONFIG_EFI=y CONFIG_EFIVAR_FS=y or m # optional
- 在磁盘上创建一个带有 EFI 系统标志的 VFAT 分区
您可以使用 fdisk 通过以下命令来执行此操作
g - 初始化 GPT 分区表
n - 创建新分区
t - 将分区类型更改为“EFI 系统”(数字 1)
w - 写入并保存更改
之后,通过运行 mkfs 初始化 VFAT 文件系统
mkfs.fat /dev/<your-partition>
- 将引导文件复制到 VFAT 分区
如果您使用 EFI 存根方法,内核也充当 EFI 可执行文件。
您可以简单地将 bzImage 复制到分区上的 EFI/boot/bootx64.efi 路径,以便它自动启动,请参阅 <EFI 启动存根> 页面,以获取有关传递内核参数和 initramfs 的其他说明。
如果您使用自定义引导加载程序,请参阅相关文档以获取有关此部分的帮助。
如果部分或全部 EFI 运行时服务不起作用,您可以尝试以下内核命令行参数来关闭部分或全部 EFI 运行时服务。
- noefi
关闭所有 EFI 运行时服务
- reboot_type=k
关闭 EFI 重启运行时服务
如果 EFI 内存映射中包含 E820 映射中没有的其他条目,您可以使用以下内核命令行参数将这些条目包含在内核的可用物理 RAM 内存映射中。
- add_efi_memmap
包含可用物理 RAM 的 EFI 内存映射