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

# 执行 VIP 烧写

启用安全启动后，启动过程的每个阶段仅在下一阶段已进行数字签名且签名验证通过时，才会加载并运行下一阶段。整个过程从主引导加载程序（PBL）开始，PBL 加载二级引导加载程序（SBL）或可扩展引导加载程序（XBL）。如果任一阶段的签名检查失败，设备会立即停止。这确保只有受信任的已签名代码才能执行，从而保持设备安全。

验证镜像编程（VIP）增加了另一层控制。它允许你决定在烧写过程中可以向设备发送哪些文件和命令。一旦芯片的熔丝被熔断，安全启动将被永久启用。从那时起，设备仅接受已签名的镜像——任何未签名的镜像都会导致烧写失败。这种安全烧写过程称为 VIP 烧写。

## **创建摘要表**

1. 选择必须通过 VIP 下载的已签名镜像文件。

<img src="https://mintcdn.com/qualcomm-prod/y8h-WRUMxdbs_SSD/System/Security/media-security/k2c-qli-security/vip-flashing-1.jpg?fit=max&auto=format&n=y8h-WRUMxdbs_SSD&q=85&s=16f35d5c4522ae07cf7f594a6cbf7f52" alt="VIP 烧写 - 选择已签名镜像文件" width="727" height="438" data-path="System/Security/media-security/k2c-qli-security/vip-flashing-1.jpg" />

2. 在 **Download** 窗口中选择正确的存储类型和其他参数。

<img src="https://mintcdn.com/qualcomm-prod/y8h-WRUMxdbs_SSD/System/Security/media-security/k2c-qli-security/vip-flashing-2.jpg?fit=max&auto=format&n=y8h-WRUMxdbs_SSD&q=85&s=81340fbf6b62ff9de8526a19c2ea92d5" alt="VIP 烧写 - 选择存储类型和参数" width="728" height="411" data-path="System/Security/media-security/k2c-qli-security/vip-flashing-2.jpg" />

3. 设置所有下载选项。

<img src="https://mintcdn.com/qualcomm-prod/y8h-WRUMxdbs_SSD/System/Security/media-security/k2c-qli-security/vip-flashing-3.jpg?fit=max&auto=format&n=y8h-WRUMxdbs_SSD&q=85&s=1baf3000f512fbaf0e6df25c71177ea2" alt="VIP 烧写 - 配置下载选项" width="729" height="401" data-path="System/Security/media-security/k2c-qli-security/vip-flashing-3.jpg" />

> **注意**
> 确保生成摘要表时使用的配置与 VIP 下载期间使用的配置一致。例如，如果在生成摘要表时选择了 **Erase the entire flash before programming**，则在 VIP 下载期间也应选择相同的选项。

4. 选择 **Create Digest Files**。

<img src="https://mintcdn.com/qualcomm-prod/y8h-WRUMxdbs_SSD/System/Security/media-security/k2c-qli-security/vip-flashing-4.jpg?fit=max&auto=format&n=y8h-WRUMxdbs_SSD&q=85&s=e5201c12d5cbd97a34447097f69c5fac" alt="VIP 烧写 - 创建摘要文件" width="563" height="130" data-path="System/Security/media-security/k2c-qli-security/vip-flashing-4.jpg" />

> 如果该过程成功运行，它会在与构建相同的文件夹中生成摘要文件。

<img src="https://mintcdn.com/qualcomm-prod/y8h-WRUMxdbs_SSD/System/Security/media-security/k2c-qli-security/vip-flashing-5.jpg?fit=max&auto=format&n=y8h-WRUMxdbs_SSD&q=85&s=ca8e3e4bd417a722485139c29a1f0e8e" alt="VIP 烧写 - 摘要文件输出" width="763" height="384" data-path="System/Security/media-security/k2c-qli-security/vip-flashing-5.jpg" />

## **签名组件**

1. 使用启用安全启动时所用的相同密钥，通过以下命令对 `DigestsToSign.bin.mbn` 镜像和 `Device Programmer` 镜像进行签名：

* 签名摘要表：
  > ```text theme={null}
  > <Metabuild>/<chipset>.LE.X.x/common/sectoolsv2/ext/Linux/sectools secure-image --sign /path/to/ DigestsToSign.bin.mbn --image-id=VIP --security-profile <Metabuild>/<chipset>.LE.X.x/common/sectoolsv2/<chipset>_security_profile.xml --oem-id=0x1 --oem-product-id=0xabcd --anti-rollback-version=0x0 --signing-mode=LOCAL --root-certificate=./OEM-KEYS/qpsa_rootca.cer --ca-certificate=./OEM-KEYS/qpsa_attestca.cer --ca-key=./OEM-KEYS/qpsa_attestca.key --outfile  ./signed_images_out/DigestsToSign.bin.mbn
  > ```
* 签名设备编程器：
  > ```text theme={null}
  > <Metabuild>/<chipset>.LE.X.x/common/sectoolsv2/ext/Linux/sectools secure-image --sign /path/to/ prog_firehose_ddr.mbn --image-id= DEVICE-PROGRAMMER --security-profile <Metabuild>/<chipset>.LE.X.x/common/sectoolsv2/<chipset>_security_profile.xml --oem-id=0x1 --oem-product-id=0xabcd --anti-rollback-version=0x0 --signing-mode=LOCAL --root-certificate=./OEM-KEYS/qpsa_rootca.cer --ca-certificate=./OEM-KEYS/qpsa_attestca.cer --ca-key=./OEM-KEYS/qpsa_attestca.key --outfile ./signed_images_out/prog_firehose_ddr.mbn
  > ```

2. 确保以下事项：
   > * 使用与你的安全启动启用配置相匹配的值。例如，将 OEM ID `0x1` 和 OEM 产品 ID `0xabcd` 替换为你的特定值。
   > * 将 `<chipset>_security_profile.xml` 替换为启用安全启动时使用的相同安全配置文件。
   > * 签名密钥必须与启用安全启动时使用的密钥一致。

**注意**

如果目标 `DigestsToSign.bin.mbn` 应为 MBNv6 格式（请根据 `<chipset>_security_profile.xml` 检查），而 PCAT 未生成 MBNv6，则执行以下操作：

1. 从扁平构建文件夹中移除或删除任何现有的摘要文件，如 `ChainedTableOfDigests.bin`、`DIGEST_TABLE.bin` 或 `DigestsToSign.bin.mbn`。
2. 打开 PCAT 应用并进入 **Configuration**，将 **Digest Header Type** 更改为 **DIGEST\_HEADER\_TYPE\_NONE**。
3. 保持所有其他字段不变，重新生成摘要文件。
   > 在输出中，你会看到：`ChainedTableOfDigests.bin`、`DIGEST_TABLE.bin` 和 `DigestsToSign.bin`，而不是 `Not DigestsToSign.bin.mbn`。
4. 运行命令将 .bin 转换为 .bin.mbn。
   ```text theme={null}
   ./sectools mbn-tool generate --data ./DigestsToSign.bin --outfile DigestsToSign.bin.mbn --mbn-version 6
   ```
5. 使用 `--image-id` VIP 对（第 4 步生成的）`DigestsToSign.bin.mbn` 进行签名。

## **使用 PCAT 下载**

1. 在 PCAT 中选择 **Perform VIP download**。

<img src="https://mintcdn.com/qualcomm-prod/y8h-WRUMxdbs_SSD/System/Security/media-security/k2c-qli-security/vip-flashing-6.jpg?fit=max&auto=format&n=y8h-WRUMxdbs_SSD&q=85&s=fa896ce8b6498014d20ad6fb70c4d20c" alt="VIP 烧写 - 选择执行 VIP 下载" width="755" height="414" data-path="System/Security/media-security/k2c-qli-security/vip-flashing-6.jpg" />

> **注意**
> 确保生成摘要表时使用的配置与 VIP 下载期间使用的配置一致。例如，如果在生成摘要表时选择了 **Erase the entire flash before programming**，则在 VIP 下载期间也应选择相同的选项。

2. 连接安全设备。

<img src="https://mintcdn.com/qualcomm-prod/y8h-WRUMxdbs_SSD/System/Security/media-security/k2c-qli-security/vip-flashing-7.jpg?fit=max&auto=format&n=y8h-WRUMxdbs_SSD&q=85&s=507c17e4334bccae5bf293040799c7e9" alt="VIP 烧写 - 连接安全设备" width="734" height="345" data-path="System/Security/media-security/k2c-qli-security/vip-flashing-7.jpg" />

3. 要执行 VIP 下载，请点击 **DOWNLOAD**。

<img src="https://mintcdn.com/qualcomm-prod/y8h-WRUMxdbs_SSD/System/Security/media-security/k2c-qli-security/vip-flashing-8.jpg?fit=max&auto=format&n=y8h-WRUMxdbs_SSD&q=85&s=5ce0f11fb26dd3bf01df75bf7a7a6c40" alt="VIP 烧写 - 点击下载" width="731" height="429" data-path="System/Security/media-security/k2c-qli-security/vip-flashing-8.jpg" />

## **后续步骤**

* 要实施严格的访问控制，请参阅[启用 SELinux](./enable-se-linux)。
* 要确保在启动过程中仅加载经过验证且受信任的应用程序，请参阅[启用 UEFI 安全启动](./enable-uefi-secure-boot)。
