UEFI 启动管理器概述
UEFI 启动管理器是在固件平台初始化之后运行的程序,负责选择并启动操作系统镜像。 在 Qualcomm Linux 上:- XBL 固件初始化硬件(DDR、时钟、安全),并移交给存储在
abl_a/abl_b分区中的 UEFI 镜像。 - UEFI 固件执行 UEFI 平台初始化,发现 EFI 系统分区(ESP),并启动默认的 EFI 应用程序(systemd-boot)。
- systemd-boot 从 ESP 读取启动项,在需要时显示菜单,并执行所选的内核 EFI 二进制文件。
systemd-boot 行为
systemd-boot 是 systemd 项目提供的一个最小化、符合规范的 UEFI 启动管理器。它实现了 启动加载程序规范(BLS), 并同时支持 Type 1 和 Type 2 启动项。启动项发现
启动时,systemd-boot 在以下位置扫描 ESP 中的有效启动项:
在 Qualcomm Linux 上,内核仅打包为放置在
EFI/Linux/ 中的 Type 2 UKI 镜像。
loader.conf
systemd-boot 的全局默认设置存储在 ESP 上的loader/loader.conf 中。
Qualcomm Linux Yocto 构建会写入一个最小化的 loader.conf:
查看启动项格式
Type 1 附加 .conf 文件
Type 1 启动项是放置在 ESP 上loader/entries/ 中的纯文本 .conf 文件。每个文件描述一个启动项:
Qualcomm Linux 在生产环境中不使用 Type 1 启动项。此处展示布局仅供添加自定义启动项时参考。
Type 2 统一内核镜像(UKI)
UKI 是一个单一的 EFI 二进制文件,嵌入了 Linux 内核镜像、initramfs、内核命令行以及可选的设备树。UEFI 固件(或 systemd-boot)可以直接执行 UKI,无需任何辅助的.conf 文件。
UKI 文件放置在 ESP 上的 EFI/Linux/ 中,以 .efi 扩展名命名(例如 linux.efi、linux-rt.efi)。systemd-boot 通过扫描该目录自动识别它们。
有关 UKI 镜像格式规范,请参阅
Type 2 EFI Unified Kernel Images。
生成 Yocto ESP 镜像
Yocto 的meta-qcom 层提供配方
recipes-kernel/images/esp-qcom-image.bb,用于组装 ESP 镜像
(efi.bin)。该配方:
- 从
systemd软件包构建 systemd-boot,并将systemd-boot.efi二进制文件复制到EFI/BOOT/BOOTAA64.EFI,即 UEFI 默认的可移动介质启动路径。 - 使用
ukify将内核、initramfs 和命令行打包到一个 UKI 中,并写入EFI/Linux/linux.efi(RT 构建则为EFI/Linux/linux-rt.efi)。 - 写入包含默认超时和启动项策略的
loader/loader.conf。 - 将所有内容格式化为 FAT32 镜像,并作为
efi.bin存储在构建部署目录中。
efi.bin 被刷写到设备上的 efi 分区。
有关刷写说明,请参阅安装并启动内核。
有关安全启动集成的更多信息,请参阅
使用 systemd-boot 和 UKI 配置安全启动。
