> ## 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.

# 启动架构

启动架构在启动的每个阶段使用引导加载程序和板级支持包（BSP）镜像。引导加载程序管理每个启动阶段，直到 Linux 内核和应用程序准备就绪并可以运行。

## **引导加载程序**

系统在上电时运行引导加载程序软件，它作为加载操作系统和其他所需应用程序的接口。

Qualcomm 芯片组（包括 Qualcomm Linux 支持的芯片组）使用如下多阶段启动过程：

<img src="https://mintcdn.com/qualcomm-prod/eYaEBFH0xlFq53OY/System/Boot/media/k2c-qli-boot/boot-loader.svg?fit=max&auto=format&n=eYaEBFH0xlFq53OY&q=85&s=1de77bbe1e586f7d71279987cae7ac13" alt="启动架构" width="1100" height="165" data-path="System/Boot/media/k2c-qli-boot/boot-loader.svg" />

### **主引导加载程序（PBL）**

* 为应用程序建立安全信任根（RoT）和安全启动过程。有关更多信息，请参阅[安全启动](https://dragonwingdocs.qualcomm.com/System/Security/security-features)。
* 识别主存储设备并加载称为可扩展引导加载程序（XBL）的二级引导加载程序。
  如果系统在加载 XBL 镜像时遇到任何可恢复的错误，PBL 会进入紧急下载（EDL）模式。有关如何检测 EDL 模式的更多信息，请参阅 [EDL 设备管理器的枚举](./enumeration-of-edl-device-manager)。
* 将 XBL 段加载到启动 SoC 内部存储器中。有关 PBL 如何加载 XBL 段的更多信息，请参阅 [APSS 冷启动流程](./apss-cold-boot-flow)。

### **可扩展引导加载程序（XBL）**

* 初始化硬件、固件镜像、CPU 缓存、MMU、启动设备、PMIC 和 DDR。
* 设置 RAM 转储 USB 驱动程序、USB 充电、热检查、电源管理集成电路（PMIC）和低功耗双倍数据速率（LPDDR）时钟功能。
* 通过 USB 将 RAM 转储收集到主机上。
* 加载并验证 Qualcomm<sup>®</sup> 可信执行环境（Qualcomm TEE）、Qualcomm Hypervisor 和 UEFI 镜像。
* 提供 XBL 配置（`XBL_CFG`），它是冷启动流程的一部分，包含 PMIC 和其他驱动程序设置。
* 为 XBL 提供 Qualcomm 签名的 ELF 段，以初始化外部保护单元（xPU）。
* XBL\_CFG 是一个独立的二进制文件，包含特定于平台的配置和设置。XBL 使用 XBL\_CFG 驱动程序加载并配置所需的设置。该驱动程序使用此二进制文件对 XBL\_CFG 的每项设置提供按需读取访问。

### **统一可扩展固件接口（UEFI）**

<iframe src="https://players.brightcove.net/1414329538001/4JiZQnWhg_default/index.html?videoId=6362756918112" width="100%" height="450" allow="encrypted-media; fullscreen" allowFullScreen title="Boot QLI video" />

UEFI 是操作系统（OS）与平台固件之间的软件接口。

它包含带有平台信息的数据表，以及 OS 及其加载程序可以使用的启动和运行时服务调用。它们共同为启动 OS 和运行 UEFI 应用程序创建了一个标准环境。

Qualcomm 使用 Tianocore EDK-II，这是一个开源实现，可从 [http://www.tianocore.org/edk2/](http://www.tianocore.org/edk2/) 获取，它遵循 [UEFI 规范](https://uefi.org/specs/UEFI/2.10/)。

系统提供以下构建选项：

* Retail 构建：具有最少的调试功能和最优的内存占用，非常适合生产环境。
* Debug 构建：非常适合开发环境，启用了所有调试功能。

有关开发 UEFI 应用程序的信息，请参阅[统一可扩展固件接口（UEFI）](./develop-uefi-applications)。

### **U-Boot**

U-Boot 是一个开源引导加载程序，在 Qualcomm Linux 启动流程中可以用作 EDK II 的替代方案。在此配置中，U-Boot 替代 EDK II，而所有其他阶段保持不变。

U-Boot 提供以下功能：

* 初始化并配置启动所需的平台硬件和外设
* 加载 systemd-boot EFI 镜像并将控制权移交给它，随后由其加载操作系统（OS）
* 为 OS 实现 UEFI 启动服务和有限的运行时服务
* 提供用于系统配置和调试的交互式命令行界面
* 通过使用可信加密签名验证 OS 镜像来支持安全启动机制

有关 U-Boot 的更多详细信息，请参阅 [Qualcomm Linux 上的 U-Boot](./u-boot-on-qualcomm-linux)。

### **systemd-boot OS 管理器**

systemd-boot 是一个执行已配置 EFI 镜像的 UEFI 启动管理器。它仅支持带有 UEFI 固件的系统，并执行以下操作：

* 从 EFI 系统分区（ESP，在 Linux OS 运行时挂载到 `/efi`、`/boot` 或 `/boot/efi`）以及扩展引导加载程序分区（XBOOTLDR，挂载到 `/boot`）加载启动项信息。
  您必须将配置文件片段、内核、初始 RAM 磁盘（initrd）和其他 EFI 镜像放置在 ESP 或 XBOOTLDR 中。
* 读取简单且通用的引导加载程序配置文件，并为每个引导加载程序条目选择一个文件。所有文件都位于 ESP 分区中。

要确保 Qualcomm Linux 内核可以作为 EFI 镜像运行，请使用 `CONFIG_EFI_STUB` 编译选项。

## **后续步骤**

* 有关 EFI boot stub，请参阅 [https://docs.kernel.org/admin-guide/efi-stub.html](https://docs.kernel.org/admin-guide/efi-stub.html)。
* 有关 EFI 分区的示例结构，请参阅 [Qualcomm Linux Yocto 指南中的 systemd-boot](https://dragonwingdocs.qualcomm.com/Key-Documents/Yocto-Guide/configure-and-secure-boot-with-systemd-boot-and-uki)。
