# 刷写镜像

刷写镜像涉及将整个镜像（包括分区、文件系统和数据）写入存储设备。此过程有助于维护设备的功能、安全性和性能。

按照以下步骤刷写镜像：

1. 请参阅 [QFPROM 熔丝](https://docs.qualcomm.com/doc/80-70018-11SC/topic/appendix-fuse-configurations.html#appendix-fuse-configurations)，了解要配置的熔丝列表。
2. 将所有二进制文件替换为已签名的二进制文件，包括 `prog_firehose_ddr.elf`。
3. 要将所有签名的二进制文件刷新到设备，请参阅 [Qualcomm Linux 编译指南 ➝ 使用 QSC CLI 编译](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/build_from_source_QSC_CLI.html)。
4. 生成签名镜像和 `sec.elf` 后，启用安全启动：

    1. 首先刷写除 `sec.elf` 以外的所有已签名镜像，并确保设备成功启动。
    2. 使用 [Qualcomm Linux 编译指南 ➝ 刷写镜像](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/flash_images.html)中的刷写程序刷写签名镜像且 `sec.elf`。
    3. 使用[调通 → 已验证安全启动](https://docs.qualcomm.com/doc/80-70018-11SC/topic/bring-up.html#section-bringup-verify-secure-boot-label)验证是否启用了安全启动。
5. 启用安全启动后，设备希望使用称为验证镜像编程 (VIP) 的安全编程方法刷写镜像。在此版本中，您可以使用以下变通办法编程程序 (`prog_firehose_ddr.elf`) 镜像禁用 VIP，继续在安全设备上刷写镜像（`<>/BOOT.MXF.1.0.c1/boot_images/boot/QcomPkg/Library/DevPrgLib/devprg_transfer.c`）：
6. 不论安全启动启用检查为何，在以下函数中将 `vip->state` 设置为 `VIP_DISABLED`：

int devprg_transfer_init(void)
        {
          int secboot, result;
          struct vip_data *vip = &vip_data;
          devprg_init_vip_state();
          secboot = devprg_is_secure_boot_enabled();
        //  if (secboot == 0) /*comment this to set vip state to VIP_DISABLED
            vip->state = VIP_DISABLED;
          result = devprg_transport_init();
          return result;
        }
        Copy to clipboard
7. 请参阅 [Qualcomm Linux 编译指南 ➝ GitHub 工作流程（固件和附加功能）](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/build_addn_info.html)，以便重建 `prog_firehose_ddr.elf`。
8. 如果未使用 PCAT 刷写任何 PIL 签名镜像，请按照以下步骤使用 SCP 手动推送 PIL 镜像：

push adsp, cdsp, modem, wlan, ipa pil split binaries
        Copy to clipboard

    有关说明，请参阅 [Qualcomm Linux 构建指南 ➝ 操作方法 ➝ 使用 SSH 登录](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/how_to.html#use-ssh)。

    1. 将签名输出中生成的 PIL split bins 和 `.mdt` 文件复制并替换至 `<<QCM6490.LE.x.x>/common/build/ufs/bin/QCM6490_fw/lib/firmware/qcom/qcm6490/` 目录。
    2. 通过 SSH 以 root 用户的身份连接到设备。有关说明，请参阅 [Qualcomm Linux 构建指南 ➝ 操作方法 ➝ 使用 SSH 登录](https://docs.qualcomm.com/bundle/publicresource/topics/80-70017-254/how_to.html#use-ssh)。

        运行以下命令：

mount -o rw,remount  /
            scp <QCM6490.LE.x.x>/common/build/ufs/bin/QCM6490_fw/lib/firmware/qcom/qcm6490/. root@<IP_address>:/lib/firmware/qcom/qcm6490/
            Push gfx (a660_zap) pil split binaries, a660_zap.mdt and a660_zap.mbn from signed outout
            scp <a660_zap signed output folder>/. root@<IP_address>:/lib/firmware/
            Push signed Venus binary:
            scp vpu20_1v.mbn root@<IP_address>:/lib/firmware/qcom/vpu-2.0/
            reboot
            Copy to clipboard
9. 要检查 PIL 加载是否成功，请在 dmesg 中检查以下日志：

[    7.597009] remoteproc remoteproc0: Booting fw image qcom/qcs6490/modem.mdt, size 6052
        [    8.095883] remoteproc remoteproc0: remote processor 4080000.remoteproc is now up
        [    5.938938] remoteproc remoteproc1: Booting fw image qcom/qcs6490/wpss.mdt, size 4612
        [    6.088524] remoteproc remoteproc1: remote processor 8a00000.remoteproc is now up
        [    5.951047] remoteproc remoteproc2: Booting fw image qcom/qcs6490/adsp.mdt, size 6852
        [    6.107310] remoteproc remoteproc2: remote processor 3000000.remoteproc is now up
        [    5.977966] remoteproc remoteproc3: Booting fw image qcom/qcs6490/cdsp.mdt, size 5252
        [    6.135802] remoteproc remoteproc3: remote processor a300000.remoteproc is now up
        Copy to clipboard

## 后续步骤

- 要执行严格的访问控制，请参阅[启用 SELinux](https://docs.qualcomm.com/doc/80-70018-11SC/topic/enable-selinux.html#enable-selinux)。
- 要创建加密密钥和证书以验证和加密通信，请参阅[生成密钥和证书](https://docs.qualcomm.com/doc/80-70018-11SC/topic/generate-key-and-certificate.html#generate-key-and-certificate)。

Last Published: Apr 29, 2025

[Previous Topic
生成已签名的 sec.elf 镜像](https://docs.qualcomm.com/bundle/publicresource/80-70018-11SC/topics/generate-signed-sec-elf-image.md) [Next Topic
启用 SELinux](https://docs.qualcomm.com/bundle/publicresource/80-70018-11SC/topics/enable-selinux.md)