# Build and flash signed image

Source: [https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html](https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html)

## Modify SecImage configuration file

Source: [https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html](https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html)

For details, see Section [SecImage configuration file](https://docs.qualcomm.com/doc/80-Y8730-8/topic/secimage_configuration_file.html).

## Build signed images

Source: [https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html](https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html)

### Build images with FreeRTOS SDK
				
The following commands show how to build a signed image with build.py, which is provided with the FreeRTOS SDK.

		
Note: Add the `--sign` option in the build command.

		
- Build a signed SBL image.

        python build.py -b qcc730v2_evb11_hostless -o output\qcc730v2_evb11_hostless --image FERMION_SBL --signCopy to clipboard

    After a successful build, the signed SBL image is generated at the following location:

    output\qcc730v2\_evb11\_hostless\FERMION\_SBL\DEBUG\bin\qcc730\sbl\FERMION\_SBL.elf
- Build a signed APP image.

        python build.py -b qcc730v2_evb11_hostless -o output\qcc730v2_evb11_hostless --image FERMION_IOE_QCLI_DEMO --signCopy to clipboard

    After a successful build, the signed APP image is generated at the following location:

    output\qcc730v2\_evb11\_hostless\FERMION\_IOE\_QCLI\_DEMO\DEBUG\bin\qcc730\app\FERMION\_IOE\_QCLI\_DEMO.elf

	
### Build images with Zephyr SDK
				
Use the `west` tool in the Zephyr SDK to build both SBL and APP images. Image signing is integrated into the `west` build process.

		
The following example command builds signed images:

		

    west build -b qcc730mi -t signCopy to clipboard

		
The `-t sign` option instructs the `west` tool to sign the generated images.

		
After a successful build, images are generated in the following locations.

		

| Image type | Image location | Signed image location |
| --- | --- | --- |
| SBL | build\modules\hal\_qcom\qboot\ | zephyr\_sec\_sbl\qcc730\sbl\ |
| APP | build\zephyr\ | zephyr\_sec\_app\qcc730\app\ |

## Flash signed images

Source: [https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html](https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html)

### Flash signed images with FreeRTOS SDK

Source: [https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html](https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html)

The following commands show how to flash a signed image with nvm\_programmer.py, which is in the nvm\_programmer folder in the FreeRTOS SDK.

For details about using nvm\_programmer.py, refer to [QCC730.FR.1.0 Programming Guide (80-Y8730-2)](doc/80-Y8730-2).

### Flash signed images through J‑Link

- Flash a signed SBL image.

        python nvm_programmer.py -s jlink --nvm-name rram -b 0x20a400 -f ..\..\..\output\qcc730v2_evb11_hostless\FERMION_SBL\DEBUG\bin\qcc730\sbl\FERMION_SBL.elf
        python nvm_programmer.py -s jlink --nvm-name rram -b 0x212400 -f ..\..\..\output\qcc730v2_evb11_hostless\FERMION_SBL\DEBUG\bin\qcc730\sbl\FERMION_SBL.elfCopy to clipboard
- Flash a signed APP image. 

        python nvm_programmer.py -s jlink --nvm-name flash -f ..\..\..\output\qcc730v2_evb11_hostless\FERMION_IOE_QCLI_DEMO\DEBUG\bin\qcc730\app\FERMION_IOE_QCLI_DEMO.elf -PCopy to clipboard

### Flash signed image through CH347

- Flash a signed SBL image.

        python nvm_programmer.py -s ch347  --nvm-name rram  -b 0x20a400 -f ..\..\..\output\qcc730v2_evb11_hostless\FERMION_SBL\DEBUG\bin\qcc730\sbl\FERMION_SBL.elf
        python nvm_programmer.py -s ch347 --nvm-name rram -b 0x212400 -f ..\..\..\output\qcc730v2_evb11_hostless\FERMION_SBL\DEBUG\bin\qcc730\sbl\FERMION_SBL.elfCopy to clipboard
- Flash a signed APP image.

        python nvm_programmer.py -s ch347 --nvm-name flash  -f ..\..\..\output\qcc730v2_evb11_hostless\FERMION_IOE_QCLI_DEMO\DEBUG\bin\qcc730\app\FERMION_IOE_QCLI_DEMO.elf -PCopy to clipboard

### Flash signed images with Zephyr SDK

Source: [https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html](https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html)

With the Zephyr SDK, you can use either the `west` tool or the nvm\_programmer.py script to flash signed images through CH347. Although the `west` tool eventually invokes the nvm\_programmer.py script, using the `west` tool is recommended because it simplifies the flashing process for most users. The `west` tool flashes the signed images generated during the build stage, as described in [Build images with Zephyr SDK](https://docs.qualcomm.com/doc/80-Y8730-8/topic/build_and_flash_signed_image.html#build_signed_image__sec_build_images_with_ze_sdk).

### Use the `west` tool to flash signed images

The following example command flashes signed images through CH347:

    west flash -m flash -a --signCopy to clipboard

### Use the nvm\_programmer.py script to flash signed images

The following example commands show how to use the nvm\_programmer.py script to flash signed images through CH347. Note the file path might be different in your environment.

- Flash a signed SBL image.

        python modules\hal\qcom\tools\qprgc\nvm_programmer.py -s ch347 -i modules\hal\qcom\zephyr\blobs\qcc730mi_prg.elf --nvm-name rram -b 0x20a400 -f <PATH\>zephyr_sec_sbl\qcc730\sbl\qcc730mi_sbl.elf --server-script qcc730\boards\qcom\common\qcc730_openocd_ch347.cfgCopy to clipboard
- Flash a signed APP image.

        python modules\hal\qcom\tools\qprgc\nvm_programmer.py -s ch347 -i modules\hal\qcom\zephyr\blobs\qcc730mi_prg.elf --nvm-name flash -b 0x43000 -f <PATH\>\zephyr_sec_app\qcc730\app\zephyr.elf --server-script qcc730\boards\qcom\common\qcc730_openocd_ch347.cfgCopy to clipboard

If the boot image changes from BIN to ELF flash, FDT table should be updated. The following example command shows how to do this:

    python modules\hal\qcom\tools\qprgc\nvm_programmer.py -s ch347 -i modules\hal\qcom\zephyr\blobs\qcc730mi_prg.elf --nvm-name rram -b 0x208000 -f modules\hal\qcom\zephyr\blobs\frn_curr_age_default.bin --server-script qcc730\boards\qcom\common\qcc730_openocd_ch347.cfgCopy to clipboard

Last Published: Feb 10, 2026

[Previous Topic
Generating SHA256‑signed certificates](https://docs.qualcomm.com/bundle/publicresource/80-Y8730-8/topics/generating_sha256_signed_certificates.md) [Next Topic
OTP format and configuration](https://docs.qualcomm.com/bundle/publicresource/80-Y8730-8/topics/otp_format_and_configuration.md)