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

# 生成胶囊

胶囊生成工具创建用于更新设备固件的胶囊文件。它们将固件更新打包成可直接安装在硬件上的格式。这些工具可在 Linux 和 Windows 上运行，为不同的开发环境提供灵活性。为保持更新的安全性和可验证性，它们使用 OpenSSL 生成和签署证书。

**运行胶囊的前提条件**

在开始之前，请执行以下操作：

* 生成胶囊。有关脚本和说明，请参阅：[https://github.com/qualcomm/cbsp-boot-utilities/tree/main/uefi\_capsule\_generation](https://github.com/qualcomm/cbsp-boot-utilities/tree/main/uefi_capsule_generation)。
* 在 [https://github.com/qualcomm/cbsp-boot-utilities.git](https://github.com/qualcomm/cbsp-boot-utilities.git) 获取 `cbsp-boot-utilities/uefi_capsule_generation/` 目录的 git clone 链接。

Linux 和 Windows 需要以下工具。

| **Linux**                                                                                                          | **Windows**                                                                                                                                                                                  |
| ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <ul><li>OpenSSL：用于传输层安全（TLS）和安全套接字层（SSL）协议的工具包。</li><li>Python3：一种广泛用于脚本编写和自动化的编程语言。</li><li>Git：版本控制系统。</li></ul> | <ul><li>OpenSSL：用于传输层安全（TLS）和安全套接字层（SSL）协议的工具包。</li><li>Python3：一种广泛用于脚本编写和自动化的编程语言。</li><li>带有 C++ 开发工具的 Visual Studio：Microsoft 的集成开发环境（IDE），包含用于 C++ 开发的工具。</li><li>Git：版本控制系统。</li></ul> |

## **签署胶囊**

要按照[胶囊生成（Capsule Generation）](https://github.com/qualcomm/cbsp-boot-utilities/tree/main/uefi_capsule_generation#3-working-of-the-host-signing-tool)中的说明签署基于胶囊的系统固件更新，请执行以下步骤：

1. **生成签名密钥**：
   * 使用 OpenSSL 命令行实用工具创建新的自签名 X.509 证书链。这涉及生成私钥和相应的公共证书。
   * 系统使用私钥签署固件更新胶囊，UEFI 固件使用公共证书验证签名。
2. **签署固件更新胶囊**：
   * 使用签名密钥签署固件更新胶囊。此过程对胶囊进行身份验证，并确保其未被篡改。
   * 签名过程包括为固件更新有效载荷创建哈希，然后使用私钥加密此哈希以创建数字签名。
   * 将这些证书放置在名为 \`Certificates' 的文件夹中。此文件夹中的示例文件可能包括 `QcFMPCert.pem`、`QcFMPRoot.pub.pem` 和 `QcFMPSub.pub.pem`。
3. **验证胶囊**：
   * UEFI 固件使用公共证书验证胶囊上的数字签名。如果签名有效且与受信任的证书匹配，固件更新过程将继续。
   * 启动 devicetree（DT）在以下节点提供根证书——`QcFMPRoot.cer` 或 `NewRoot.cer`：`/sw/uefi/uefiplat/QcCapsuleRootCert`。
   * 此启动 DT 节点是 UEFI DT 节点，因此其所在的二进制文件取决于具体平台。在 `xbl_config.elf` 同时包含 XBL 和 UEFI DT 节点的平台上，它是 `xbl_config.elf` 的一部分。在 UEFI DT 节点被拆分出来的平台上，它则是 `uefi_dtbs.elf`（或其压缩/KVM 变体）的一部分。有关完整的平台明细，请参阅[启动接口概述](./boot-interfaces-overview)。这两种文件都可以使用 [QDTE](./qdte) 工具进行更新。
   * 只有当根证书已存在于设备上（特别是在此启动 DT 节点中）时，才能执行胶囊更新。
   * 在启动任何胶囊更新过程之前，请确保证书已正确嵌入相应的二进制文件中并在设备上可用。

此验证步骤可确保系统仅应用经过授权的固件更新。
