> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 引导流程与架构概述

冷启动是指系统从断电状态启动的过程。冷启动过程包括以下步骤：

1. 冷启动从主引导加载程序（PBL）开始执行，PBL 为可扩展引导加载程序（XBL）设置初始系统。
2. XBL 执行更广泛的系统初始化，包括 DDR 初始化，并加载 UEFI 镜像。
3. UEFI 提供丰富的固件接口，在 Qualcomm<sup>®</sup> Linux 上加载 systemd-boot 作为引导管理器来管理操作系统镜像。

有关更多信息，请参阅 [APSS 冷启动流程](https://dragonwingdocs.qualcomm.com/System/Boot/apss-cold-boot-flow)。

## UEFI 引导管理器

Qualcomm Linux 支持将 systemd-boot 作为通用可扩展固件接口（UEFI）引导管理器来加载和引导 Linux 内核。在这种情况下，Qualcomm Linux 内核会被构建为 EFI stub。

## Systemd-boot

Systemd-boot 是一个 UEFI 引导管理器，它执行 EFI 镜像、提供引导条目并支持统一内核镜像（UKI）。Systemd-boot 支持以下组件：

* 引导条目：类型 1 引导加载程序规范条目位于 ESP 上的 `loader/entries/` 目录中。这些文件描述了 Qualcomm<sup>®</sup> Linux 内核镜像以及关联的 initrd 镜像和其他 EFI 二进制文件。
* UKI：类型 2 引导加载程序规范 EFI 统一内核镜像是位于 ESP 上 `/EFI/Linux/` 目录中的可执行 EFI 二进制文件。
  有关引导条目和统一内核镜像的更多信息，请参阅 [The Boot Loader Specification](https://uapi-group.org/specifications/specs/boot_loader_specification/)。

Systemd-boot 是 meta Yocto 层的 systemd 软件包的一部分。Yocto recipe 使用 `recipes-kernel/images/esp-qcom-image.bb` recipe 文件来处理 ESP 镜像的生成。

有关 systemd-boot 的更多信息，请参阅 [UEFI 与 systemd-boot](./uefi-and-systemd-boot)。

## 作为 EFI stub 的 Qualcomm Linux 内核

EFI boot stub 允许在不使用传统 EFI 引导加载程序的情况下直接引导 Qualcomm Linux 内核。

当 Qualcomm Linux 内核使用 `CONFIG_EFI_STUB` 内核配置选项编译时，引导固件可以将 EFI 镜像作为可执行文件加载。在这种情况下，固件加载程序会导航到 EFI 镜像 `drivers/firmware/efi/libstub/` 中的 `EFI boot stub` 位置来引导内核。

对于不支持压缩内核的 Arm<sup>®</sup>（Arm64），内核镜像作为可移植可执行（PE）文件格式或通用目标文件格式（COFF）镜像运行，且 EFI stub 被链接到内核中。

有关将 Linux 内核作为 EFI 镜像引导的更多信息，请参阅 [The EFI Boot Stub](https://docs.kernel.org/admin-guide/efi-stub.html)。

## 引导镜像与 ESP 或 boot 分区

ESP 或 boot 分区用作存储 `efi.bin` 镜像的位置，该镜像打包了 systemd-boot 和 UKI。UKI 包括内核镜像、initramfs 和内核命令行参数。

UEFI 固件启动 UEFI 引导加载程序并加载内核引导镜像。ESP 使用 UEFI 规范支持的文件分配表（FAT）文件系统进行格式化。有关 UKI 镜像格式以及基础 Qualcomm<sup>®</sup> Linux<sup>®</sup> meta 层中相应支持的更多信息，请参阅 [UEFI 与 systemd-boot](./uefi-and-systemd-boot)。

## 设备树 blob 选择

所有设备树 blob 都打包为 `dtb.bin` 的一部分。UEFI 为 Qualcomm Linux 内核选择并加载正确的 DTB。

若要了解引导时的 DTB 选择，请参阅[引导时 DTB 选择](./device-tree-architecture#boot-time-dtb-selection-flow)。
