引导加载程序
系统在上电时运行引导加载程序软件,它作为加载操作系统和其他所需应用程序的接口。 Qualcomm 芯片组(包括 Qualcomm Linux 支持的芯片组)使用如下多阶段启动过程:主引导加载程序(PBL)
- 为应用程序建立安全信任根(RoT)和安全启动过程。有关更多信息,请参阅安全启动。
- 识别主存储设备并加载称为可扩展引导加载程序(XBL)的二级引导加载程序。 如果系统在加载 XBL 镜像时遇到任何可恢复的错误,PBL 会进入紧急下载(EDL)模式。有关如何检测 EDL 模式的更多信息,请参阅 EDL 设备管理器的枚举。
- 将 XBL 段加载到启动 SoC 内部存储器中。有关 PBL 如何加载 XBL 段的更多信息,请参阅 APSS 冷启动流程。
可扩展引导加载程序(XBL)
- 初始化硬件、固件镜像、CPU 缓存、MMU、启动设备、PMIC 和 DDR。
- 设置 RAM 转储 USB 驱动程序、USB 充电、热检查、电源管理集成电路(PMIC)和低功耗双倍数据速率(LPDDR)时钟功能。
- 通过 USB 将 RAM 转储收集到主机上。
- 加载并验证 Qualcomm® 可信执行环境(Qualcomm TEE)、Qualcomm Hypervisor 和 UEFI 镜像。
- 提供 XBL 配置(
XBL_CFG),它是冷启动流程的一部分,包含 PMIC 和其他驱动程序设置。 - 为 XBL 提供 Qualcomm 签名的 ELF 段,以初始化外部保护单元(xPU)。
- XBL_CFG 是一个独立的二进制文件,包含特定于平台的配置和设置。XBL 使用 XBL_CFG 驱动程序加载并配置所需的设置。该驱动程序使用此二进制文件对 XBL_CFG 的每项设置提供按需读取访问。
统一可扩展固件接口(UEFI)
UEFI 是操作系统(OS)与平台固件之间的软件接口。
它包含带有平台信息的数据表,以及 OS 及其加载程序可以使用的启动和运行时服务调用。它们共同为启动 OS 和运行 UEFI 应用程序创建了一个标准环境。
Qualcomm 使用 Tianocore EDK-II,这是一个开源实现,可从 http://www.tianocore.org/edk2/ 获取,它遵循 UEFI 规范。
系统提供以下构建选项:
- Retail 构建:具有最少的调试功能和最优的内存占用,非常适合生产环境。
- Debug 构建:非常适合开发环境,启用了所有调试功能。
U-Boot
U-Boot 是一个开源引导加载程序,在 Qualcomm Linux 启动流程中可以用作 EDK II 的替代方案。在此配置中,U-Boot 替代 EDK II,而所有其他阶段保持不变。 U-Boot 提供以下功能:- 初始化并配置启动所需的平台硬件和外设
- 加载 systemd-boot EFI 镜像并将控制权移交给它,随后由其加载操作系统(OS)
- 为 OS 实现 UEFI 启动服务和有限的运行时服务
- 提供用于系统配置和调试的交互式命令行界面
- 通过使用可信加密签名验证 OS 镜像来支持安全启动机制
systemd-boot OS 管理器
systemd-boot 是一个执行已配置 EFI 镜像的 UEFI 启动管理器。它仅支持带有 UEFI 固件的系统,并执行以下操作:- 从 EFI 系统分区(ESP,在 Linux OS 运行时挂载到
/efi、/boot或/boot/efi)以及扩展引导加载程序分区(XBOOTLDR,挂载到/boot)加载启动项信息。 您必须将配置文件片段、内核、初始 RAM 磁盘(initrd)和其他 EFI 镜像放置在 ESP 或 XBOOTLDR 中。 - 读取简单且通用的引导加载程序配置文件,并为每个引导加载程序条目选择一个文件。所有文件都位于 ESP 分区中。
CONFIG_EFI_STUB 编译选项。
后续步骤
- 有关 EFI boot stub,请参阅 https://docs.kernel.org/admin-guide/efi-stub.html。
- 有关 EFI 分区的示例结构,请参阅 Qualcomm Linux Yocto 指南中的 systemd-boot。

