Hello,
I am working on a project with the nrf5340, on ncs version 2.1.2, though I plan to bring it into v2.2.0.
I have been working on this sample on the side because Multi-Image DFU is a must for my application. While there are issues unresolved on the thread, (about iOS being faulty when running DFU more than once), it is the only sample that has uploaded 2 images through BLE and successfully updated the device. However, I have run into some complications in implementing this code into my firmware.
The sample structure is very simple:
mcu_smp_ble_simultaneous:
- child_image
-mcuboot.conf
- src
- main.c
- bluetooth_smp.c
- bluetooth_smp.h
app.overlay
CMakeLists.txt
prj.conf
My project is more involved. I am struggling to figure out where the mcuboot.conf will be added, and how to add its configurations for the mcuboot bootloader. I have several questions that I have been trying to research, so I am reaching out for help here while I continue to try.
When building my project with the following CMakeLists.txt, I can see in the build output that it seems to build my child image and mcuboot configurations, but how can I be sure?
When the build is complete, the dfu_application.zip contains the following even though the mcuboot.conf states "UPDATEABLE_IMAGE=2"

How would I get the cpu_net image into this dfu_application.zip? Am I on the right track?
Here is my project structure:
project_folder
- cpu_app
- inc
- *.h files
- src
-*.c files (including main.c)
- CMakeLists.txt
- cpu_net
- inc
- *.h files
- src
-*.c files (including main.c)
- CMakeLists.txt
- nrf5340dk_nrf5340_cpu_net.overlay
- prj.conf
- CMakeLists.txt
- nrf5340dk_nrf5340_cpuapp.overlay
- KConfig
- prj.conf
-
My project_folder/CMakeLists.txt looks like:
#
# Copyright (c) 2020 Nordic Semiconductor
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#
cmake_minimum_required(VERSION 3.20.0)
set(ZEPHYR_EXTRA_MODULES ${CMAKE_CURRENT_LIST_DIR})
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(app)
# NORDIC SDK APP START
FILE(GLOB app_sources cpu_app/src/*.c)
target_sources(app PRIVATE ${app_sources})
target_include_directories(app PRIVATE cpu_app/inc)
# NORDIC SDK APP END
zephyr_library_include_directories(.)
My project_folder/cpu_app/CMakeLists.txt looks like:
# This check is needed to avoid infinite recursion. This module code will
# be executed for all images in the build, also for the child image being
# added below.
if (CONFIG_INCLUDE_NET_CORE_IMAGE)
add_child_image(
NAME cpu_net
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../cpu_net
DOMAIN cpunet
BOARD ${CONFIG_DOMAIN_CPUNET_BOARD}
)
# Add this just below the line "cmake_minimum_required(...)" !!
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../mcuboot.conf")
list(APPEND mcuboot_OVERLAY_CONFIG
"${CMAKE_CURRENT_SOURCE_DIR}/mcuboot.conf"
)
endif()
endif()
My project_folder/cpu_net/CMakeLists.txt looks like:
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(cpu_net)
FILE(GLOB app_sources src/*.c)
target_sources(app PRIVATE ${app_sources})
target_include_directories(app PRIVATE inc)
if (CONFIG_SOC_NRF5340_CPUAPP)
message(FATAL_ERROR "This sample is not supported on the nRF53 application core")
endif()
zephyr_library_include_directories(.)