Migration to sysbuild results in failure to boot

I'm attempting to migration from using MCUBOOT as a child image to sysbuild using SDK 2.8.0.

Everything boots fine when building using a child image, but when switching to sysbuild I initially get a warning that BOOT_MAX_IMG_SECTORS is too small, followed by an error from MUCBOOT that the image is invalid.

If I increase BOOT_MAX_IMG_SECTORS to 512, the bootloader appears to not even start.  I never get as far as seeing the message "Starting bootloader".

As far as I can tell, the configurations are virtually identical, I've just moved the configurations into the 'sysbuild' folder.

Here is a copy of build_sysbuild/zephyr/.config

SB_CONFIG_BOARD="nrf52840dk"
SB_CONFIG_BOARD_REVISION=""
SB_CONFIG_BOARD_NRF52840DK=y
SB_CONFIG_BOARD_NRF52840DK_NRF52840=y
SB_CONFIG_BOARD_QUALIFIERS="nrf52840"
SB_CONFIG_SOC="nrf52840"
SB_CONFIG_SOC_SERIES="nrf52"
SB_CONFIG_SOC_FAMILY="nordic_nrf"
SB_CONFIG_SOC_FAMILY_NORDIC_NRF=y
SB_CONFIG_SOC_SERIES_NRF52X=y
SB_CONFIG_SOC_NRF52840=y
SB_CONFIG_SOC_NRF52840_QIAA=y

#
# Sysbuild image configuration
#

#
# Modules
#

#
# Available modules.
#

#
# nrf (C:/ncs/v2.8.0/nrf)
#
SB_CONFIG_PARTITION_MANAGER=y
SB_CONFIG_PM_MCUBOOT_PAD=0x200
SB_CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y
# SB_CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK is not set
SB_CONFIG_BUILD_OUTPUT_BIN=y
SB_CONFIG_BUILD_OUTPUT_HEX=y
SB_CONFIG_APPCORE_REMOTE_BOARD_TARGET_CPUCLUSTER="cpuapp"
SB_CONFIG_APPCORE_REMOTE_DOMAIN="CPUAPP"

#
# Secure Bootloader
#
# SB_CONFIG_SECURE_BOOT_APPCORE is not set
# end of Secure Bootloader

#
# MCUboot configuration
#
SB_CONFIG_MCUBOOT_MAX_UPDATEABLE_IMAGES=4
SB_CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER=0
SB_CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER=-1
SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER=-1
SB_CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER=-1
SB_CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER=-1
SB_CONFIG_MCUBOOT_MIN_UPDATEABLE_IMAGES=1
SB_CONFIG_MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES=0
SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES=1
SB_CONFIG_MCUBOOT_ADDITIONAL_UPDATEABLE_IMAGES=0
SB_CONFIG_MCUBOOT_APP_SYNC_UPDATEABLE_IMAGES=y
# end of MCUboot configuration

SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_BUILD=y
SB_CONFIG_DFU_MULTI_IMAGE_PACKAGE_APP=y
SB_CONFIG_SUPPORT_QSPI_XIP=y
# SB_CONFIG_BT_FAST_PAIR is not set
SB_CONFIG_DFU_ZIP=y
SB_CONFIG_DFU_ZIP_APP=y
# SB_CONFIG_DFU_ZIP_BLUETOOTH_MESH_METADATA is not set
SB_CONFIG_MATTER=y
# SB_CONFIG_MATTER_FACTORY_DATA_GENERATE is not set
SB_CONFIG_MATTER_OTA=y
SB_CONFIG_MATTER_OTA_IMAGE_FILE_NAME="matter.ota"
SB_CONFIG_SUIT_BASE_MANIFEST_VARIANT="matter/v1"

#
# Wi-Fi
#
# SB_CONFIG_WIFI_NRF70 is not set
# end of Wi-Fi

#
# SUIT
#
# SB_CONFIG_SUIT_ENVELOPE is not set
# SB_CONFIG_SUIT_BUILD_RECOVERY is not set
# SB_CONFIG_SUIT_BUILD_FLASH_COMPANION is not set
# end of SUIT

#
# SDP
#
# SB_CONFIG_SDP is not set
# end of SDP

# SB_CONFIG_APPROTECT_USE_UICR is not set
# SB_CONFIG_APPROTECT_LOCK is not set
SB_CONFIG_APPROTECT_NO_SYSBUILD=y
SB_CONFIG_ZEPHYR_NRF_MODULE=y
# end of nrf (C:/ncs/v2.8.0/nrf)

SB_CONFIG_ZEPHYR_MCUBOOT_MODULE=y
SB_CONFIG_ZEPHYR_MBEDTLS_MODULE=y
SB_CONFIG_ZEPHYR_OBERON_PSA_CRYPTO_MODULE=y
SB_CONFIG_ZEPHYR_TRUSTED_FIRMWARE_M_MODULE=y
SB_CONFIG_ZEPHYR_PSA_ARCH_TESTS_MODULE=y
SB_CONFIG_ZEPHYR_SOC_HWMV1_MODULE=y
SB_CONFIG_ZEPHYR_CJSON_MODULE=y
SB_CONFIG_ZEPHYR_AZURE_SDK_FOR_C_MODULE=y
SB_CONFIG_ZEPHYR_CIRRUS_LOGIC_MODULE=y
SB_CONFIG_ZEPHYR_OPENTHREAD_MODULE=y
SB_CONFIG_ZEPHYR_SUIT_GENERATOR_MODULE=y
SB_CONFIG_ZEPHYR_SUIT_PROCESSOR_MODULE=y
SB_CONFIG_ZEPHYR_MEMFAULT_FIRMWARE_SDK_MODULE=y
SB_CONFIG_ZEPHYR_COREMARK_MODULE=y
SB_CONFIG_ZEPHYR_CANOPENNODE_MODULE=y
SB_CONFIG_ZEPHYR_CHRE_MODULE=y
SB_CONFIG_ZEPHYR_LZ4_MODULE=y
SB_CONFIG_ZEPHYR_NANOPB_MODULE=y
SB_CONFIG_ZEPHYR_TF_M_TESTS_MODULE=y
SB_CONFIG_ZEPHYR_ZSCILIB_MODULE=y
SB_CONFIG_ZEPHYR_CMSIS_MODULE=y
SB_CONFIG_ZEPHYR_CMSIS_DSP_MODULE=y
SB_CONFIG_ZEPHYR_CMSIS_NN_MODULE=y
SB_CONFIG_ZEPHYR_FATFS_MODULE=y
SB_CONFIG_ZEPHYR_HAL_NORDIC_MODULE=y
SB_CONFIG_ZEPHYR_HAL_ST_MODULE=y
SB_CONFIG_ZEPHYR_HAL_WURTHELEKTRONIK_MODULE=y
SB_CONFIG_ZEPHYR_HOSTAP_MODULE=y
SB_CONFIG_ZEPHYR_LIBMETAL_MODULE=y
SB_CONFIG_ZEPHYR_LIBLC3_MODULE=y
SB_CONFIG_ZEPHYR_LITTLEFS_MODULE=y
SB_CONFIG_ZEPHYR_LORAMAC_NODE_MODULE=y
SB_CONFIG_ZEPHYR_LVGL_MODULE=y
SB_CONFIG_ZEPHYR_MIPI_SYS_T_MODULE=y
SB_CONFIG_ZEPHYR_NRF_HW_MODELS_MODULE=y
SB_CONFIG_ZEPHYR_OPEN_AMP_MODULE=y
SB_CONFIG_ZEPHYR_PICOLIBC_MODULE=y
SB_CONFIG_ZEPHYR_SEGGER_MODULE=y
SB_CONFIG_ZEPHYR_TINYCRYPT_MODULE=y
SB_CONFIG_ZEPHYR_UOSCORE_UEDHOC_MODULE=y
SB_CONFIG_ZEPHYR_ZCBOR_MODULE=y
SB_CONFIG_ZEPHYR_NRFXLIB_MODULE=y
SB_CONFIG_ZEPHYR_CONNECTEDHOMEIP_MODULE=y

#
# Unavailable modules, please install those via the project manifest.
#
# end of Modules

# SB_CONFIG_WARN_EXPERIMENTAL is not set
SB_CONFIG_WARN_DEPRECATED=y
SB_CONFIG_SUPPORT_BOOTLOADER=y
SB_CONFIG_SUPPORT_BOOTLOADER_MCUBOOT_ZEPHYR=y
# SB_CONFIG_BOOTLOADER_NONE is not set
SB_CONFIG_BOOTLOADER_MCUBOOT=y
# SB_CONFIG_MCUBOOT_MODE_SINGLE_APP is not set
# SB_CONFIG_MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH is not set
SB_CONFIG_MCUBOOT_MODE_SWAP_SCRATCH=y
# SB_CONFIG_MCUBOOT_MODE_OVERWRITE_ONLY is not set
# SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP is not set
# SB_CONFIG_MCUBOOT_MODE_DIRECT_XIP_WITH_REVERT is not set
# SB_CONFIG_MCUBOOT_MODE_RAM_LOAD is not set
# SB_CONFIG_MCUBOOT_MODE_FIRMWARE_UPDATER is not set
SB_CONFIG_SIGNATURE_TYPE="RSA"
# SB_CONFIG_BOOT_SIGNATURE_TYPE_NONE is not set
SB_CONFIG_BOOT_SIGNATURE_TYPE_RSA=y
# SB_CONFIG_BOOT_SIGNATURE_TYPE_ECDSA_P256 is not set
# SB_CONFIG_BOOT_SIGNATURE_TYPE_ED25519 is not set
SB_CONFIG_BOOT_SIGNATURE_KEY_FILE="C:/ncs/v2.8.0/bootloader/mcuboot/root-rsa-2048.pem"
# SB_CONFIG_BOOT_ENCRYPTION is not set

#
# Build options
#
# SB_CONFIG_COMPILER_WARNINGS_AS_ERRORS is not set
# end of Build options

Please let me know if there's anything else I can provide.

Thanks,

Chris

  • Hi Chris,

    I should also have mentioned in my previous comment that 512 is way too many sectors. This will significantly increase the size of the image trailer and leave less room for the application. I don't have an explanation for why this causes the boot failure though. But from your previous ticket, I see that each MCUboot slot is 944 kB, which means that BOOT_MAX_IMG_SECTORS must be set to 256 in your case. Please try with this setting. If it still fails after that, it would be good if you could attach a debugger and try to determine exactly where the program execution hangs. 

    Best regards,

    Vidar

  • Thanks Vidar.

    The reason I used the example of 512 is because at 256, I still see the same warning about needing to increase BOOT_MAX_IMG_SECTORS (except of course it says 256 rather than 128.)  At 512 the warning goes away, but silently fails to boot.

    I was hoping to avoid needing to debug the bootloader, but unless you see something that stands out in the configuration, it sounds like that may be the only way of figuring out where it is ending up.

    Please let me know if you have any other ideas, otherwise I'll work on getting a debugger attached as soon as I can.

    Thanks,

    Chris

  • Hi Chris,

    I see. Yes, my other suggestion is to “diff” the generated config file at build/mcuboot/zephyr/.config against your previous working one. I would also recommend doing the same with the build/mcuboot/zephyr/zephyr.dts to check whether the QSPI flash configuration and everything else in the devictree is kept the same.

  • Hi Vidar,

    I take back my previous message  I just tried with 256 and it does indeed cause the other problem I was describing, where the bootloader fails to start.  There is absolutely zero output from the bootloader, it doesn't even appear to get far enough to initialize the CDC ACM console.

    We have a SERIAL_WAIT_FOR_DFU_TIMEOUT of 2500, but the boot loader fails way before that, so the failure isn't transitioning from the bootloader to our app, but it's somewhere very early in the bootloader initializing.

    Any thoughts?

    Thanks,

    Chris

  • Hi Chris,

    I see now that the main stack is only 1024 in your configuration (CONFIG_MAIN_STACK_SIZE) which could explain an early crash. Default is 10240. There may be other differences too.

    Best regards,

    Vidar

Related