> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.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 作为引导管理器来管理 OS 镜像。

有关更多信息，请参阅 [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 配方使用 `recipes-kernel/images/esp-qcom-image.bb` 配方文件来处理 ESP 镜像生成。

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

## 作为 EFI stub 的 Qualcomm Linux 内核

EFI boot stub 允许直接启动 Qualcomm Linux 内核，而无需传统的 EFI 引导加载程序。

当 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)。
