Skip to content

Conversation

@tomchy
Copy link
Contributor

@tomchy tomchy commented Oct 14, 2025

Add A/B sample variant, that describe multi-image FW through a MCUboot manifest with digests.

@NordicBuilder NordicBuilder added doc-required PR must not be merged without tech writer approval. manifest changelog-entry-required Update changelog before merge. Remove label if entry is not needed or already added. labels Oct 14, 2025
@NordicBuilder
Copy link
Contributor

NordicBuilder commented Oct 14, 2025

The following west manifest projects have changed revision in this Pull Request:

Name Old Revision New Revision Diff
mcuboot nrfconnect/sdk-mcuboot@459288d nrfconnect/sdk-mcuboot#560 nrfconnect/sdk-mcuboot#560/files

DNM label due to: 1 project with PR revision

Note: This message is automatically posted and updated by the Manifest GitHub Action.

@NordicBuilder
Copy link
Contributor

NordicBuilder commented Oct 14, 2025

CI Information

To view the history of this post, click the 'edited' button above
Build number: 23

Inputs:

Sources:

sdk-nrf: PR head: 902f6f21868031cc2d1924950a94c14c855dd479
mcuboot: PR head: 49908e88d5ea3d18029f3fdde58a5054aac30ad3

more details

sdk-nrf:

PR head: 902f6f21868031cc2d1924950a94c14c855dd479
merge base: ce5938942331190b4aefdcb52ee1b3538d944ed4
target head (main): d5dea1aa89ccea24269f12d3777442967a358e93
Diff

mcuboot:

PR head: 49908e88d5ea3d18029f3fdde58a5054aac30ad3
merge base: 459288d6a13cede9fa09e314b21a979a6cc6e3f2
target head (main): 0d263faf6e55a697ee336f2fbef0af095802f979
Diff

Github labels

Enabled Name Description
ci-disabled Disable the ci execution
ci-all-test Run all of ci, no test spec filtering will be done
ci-force-downstream Force execution of downstream even if twister fails
ci-run-twister Force run twister
ci-run-zephyr-twister Force run zephyr twister
List of changed files detected by CI (61)
CODEOWNERS
bootloader
│  ├── mcuboot
│  │  ├── boot
│  │  │  ├── boot_serial
│  │  │  │  ├── src
│  │  │  │  │  │ boot_serial_encryption.c
│  │  │  ├── bootutil
│  │  │  │  ├── CMakeLists.txt
│  │  │  │  ├── include
│  │  │  │  │  ├── bootutil
│  │  │  │  │  │  ├── bootutil.h
│  │  │  │  │  │  ├── enc_key.h
│  │  │  │  │  │  ├── image.h
│  │  │  │  │  │  │ mcuboot_manifest.h
│  │  │  │  ├── src
│  │  │  │  │  ├── bootutil_area.c
│  │  │  │  │  ├── bootutil_area.h
│  │  │  │  │  ├── bootutil_img_hash.c
│  │  │  │  │  ├── bootutil_loader.c
│  │  │  │  │  ├── bootutil_loader.h
│  │  │  │  │  ├── bootutil_misc.c
│  │  │  │  │  ├── bootutil_misc.h
│  │  │  │  │  ├── bootutil_priv.h
│  │  │  │  │  ├── bootutil_public.c
│  │  │  │  │  ├── ed25519_psa.c
│  │  │  │  │  ├── encrypted.c
│  │  │  │  │  ├── image_validate.c
│  │  │  │  │  ├── loader.c
│  │  │  │  │  ├── loader_manifest_xip.c
│  │  │  │  │  ├── ram_load.c
│  │  │  │  │  ├── swap_misc.c
│  │  │  │  │  ├── swap_offset.c
│  │  │  │  │  │ swap_scratch.c
│  │  │  ├── espressif
│  │  │  │  │ CMakeLists.txt
│  │  │  ├── zephyr
│  │  │  │  ├── CMakeLists.txt
│  │  │  │  ├── Kconfig
│  │  │  │  ├── decompression.c
│  │  │  │  ├── firmware_loader_bm.c
│  │  │  │  ├── include
│  │  │  │  │  ├── mcuboot_config
│  │  │  │  │  │  │ mcuboot_config.h
│  │  ├── docs
│  │  │  │ design.md
│  │  ├── scripts
│  │  │  ├── imgtool
│  │  │  │  ├── image.py
│  │  │  │  │ main.py
│  │  ├── sim
│  │  │  ├── Cargo.toml
│  │  │  ├── mcuboot-sys
│  │  │  │  ├── Cargo.toml
│  │  │  │  │ build.rs
│  │  │  ├── src
│  │  │  │  ├── image.rs
│  │  │  │  │ lib.rs
│  │  │  ├── tests
│  │  │  │  │ core.rs
cmake
│  ├── sysbuild
│  │  ├── image_signing.cmake
│  │  │ mcuboot_manifest.cmake
samples
│  ├── dfu
│  │  ├── ab_split
│  │  │  ├── CMakeLists.txt
│  │  │  ├── Kconfig
│  │  │  ├── README.rst
│  │  │  ├── boards
│  │  │  │  │ nrf54h20dk_nrf54h20_cpuapp.overlay
│  │  │  ├── prj.conf
│  │  │  ├── sample.yaml
│  │  │  ├── src
│  │  │  │  ├── ab_utils.c
│  │  │  │  ├── ab_utils.h
│  │  │  │  │ main.c
│  │  │  ├── sysbuild.conf
│  │  │  ├── sysbuild
│  │  │  │  ├── mcuboot
│  │  │  │  │  ├── boards
│  │  │  │  │  │  │ nrf54h20dk_nrf54h20_cpuapp.overlay
│  │  │  │  │  │ prj.conf
│  │  │  │  │ nrf54h20dk_nrf54h20_memory_map.dtsi
subsys
│  ├── bootloader
│  │  │ Kconfig
│  ├── mgmt
│  │  ├── mcumgr
│  │  │  ├── grp
│  │  │  │  ├── img_mgmt
│  │  │  │  │  ├── src
│  │  │  │  │  │  ├── img_mgmt.c
│  │  │  │  │  │  │ img_mgmt_state.c
sysbuild
│  ├── CMakeLists.txt
│  │ Kconfig.mcuboot
west.yml

Outputs:

Toolchain

Version: df3cc9d822
Build docker image: docker-dtr.nordicsemi.no/sw-production/ncs-build:df3cc9d822_e595b21c39

Test Spec & Results: ✅ Success; ❌ Failure; 🟠 Queued; 🟡 Progress; ◻️ Skipped; ⚠️ Quarantine

  • ◻️ Toolchain - Skipped: existing toolchain is used
  • ✅ Build twister - Skipped: Skipping Build & Test as it succeeded in a previous run: 22
  • ❌ Integration tests
    • ✅ test-sdk-audio - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ desktop52_verification
    • ✅ test-fw-nrfconnect-apps - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test_ble_nrf_config
    • ✅ test-fw-nrfconnect-ble_mesh - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-ble_samples - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-chip - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-nfc - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-nrf-iot_libmodem-nrf - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-nrf-iot_zephyr_lwm2m - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-nrf-iot_samples - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-nrf-iot_lwm2m - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-nrf-iot_thingy91 - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-nrf_crypto - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-rpc - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-rs - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-fem - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-tfm - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-thread-main - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-sdk-find-my - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-nrf_lrcs_positioning - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-sdk-wifi - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-low-level - Skipped: Job was skipped as it succeeded in a previous run
    • ❌ test-sdk-mcuboot
    • ✅ test-sdk-dfu - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-fw-nrfconnect-ps-main - Skipped: Job was skipped as it succeeded in a previous run
    • ✅ test-secdom-samples-public - Skipped: Job was skipped as it succeeded in a previous run
    • ⚠️ test-fw-nrfconnect-nrf-iot_cloud

Note: This message is automatically posted and updated by the CI

@NordicBuilder
Copy link
Contributor

NordicBuilder commented Oct 14, 2025

Memory footprint analysis revealed the following potential issues

applications.hpf.gpio.icbmsg[nrf54l15dk/nrf54l15/cpuflpr]: High RAM usage: 12744[B] - link (cc: @nrfconnect/ncs-ll-ursus)
applications.hpf.gpio.icbmsg[nrf54l15dk/nrf54l15/cpuflpr]: High ROM usage: 9492[B] - link (cc: @nrfconnect/ncs-ll-ursus)
applications.hpf.gpio.icmsg[nrf54l15dk/nrf54l15/cpuflpr]: High RAM usage: 9102[B] - link (cc: @nrfconnect/ncs-ll-ursus)
applications.hpf.gpio.icmsg[nrf54l15dk/nrf54l15/cpuflpr]: High ROM usage: 5858[B] - link (cc: @nrfconnect/ncs-ll-ursus)

Note: This message is automatically posted and updated by the CI (latest/sdk-nrf/PR-25036/22)

@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from b649761 to 40e458e Compare October 17, 2025 15:19
@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from 40e458e to f89b505 Compare October 22, 2025 13:53
@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from f89b505 to 85cf3c7 Compare October 22, 2025 13:55
@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch 2 times, most recently from 4d98c2a to c194719 Compare October 24, 2025 09:12
@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from c194719 to 5a78c42 Compare November 4, 2025 16:10
Copilot AI review requested due to automatic review settings November 4, 2025 16:10
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds A/B update sample variant demonstrating multi-image firmware updates through MCUboot manifests with digests, enabling transactional updates of multiple images atomically. The implementation introduces manifest-based dependency management for split-slot DirectXIP configurations.

Key Changes:

  • Adds manifest-based transactional update support in MCUboot configuration
  • Implements a new A/B split-slot sample demonstrating separated application and radio core images
  • Updates image management code to handle manifest verification and slot selection

Reviewed Changes

Copilot reviewed 24 out of 24 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
west.yml Updates Zephyr and MCUboot revisions to pull requests supporting manifest features
sysbuild/Kconfig.mcuboot Adds Kconfig options for manifest-based transactional updates
sysbuild/CMakeLists.txt Implements manifest image target assignment and configuration propagation
subsys/mgmt/mcumgr/grp/img_mgmt/src/img_mgmt_state.c Modifies slot state handling to use manifest image when manifest updates enabled
subsys/mgmt/mcumgr/grp/img_mgmt/src/img_mgmt.c Adds full img_mgmt implementation with manifest verification support
subsys/mgmt/mcumgr/grp/img_mgmt/Kconfig Adds QSPI XIP split image configuration option
subsys/mgmt/mcumgr/grp/img_mgmt/CMakeLists.txt Updates build to include new img_mgmt.c and marks upstream file as header-only
subsys/bootloader/Kconfig Adds application-side Kconfig options for manifest updates
scripts/ci/license_allow_list.yaml Adds img_mgmt.c to Apache-2.0 license allowlist
samples/dfu/ab_split/* New sample demonstrating A/B updates with separated slots and manifest-based dependencies
cmake/sysbuild/mcuboot_manifest.cmake Implements manifest YAML generation for primary and secondary slots
cmake/sysbuild/image_signing.cmake Adds manifest appending to imgtool signing process

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from 5a78c42 to 732b90c Compare November 4, 2025 16:29
Copilot AI review requested due to automatic review settings November 5, 2025 11:04
@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from 732b90c to 0dcb062 Compare November 5, 2025 11:04
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 24 out of 24 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from 0dcb062 to 4a63b81 Compare November 5, 2025 11:51
Copilot AI review requested due to automatic review settings November 5, 2025 15:42
@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from 4a63b81 to 886a5ae Compare November 5, 2025 15:42
@tomchy tomchy requested a review from a team as a code owner November 6, 2025 16:33
Copilot AI review requested due to automatic review settings November 6, 2025 16:33
@tomchy tomchy requested review from a team as code owners November 6, 2025 16:33
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 24 out of 24 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from cf4a0ad to e2d118b Compare November 7, 2025 12:00
Copilot AI review requested due to automatic review settings November 7, 2025 12:03
@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from e2d118b to e8ec290 Compare November 7, 2025 12:03
@NordicBuilder NordicBuilder removed the changelog-entry-required Update changelog before merge. Remove label if entry is not needed or already added. label Nov 7, 2025
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 25 out of 25 changed files in this pull request and generated 6 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from e8ec290 to 3329f5a Compare November 7, 2025 15:03
Copilot AI review requested due to automatic review settings November 7, 2025 15:10
@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from 3329f5a to a6ca004 Compare November 7, 2025 15:10
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 25 out of 25 changed files in this pull request and generated 2 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from a6ca004 to cf9e1a6 Compare November 7, 2025 15:14
Copilot AI review requested due to automatic review settings November 12, 2025 14:25
@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from cf9e1a6 to e6c9db7 Compare November 12, 2025 14:25
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 22 out of 22 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from e6c9db7 to f13c5c6 Compare November 12, 2025 14:36
Copilot AI review requested due to automatic review settings November 12, 2025 15:41
@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from f13c5c6 to 0832608 Compare November 12, 2025 15:41
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 22 out of 22 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (1)

sysbuild/Kconfig.mcuboot:259

  • [nitpick] There are two consecutive blank lines before 'endmenu'. Remove one blank line to maintain consistent spacing.

endmenu

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from 0832608 to ba01711 Compare November 12, 2025 15:51
Add a possibility to automatically generate a MCUboot manifest with all
expected image's digests.

Signed-off-by: Tomasz Chyrowicz <tomasz.chyrowicz@nordicsemi.no>
Add routines to parse and check manifest state.

Signed-off-by: Tomasz Chyrowicz <tomasz.chyrowicz@nordicsemi.no>
Add a variant of the A/B sample that presents how to perform A/B updates
in a system, where application and radio images uses separate images and
slots.

Ref: NCSDK-35733

Signed-off-by: Tomasz Chyrowicz <tomasz.chyrowicz@nordicsemi.no>
Copilot AI review requested due to automatic review settings November 13, 2025 08:18
@tomchy tomchy force-pushed the feature/mcuboot/NCSDK-NONE_Transaction_manifest branch from ba01711 to 902f6f2 Compare November 13, 2025 08:18
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Copilot reviewed 22 out of 22 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

CONFIG_NRF_SECURITY=y
CONFIG_MULTITHREADING=y


Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Empty line at line 8 appears unnecessary and should be removed for consistency.

Suggested change

Copilot uses AI. Check for mistakes.
This file should be uploaded to the primary slot when the device is running from slot B.
* :file:`build/ipc_radio/zephyr/zephyr.signed.bin` - Contains the slot A of the radio image.
This file should be uploaded to the primary slot when the device is running from slot B.

Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The documentation states that individual image files should be uploaded separately, but the manifest-based update approach requires both application and radio images to be updated together as a set. This could mislead users. Consider clarifying that both files for a given slot must be uploaded together to satisfy the manifest requirements.

Suggested change
.. note::
When using manifest-based updates (with :kconfig:option:`SB_CONFIG_MCUBOOT_MANIFEST_UPDATES=y`), both the application and radio image files for a given slot must be uploaded together as a set.
Uploading only one file will not satisfy the manifest requirements and may result in an incomplete or failed update.
Always ensure that both files for the target slot are uploaded together during the update process.

Copilot uses AI. Check for mistakes.

endif # NCS_MCUBOOT_MANIFEST_UPDATES


Copy link

Copilot AI Nov 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Extra blank line at the end of file (line 213) should be removed.

Suggested change

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

DNM doc-required PR must not be merged without tech writer approval. manifest manifest-mcuboot manifest-zephyr

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants