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 启动管理器。它实现了 Boot Loader Specification (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 配置并实现安全启动。
