29.1. 关于 [U]EFI x86_64 支持的通用说明

EFI 和 UEFI 这两个术语在本文档中可以互换使用。

虽然构建内核不需要以下工具,但下面列出了具有 EFI 固件和规范的 x86_64 平台所需的引导加载程序支持和相关工具。

  1. UEFI 规范: http://www.uefi.org

  2. 在 UEFI x86_64 平台上引导 Linux 内核可以使用 <EFI 启动存根> 或使用单独的引导加载程序。

  3. 带有 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 通过以下命令来执行此操作

    1. g - 初始化 GPT 分区表

    2. n - 创建新分区

    3. t - 将分区类型更改为“EFI 系统”(数字 1)

    4. 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 内存映射