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

# 生成 capsule

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

**运行 capsule 的前提条件**

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

* 生成 capsule。有关脚本和说明，请参阅：[https://github.com/quic/cbsp-boot-utilities/tree/main/uefi\_capsule\_generation](https://github.com/quic/cbsp-boot-utilities/tree/main/uefi_capsule_generation)。
* 在 [https://github.com/quic/cbsp-boot-utilities.git](https://github.com/quic/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**

要按照 [Tianocore GitHub](https://github.com/quic/cbsp-boot-utilities/tree/main/uefi_capsule_generation#3-working-of-the-host-signing-tool) 中的说明签署基于 capsule 的系统固件更新，请执行以下步骤：

1. **生成签名密钥**：
   * 使用 OpenSSL 命令行实用程序创建新的自签名 X.509 证书链。这包括生成私钥和相应的公共证书。
   * 系统使用私钥签署固件更新 capsule，UEFI 固件使用公共证书验证签名。
2. **签署固件更新 capsule**：
   * 使用签名密钥签署固件更新 capsule。此过程对 capsule 进行身份验证，并确保其未被篡改。
   * 签名过程包括创建固件更新负载的哈希值，然后使用私钥加密该哈希值以创建数字签名。
   * 将这些证书放在名为 \`Certificates' 的文件夹中。该文件夹中的示例文件可能包括 `QcFMPCert.pem`、`QcFMPRoot.pub.pem` 和 `QcFMPSub.pub.pem`。
3. **验证 capsule**：
   * UEFI 固件使用公共证书验证 capsule 上的数字签名。如果签名有效且与受信任的证书匹配，固件更新过程将继续进行。
   * 启动 devicetree（DT）在以下节点提供根证书——`QcFMPRoot.cer` 或 `NewRoot.cer`：`/sw/uefi/uefiplat/QcCapsuleRootCert`。
   * 该启动 DT 是 `xbl_config.elf` 二进制文件的一部分，可以使用 [QDTE](./qdte) 工具进行更新。
   * 只有当根证书已存在于设备上（具体而言，位于 xbl\_config.elf 中的启动 DT 节点内）时，才能执行 capsule 更新。
   * 在启动任何 capsule 更新过程之前，请确保证书已正确嵌入二进制文件（xbl\_config.elf）中并在设备上可用。

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