From 740d4de371369c38323573ee71cc08ff64519021 Mon Sep 17 00:00:00 2001 From: Jamie McCrae Date: Thu, 5 Dec 2024 10:37:46 +0000 Subject: [PATCH] treewide: Remove child/parent image support Removes support for child/parent image Signed-off-by: Jamie McCrae --- CMakeLists.txt | 1 - Kconfig.nrf | 6 - .../asset_tracker_v2/boards/native_sim.conf | 1 - .../boards/thingy91_nrf9160_ns.conf | 1 - applications/asset_tracker_v2/prj.conf | 1 - applications/machine_learning/CMakeLists.txt | 4 - applications/nrf5340_audio/Kconfig.defaults | 3 - .../tools/buildprog/buildprog.py | 18 +- applications/nrf_desktop/CMakeLists.txt | 14 +- .../thingy91x/Kconfig.defconfig.nrf5340 | 3 - cmake/extensions.cmake | 87 +- cmake/fw_zip.cmake | 2 +- cmake/mesh_dfu_metadata.cmake | 11 +- cmake/multi_image.cmake | 574 ----------- cmake/partition_manager.cmake | 712 +------------ .../sysbuild/lwm2m_carrier_divided_dfu.cmake | 4 +- .../app_dev/config_and_build/multi_image.rst | 412 -------- lib/edge_impulse/CMakeLists.txt | 5 +- modules/mcuboot/CMakeLists.txt | 947 ------------------ modules/mcuboot/Kconfig | 79 -- modules/mcuboot/boot/zephyr/Kconfig | 3 - modules/mcuboot/hooks/nrf53_hooks.c | 7 - modules/trusted-firmware-m/CMakeLists.txt | 43 +- samples/CMakeLists.txt | 151 --- samples/Kconfig | 111 -- .../peripheral_uart/nrf5340dk_app_sr_net.conf | 1 - .../boards/thingy91_nrf9160_ns.conf | 1 - samples/cellular/nrf_cloud_rest_fota/prj.conf | 1 - .../rpmsg_child_image_overlay.conf | 5 - samples/mpsl/timeslot/prj.conf | 1 - samples/tfm/tfm_psa_template/prj.conf | 1 - scripts/bluetooth/mesh/mesh_dfu_metadata.py | 13 +- subsys/CMakeLists.txt | 10 - subsys/bluetooth/mesh/CMakeLists.txt | 6 - subsys/bluetooth/mesh/Kconfig | 10 - .../mesh/hci_ipc_child_image_overlay.conf | 12 - .../services/fast_pair/CMakeLists.txt | 55 +- subsys/bootloader/CMakeLists.txt | 8 +- subsys/bootloader/Kconfig | 114 --- subsys/bootloader/bl_override/CMakeLists.txt | 12 - subsys/bootloader/cmake/provision_hex.cmake | 167 --- subsys/bootloader/cmake/sign.cmake | 264 ----- subsys/bootloader/image/CMakeLists.txt | 40 - subsys/bootloader/image/build_s1.conf | 1 - subsys/net/lib/nrf70_fw_ext/Kconfig | 1 - .../net/lib/nrf_cloud/Kconfig.nrf_cloud_fota | 2 +- .../net/lib/nrf_cloud/Kconfig.nrf_cloud_pgps | 8 +- subsys/partition_manager/CMakeLists.txt | 34 +- subsys/partition_manager/Kconfig | 1 - .../Kconfig.template.build_strategy | 34 - subsys/zigbee/lib/zigbee_fota/Kconfig | 1 - sysbuild/CMakeLists.txt | 8 +- .../direct_xip/child_image/mcuboot.conf | 8 - .../modules/mcuboot/direct_xip/testcase.yaml | 11 - .../boards/nrf52840dk_nrf52840.overlay | 5 - .../boards/nrf5340dk_nrf5340_cpuapp.conf | 16 - .../boards/nrf5340dk_nrf5340_cpuapp.overlay | 5 - .../boards/thingy53_nrf5340_cpuapp.conf | 31 - .../child_image/mcuboot/prj.conf | 26 - .../mcuboot/external_flash/testcase.yaml | 9 - tests/nrf5340_audio/sw_codec_lc3/prj.conf | 1 - .../mesh/metadata_extraction/CMakeLists.txt | 9 - .../mesh/metadata_extraction/prj.conf | 1 - .../bl_crypto/child_image/mcuboot.conf | 2 - .../subsys/bootloader/bl_crypto/testcase.yaml | 20 - .../subsys/bootloader/bl_validation/prj.conf | 1 - .../bootloader/bl_validation_ff_key/Kconfig | 11 - tests/subsys/fw_info/prj.conf | 1 - .../net/lib/nrf_cloud/fota_common/src/main.c | 6 +- .../static_pm_file/testcase.yaml | 6 - tests/subsys/pcd/child_image/hello_world.conf | 8 - tests/subsys/pcd/testcase.yaml | 7 - 72 files changed, 59 insertions(+), 4136 deletions(-) delete mode 100644 cmake/multi_image.cmake delete mode 100644 doc/nrf/app_dev/config_and_build/multi_image.rst delete mode 100644 samples/common/mcumgr_bt_ota_dfu/rpmsg_child_image_overlay.conf delete mode 100644 subsys/bluetooth/mesh/hci_ipc_child_image_overlay.conf delete mode 100644 subsys/bootloader/bl_override/CMakeLists.txt delete mode 100644 subsys/bootloader/cmake/provision_hex.cmake delete mode 100644 subsys/bootloader/cmake/sign.cmake delete mode 100644 subsys/bootloader/image/CMakeLists.txt delete mode 100644 subsys/bootloader/image/build_s1.conf delete mode 100644 subsys/partition_manager/Kconfig.template.build_strategy delete mode 100644 tests/modules/mcuboot/direct_xip/child_image/mcuboot.conf delete mode 100644 tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf52840dk_nrf52840.overlay delete mode 100644 tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.conf delete mode 100644 tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.overlay delete mode 100644 tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/thingy53_nrf5340_cpuapp.conf delete mode 100644 tests/modules/mcuboot/external_flash/child_image/mcuboot/prj.conf delete mode 100644 tests/subsys/bootloader/bl_crypto/child_image/mcuboot.conf delete mode 100644 tests/subsys/bootloader/bl_validation_ff_key/Kconfig delete mode 100644 tests/subsys/pcd/child_image/hello_world.conf diff --git a/CMakeLists.txt b/CMakeLists.txt index b57e564fc285..1955fcc8df46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,6 @@ endforeach() include(cmake/extensions.cmake) include(cmake/version.cmake) include(cmake/version_app.cmake) -include(cmake/multi_image.cmake) include(cmake/sdp.cmake) zephyr_include_directories(include) diff --git a/Kconfig.nrf b/Kconfig.nrf index fc019955f389..8b6e648b2f3d 100644 --- a/Kconfig.nrf +++ b/Kconfig.nrf @@ -28,12 +28,6 @@ endif # BUILD_WITH_TFM menu "Nordic nRF Connect" -# Hides child parent configuration options -config HIDE_CHILD_PARENT_CONFIG - bool - default y if "$(HIDE_CHILD_PARENT_CONFIG)" = "True" - default n - # Override configuration from zephyr which sets this to 0x200 if MCUboot is # enabled (CONFIG_BOOTLOADER_MCUBOOT), since NCS use partition_manager to # get this offset intsead. diff --git a/applications/asset_tracker_v2/boards/native_sim.conf b/applications/asset_tracker_v2/boards/native_sim.conf index 468ffc505eb7..946bc6e021e8 100644 --- a/applications/asset_tracker_v2/boards/native_sim.conf +++ b/applications/asset_tracker_v2/boards/native_sim.conf @@ -112,7 +112,6 @@ CONFIG_IMG_MANAGER=n CONFIG_MCUBOOT_IMG_MANAGER=n CONFIG_IMG_ERASE_PROGRESSIVELY=n CONFIG_SECURE_BOOT=n -CONFIG_BUILD_S1_VARIANT=n # Watchdog CONFIG_WATCHDOG_APPLICATION=n diff --git a/applications/asset_tracker_v2/boards/thingy91_nrf9160_ns.conf b/applications/asset_tracker_v2/boards/thingy91_nrf9160_ns.conf index 35826c9b2a3d..772ccc08a853 100644 --- a/applications/asset_tracker_v2/boards/thingy91_nrf9160_ns.conf +++ b/applications/asset_tracker_v2/boards/thingy91_nrf9160_ns.conf @@ -29,4 +29,3 @@ CONFIG_LED_PWM=y # Disable MCUboot DFU -- incompatible with static partitions CONFIG_SECURE_BOOT=n -CONFIG_BUILD_S1_VARIANT=n diff --git a/applications/asset_tracker_v2/prj.conf b/applications/asset_tracker_v2/prj.conf index 7c6e966c1456..d01ad253d318 100644 --- a/applications/asset_tracker_v2/prj.conf +++ b/applications/asset_tracker_v2/prj.conf @@ -79,7 +79,6 @@ CONFIG_IMG_MANAGER=y CONFIG_MCUBOOT_IMG_MANAGER=y CONFIG_IMG_ERASE_PROGRESSIVELY=y CONFIG_SECURE_BOOT=y -CONFIG_BUILD_S1_VARIANT=y # Watchdog CONFIG_WATCHDOG_APPLICATION=y diff --git a/applications/machine_learning/CMakeLists.txt b/applications/machine_learning/CMakeLists.txt index ff90feb8c4a0..676ae206bb86 100644 --- a/applications/machine_learning/CMakeLists.txt +++ b/applications/machine_learning/CMakeLists.txt @@ -39,7 +39,3 @@ add_subdirectory(common/src/modules) add_subdirectory(src/events) add_subdirectory(src/modules) add_subdirectory(src/util) - -if(CONFIG_BT_HCI_IPC AND NOT SYSBUILD) - assert_exists(hci_ipc_CONF_FILE) -endif() diff --git a/applications/nrf5340_audio/Kconfig.defaults b/applications/nrf5340_audio/Kconfig.defaults index df1b661291b1..3e98206f9ad7 100644 --- a/applications/nrf5340_audio/Kconfig.defaults +++ b/applications/nrf5340_audio/Kconfig.defaults @@ -21,9 +21,6 @@ config SYSTEM_WORKQUEUE_STACK_SIZE config THREAD_NAME default y -config NCS_INCLUDE_RPMSG_CHILD_IMAGE - default y - # Workaround to not use fatal_error.c in NCS. Note that the system may still # reset on error depending on the build configuraion config RESET_ON_FATAL_ERROR diff --git a/applications/nrf5340_audio/tools/buildprog/buildprog.py b/applications/nrf5340_audio/tools/buildprog/buildprog.py index 34747405c2b3..5c51f0884473 100644 --- a/applications/nrf5340_audio/tools/buildprog/buildprog.py +++ b/applications/nrf5340_audio/tools/buildprog/buildprog.py @@ -85,7 +85,7 @@ def __print_dev_conf(device_list): def __build_cmd_get(core: Core, device: AudioDevice, build: BuildType, - pristine, child_image, options): + pristine, options): if core == Core.app: build_cmd = (f"west build {TARGET_CORE_APP_FOLDER} " f"-b {TARGET_BOARD_NRF5340_AUDIO_DK_APP_NAME} " @@ -108,9 +108,6 @@ def __build_cmd_get(core: Core, device: AudioDevice, build: BuildType, else: raise Exception("Invalid build type!") - if not child_image: - device_flag += " -DCONFIG_NCS_INCLUDE_RPMSG_CHILD_IMAGE=n" - if options.nrf21540: device_flag += " -Dnrf5340_audio_SHIELD=nrf21540ek" device_flag += " -Dipc_radio_SHIELD=nrf21540ek" @@ -156,7 +153,6 @@ def __build_module(build_config, options): build_config.device, build_config.build, build_config.pristine, - build_config.child_image, options, ) west_str = f"{build_cmd} -d {dest_folder} " @@ -190,11 +186,11 @@ def __find_snr(): return list(map(int, snrs)) -def __populate_hex_paths(dev, options, child_image): +def __populate_hex_paths(dev, options): """Poplulate hex paths where relevant""" _, temp_dest_folder, _, _ = __build_cmd_get( - Core.app, dev.nrf5340_audio_dk_dev, options.build, options.pristine, child_image, options + Core.app, dev.nrf5340_audio_dk_dev, options.build, options.pristine, options ) dev.hex_path_app = temp_dest_folder / "merged.hex" @@ -364,15 +360,11 @@ def __main(): # Reboot step finished # Build step start - child_image = True if options.build is not None: print("Invoking build step") build_configs = [] if Core.app in cores: - if not Core.net in cores: - child_image = False - if AudioDevice.headset in devices: build_configs.append( BuildConf( @@ -380,7 +372,6 @@ def __main(): device=AudioDevice.headset, pristine=options.pristine, build=options.build, - child_image=child_image, ) ) if AudioDevice.gateway in devices: @@ -390,7 +381,6 @@ def __main(): device=AudioDevice.gateway, pristine=options.pristine, build=options.build, - child_image=child_image, ) ) @@ -406,7 +396,7 @@ def __main(): if options.program: for dev in device_list: if dev.snr_connected: - __populate_hex_paths(dev, options, child_image) + __populate_hex_paths(dev, options) program_threads_run(device_list, sequential=options.sequential_prog) # Program step finished diff --git a/applications/nrf_desktop/CMakeLists.txt b/applications/nrf_desktop/CMakeLists.txt index ec87ef388447..5c8f5f931031 100644 --- a/applications/nrf_desktop/CMakeLists.txt +++ b/applications/nrf_desktop/CMakeLists.txt @@ -43,19 +43,7 @@ add_subdirectory(src/hw_interface) add_subdirectory(src/modules) add_subdirectory(src/util) -if(NOT SYSBUILD AND NOT CONFIG_NCS_IS_VARIANT_IMAGE) - if(CONFIG_BOOTLOADER_MCUBOOT) - assert_exists(mcuboot_CONF_FILE) - endif() - if(CONFIG_SECURE_BOOT) - assert_exists(b0_CONF_FILE) - endif() - if(CONFIG_BT_HCI_IPC) - assert_exists(hci_ipc_CONF_FILE) - endif() -endif() - -if (CONFIG_IMG_MANAGER) +if(CONFIG_IMG_MANAGER) zephyr_library_link_libraries(MCUBOOT_BOOTUTIL) endif() diff --git a/boards/nordic/thingy91x/Kconfig.defconfig.nrf5340 b/boards/nordic/thingy91x/Kconfig.defconfig.nrf5340 index a1758d9e0264..ff389a3084b7 100644 --- a/boards/nordic/thingy91x/Kconfig.defconfig.nrf5340 +++ b/boards/nordic/thingy91x/Kconfig.defconfig.nrf5340 @@ -93,9 +93,6 @@ config SECURE_BOOT config BOOTLOADER_MCUBOOT default y if BOARD_THINGY91X_NRF5340_CPUAPP || BOARD_THINGY91X_NRF5340_CPUAPP_NS -config ADD_MCUBOOT_MEDIATE_SIM_FLASH_DTS - default y if BOARD_THINGY91X_NRF5340_CPUAPP || BOARD_THINGY91X_NRF5340_CPUAPP_NS - config NRF53_UPGRADE_NETWORK_CORE default y if BOARD_THINGY91X_NRF5340_CPUAPP || BOARD_THINGY91X_NRF5340_CPUAPP_NS diff --git a/cmake/extensions.cmake b/cmake/extensions.cmake index 3fb35d0f7dac..a245a17f2fae 100644 --- a/cmake/extensions.cmake +++ b/cmake/extensions.cmake @@ -80,35 +80,6 @@ function(get_board_without_ns_suffix board_in board_out) endif() endfunction() -# Add an overlay file to a child image. -# This can be used by a parent image to set overlay of Kconfig configuration or devicetree -# in its child images. This function must be called before 'add_child_image(image)' -# to have effect. -# -# Parameters: -# 'image' - child image name -# 'overlay_file' - overlay to be added to child image -# 'overlay_type' - 'OVERLAY_CONFIG' or 'DTC_OVERLAY_FILE' -function(add_overlay image overlay_file overlay_type) - set(old_overlays ${${image}_${overlay_type}}) - string(FIND "${old_overlays}" "${overlay_file}" found) - if (${found} EQUAL -1) - set(${image}_${overlay_type} "${old_overlays};${overlay_file}" CACHE STRING - "Extra config fragments for ${image} child image" FORCE - ) - endif() -endfunction() - -# Convenience macro to add configuration overlays to child image. -macro(add_overlay_config image overlay_file) - add_overlay(${image} ${overlay_file} EXTRA_CONF_FILE) -endmacro() - -# Convenience macro to add device tree overlays to child image. -macro(add_overlay_dts image overlay_file) - add_overlay(${image} ${overlay_file} EXTRA_DTC_OVERLAY_FILE) -endmacro() - # Add a partition manager configuration file to the build. # Note that is only one image is included in the build, # you must set CONFIG_PM_SINGLE_IMAGE=y for the partition manager @@ -353,59 +324,13 @@ function(set_shared) set(multi_args "PROPERTY") cmake_parse_arguments(SHARE "${flags}" "${single_args}" "${multi_args}" ${ARGN}) - if(SYSBUILD) - # Sysbuild can read the cache directly, no reason for an extra share file. - list(POP_FRONT SHARE_PROPERTY listname) - if(SHARE_APPEND) - list(APPEND ${listname} ${SHARE_PROPERTY}) - list(REMOVE_DUPLICATES ${listname}) - set(SHARE_PROPERTY ${${listname}}) - endif() - set(${listname} "${SHARE_PROPERTY}" CACHE INTERNAL "shared var") - return() - endif() - - check_arguments_required("set_shared" SHARE IMAGE FILE) - - check_arguments_exclusive("set_shared" SHARE FILE IMAGE PROPERTY APPEND) - check_arguments_exclusive("set_shared" SHARE IMAGE FILE) - - - set(prop_target ${IMAGE_NAME}_shared_property_target) - if(NOT TARGET ${prop_target}) - add_custom_target(${prop_target}) - endif() - - if(DEFINED SHARE_IMAGE) - # When using IMAGE, then PROPERTY is also required. - check_arguments_required("set_shared" SHARE PROPERTY) - - set(share_prop_target ${SHARE_IMAGE}_shared_property_target) - - if(SHARE_APPEND) - set(SHARE_APPEND APPEND) - else() - set(SHARE_APPEND) - endif() - - get_property(string_targets TARGET ${prop_target} PROPERTY image_targets) - if(NOT "add_custom_target(${share_prop_target})" IN_LIST string_targets) - set_property( - TARGET ${prop_target} APPEND PROPERTY - image_targets "add_custom_target(${share_prop_target})" - ) - endif() - - set_property(TARGET ${prop_target} APPEND_STRING PROPERTY shared_vars - "set_property(TARGET ${share_prop_target} ${SHARE_APPEND} PROPERTY ${SHARE_PROPERTY})\n" - ) - endif() - - if(DEFINED SHARE_FILE) - set_property(TARGET ${prop_target} APPEND_STRING PROPERTY shared_vars - "include(${SHARE_FILE})\n" - ) + list(POP_FRONT SHARE_PROPERTY listname) + if(SHARE_APPEND) + list(APPEND ${listname} ${SHARE_PROPERTY}) + list(REMOVE_DUPLICATES ${listname}) + set(SHARE_PROPERTY ${${listname}}) endif() + set(${listname} "${SHARE_PROPERTY}" CACHE INTERNAL "shared var") endfunction() # generate_shared(IMAGE FILE ) diff --git a/cmake/fw_zip.cmake b/cmake/fw_zip.cmake index 0a01f716d7a2..d50680445f18 100644 --- a/cmake/fw_zip.cmake +++ b/cmake/fw_zip.cmake @@ -18,7 +18,7 @@ function(generate_dfu_zip) message(FATAL_ERROR "Missing required param") endif() - if(SYSBUILD AND GENZIP_IMAGE) + if(GENZIP_IMAGE) set(APPNAME ${GENZIP_IMAGE}) sysbuild_get(CONFIG_BUILD_OUTPUT_META IMAGE ${GENZIP_IMAGE} VAR CONFIG_BUILD_OUTPUT_META KCONFIG) sysbuild_get(CONFIG_BOARD IMAGE ${GENZIP_IMAGE} VAR CONFIG_BOARD KCONFIG) diff --git a/cmake/mesh_dfu_metadata.cmake b/cmake/mesh_dfu_metadata.cmake index e52e34cc5b25..98fca26a3314 100644 --- a/cmake/mesh_dfu_metadata.cmake +++ b/cmake/mesh_dfu_metadata.cmake @@ -7,12 +7,7 @@ find_package(Python3 REQUIRED) function(mesh_dfu_metadata) - if(SYSBUILD) - set(metadata_dir ${CMAKE_BINARY_DIR}/${DEFAULT_IMAGE}/zephyr) - else() - set(metadata_dir ${PROJECT_BINARY_DIR}) - endif() - + set(metadata_dir ${CMAKE_BINARY_DIR}/${DEFAULT_IMAGE}/zephyr) set(metadata_depends ${CMAKE_BINARY_DIR}/dfu_application.zip) add_custom_command( @@ -42,6 +37,4 @@ function(mesh_dfu_metadata) ) endfunction() -if(SYSBUILD) - mesh_dfu_metadata() -endif() +mesh_dfu_metadata() diff --git a/cmake/multi_image.cmake b/cmake/multi_image.cmake deleted file mode 100644 index 8eafc3349b49..000000000000 --- a/cmake/multi_image.cmake +++ /dev/null @@ -1,574 +0,0 @@ -# -# Copyright (c) 2019 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -if(SYSBUILD) - # Sysbuild and child-image are mutual exclusive, so if sysbuild is used disable child-image - function(add_child_image) - set(CONFIG_USE_PARTITION_MANAGER n CACHE INTERNAL "") - # ignore, sysbuild is in use. - endfunction() - return() -endif() - -if(IMAGE_NAME) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY KERNEL_HEX_NAME ${KERNEL_HEX_NAME}) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY ZEPHYR_BINARY_DIR ${ZEPHYR_BINARY_DIR}) - # Share the elf file, in order to support symbol loading for debuggers. - set_shared(IMAGE ${IMAGE_NAME} PROPERTY KERNEL_ELF_NAME ${KERNEL_ELF_NAME}) - set_shared(IMAGE ${IMAGE_NAME} - PROPERTY BUILD_BYPRODUCTS - ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME} - ${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME} - ) - # Share the signing key file so that the parent image can use it to - # generate signed update candidates. - if(CONFIG_BOOT_SIGNATURE_KEY_FILE) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY SIGNATURE_KEY_FILE ${CONFIG_BOOT_SIGNATURE_KEY_FILE}) - endif() - - generate_shared(IMAGE ${IMAGE_NAME} FILE ${CMAKE_BINARY_DIR}/shared_vars.cmake) -else() - # Store a preload file with whatever configurations are required to create - # a variant build of this image (that is, 'app'). Copy relevant information - # from the 'app' image CMakeCache in order to build an identical variant image. - # In general, what we need to copy is the arguments passed by the user - # through command line arguments. These can typically be identified by - # inspecting their help text. However, some variables have special - # handling, resulting in a different help text. These cannot be found - # using the same mechanisms as the regular variables, and needs special - # handling. - - # Add a custom target similar to that created when adding a child image - # to facilitate the process of creating a variant image of the app image. - add_custom_target(app_subimage) - - set(base_image_preload_file ${CMAKE_BINARY_DIR}/image_preload.cmake) - - file( - WRITE - ${base_image_preload_file} - "# Generated file that can be used to preload variant images\n" - ) - - get_cmake_property(variables_cached CACHE_VARIABLES) - foreach(var_name ${variables_cached}) - # If '-DCONF_FILE' is specified, it is unset by boilerplate.cmake and - # replaced with 'CACHED_CONF_FILE' in the cache. Therefore we need this - # special handling for passing the value to the variant image. - if("${var_name}" MATCHES "CACHED_CONF_FILE") - list(APPEND application_vars ${var_name}) - endif() - - # If 'CACHED_CONF_FILE' is specified instead of 'CONF_FILE', the build system does not determine - # build type automatically. In that case, the 'CONF_FILE_BUILD_TYPE' shall be passed explicitly. - if("${var_name}" MATCHES "CONF_FILE_BUILD_TYPE") - list(APPEND application_vars ${var_name}) - endif() - - # '-DDTC_OVERLAY_FILE' is given helptext by the build system. Therefore - # we need this special handling for passing the value to the variant image. - if("${var_name}" MATCHES "DTC_OVERLAY_FILE") - list(APPEND application_vars ${var_name}) - endif() - - # All CONFIG_.* and CLI_CONFIG_* variables are given helptext by the build - # system. Therefore we need this special handling for passing the value to - # the variant image. - if("${var_name}" MATCHES "^CONFIG_.*" OR - "${var_name}" MATCHES "^CLI_CONFIG_.*" - ) - list(APPEND application_vars ${var_name}) - endif() - - # Command line arguments can generally be identified in the CMakeCache - # because they have the same help text generated by CMake. The text: - # - "No help, variable specified on the command line." - # - "Selected " command line variables updated by Zephyr. - get_property(var_help CACHE ${var_name} PROPERTY HELPSTRING) - string(TOLOWER ${var_name} var_name_lower) - if("${var_help}" STREQUAL "No help, variable specified on the command line." OR - "${var_help}" STREQUAL "Selected ${var_name_lower}") - list(APPEND application_vars ${var_name}) - endif() - endforeach() - - foreach(app_var_name ${application_vars}) - string(REPLACE "\"" "\\\"" app_var_value "$CACHE{${app_var_name}}") - file( - APPEND - ${base_image_preload_file} - "set(${app_var_name} \"${app_var_value}\" CACHE INTERNAL \"NCS child image controlled\")\n" - ) - endforeach() - - set_property( - TARGET app_subimage - PROPERTY preload_file - ${base_image_preload_file} - ) - - set_property( - TARGET app_subimage - PROPERTY source_dir - ${APPLICATION_SOURCE_DIR} - ) - - set_property( - TARGET app_subimage - PROPERTY binary_dir - ${CMAKE_BINARY_DIR} - ) -endif(IMAGE_NAME) - -function(add_child_image) - # Adds a child image to the build. - # - # Required arguments are: - # NAME - The name of the child image - # SOURCE_DIR - The source dir of the child image, not required if - # PRELOAD_IMAGE is set. - # - # Optional arguments are: - # DOMAIN - The domain to place the child image in. - # PRELOAD_IMAGE - Use preload file from this image instead of using standard - # mechanisms for locating child image configurations. - # Set this to "app" to use the preload file from the "root" - # image (that is, the only non-child-image in the build). - # - # Depending on the value of CONFIG_${NAME}_BUILD_STRATEGY the child image - # is either built from source, included as a hex file, or ignored. - # - # See chapter "Multi-image builds" in the documentation for more details. - - # Don't add child images when building variant images. - if (CONFIG_NCS_IS_VARIANT_IMAGE) - return() - endif() - - set(oneValueArgs NAME SOURCE_DIR DOMAIN PRELOAD_IMAGE) - cmake_parse_arguments(ACI "" "${oneValueArgs}" "" ${ARGN}) - - if (NOT ACI_NAME OR NOT (ACI_SOURCE_DIR OR ACI_PRELOAD_IMAGE)) - message(FATAL_ERROR "Missing parameter, required: NAME and (SOURCE_DIR or PRELOAD_IMAGE)") - endif() - - if (NOT CONFIG_PARTITION_MANAGER_ENABLED) - message(FATAL_ERROR - "CONFIG_PARTITION_MANAGER_ENABLED was not set for image ${ACI_NAME}." - "This option must be set for an image to support being added as a child" - "image through 'add_child_image'. This is typically done by invoking the" - " `build_strategy` kconfig template for the child image.") - endif() - - string(TOUPPER ${ACI_NAME} UPNAME) - - if (CONFIG_${UPNAME}_BUILD_STRATEGY_USE_HEX_FILE) - assert_exists(CONFIG_${UPNAME}_HEX_FILE) - message("Using ${CONFIG_${UPNAME}_HEX_FILE} instead of building ${ACI_NAME}") - - # Set property so that the hex file is merged in by partition manager. - set_property(GLOBAL PROPERTY ${ACI_NAME}_PM_HEX_FILE ${CONFIG_${UPNAME}_HEX_FILE}) - elseif (CONFIG_${UPNAME}_BUILD_STRATEGY_SKIP_BUILD) - message("Skipping building of ${ACI_NAME}") - else() - # Build normally - add_child_image_from_source(${ARGN}) - endif() -endfunction() - -function(add_child_image_from_source) - # See 'add_child_image' - set(oneValueArgs NAME SOURCE_DIR DOMAIN BOARD PRELOAD_IMAGE) - cmake_parse_arguments(ACI "" "${oneValueArgs}" "" ${ARGN}) - - if (NOT ACI_NAME OR NOT (ACI_SOURCE_DIR OR ACI_PRELOAD_IMAGE)) - message(FATAL_ERROR "Missing parameter, required: NAME and (SOURCE_DIR or PRELOAD_IMAGE)") - endif() - - # Pass information that the partition manager is enabled to Kconfig. - add_overlay_config( - ${ACI_NAME} - ${ZEPHYR_NRF_MODULE_DIR}/subsys/partition_manager/partition_manager_enabled.conf - ) - - if (${ACI_NAME}_BOARD) - message(FATAL_ERROR - "${ACI_NAME}_BOARD set in outer scope. Will be ignored, use " - "`add_child_image(BOARD ${${ACI_NAME}_BOARD} ...)` for adding a child " - "image for specific board") - endif() - - # Add the new partition manager domain if needed. - # The domain corresponds to the BOARD without the 'ns' suffix. - if (ACI_DOMAIN) - if ("${ACI_BOARD}" STREQUAL "") - message(FATAL_ERROR - "No board specified for domain '${ACI_DOMAIN}'. This configuration is " - "typically defined in ${BOARD_DIR}/Kconfig") - endif() - - set(domain_parent ${${ACI_DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION}) - if(DEFINED ${ACI_DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION - AND NOT "${domain_parent}" STREQUAL "${ACI_NAME}" - ) - # A domain may only have one child image, which can then act as a parent - # to other images in the domain. - # As it is a cache variable we check it's content so that CMake re-run - # will pass the check as long as the child image hasn't changed. - message(FATAL_ERROR "A domain may only have a single child image." - "Current domain image is: ${domain_parent}, `${domain_parent}` is a " - "domain parent image, so you may add `${ACI_NAME}` as a child inside " - "`${domain_parent}`" - ) - endif() - # This needs to be made globally available as it is used in other files. - set(${ACI_DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION ${ACI_NAME} CACHE INTERNAL "") - - if (NOT (${ACI_DOMAIN} IN_LIST PM_DOMAINS)) - list(APPEND PM_DOMAINS ${ACI_DOMAIN}) - set_property(GLOBAL APPEND PROPERTY PM_DOMAINS ${ACI_DOMAIN}) - endif() - elseif (NOT ACI_BOARD) - # No BOARD is given as argument, this triggers automatic conversion of - # *.ns board from parent image. - get_board_without_ns_suffix(${BOARD}${BOARD_QUALIFIERS} ACI_BOARD) - endif() - - if (NOT ACI_DOMAIN AND DOMAIN) - # If no domain is specified, a child image will inherit the domain of - # its parent. - set(ACI_DOMAIN ${DOMAIN}) - set(inherited " (inherited)") - endif() - - set(${ACI_NAME}_DOMAIN ${ACI_DOMAIN}) - set(${ACI_NAME}_BOARD ${ACI_BOARD}) - - message("\n=== child image ${ACI_NAME} - ${ACI_DOMAIN}${inherited} begin ===") - - if (CONFIG_BOOTLOADER_MCUBOOT) - list(APPEND extra_cmake_args "-DCONFIG_NCS_MCUBOOT_IN_BUILD=y") - endif() - - if (ACI_PRELOAD_IMAGE) - get_property( - preload_file - TARGET ${ACI_PRELOAD_IMAGE}_subimage - PROPERTY preload_file - ) - - get_property( - source_dir - TARGET ${ACI_PRELOAD_IMAGE}_subimage - PROPERTY source_dir - ) - - get_property( - binary_dir - TARGET ${ACI_PRELOAD_IMAGE}_subimage - PROPERTY binary_dir - ) - - list(APPEND extra_cmake_args "-DCONFIG_NCS_IS_VARIANT_IMAGE=y") - list(APPEND extra_cmake_args "-DPRELOAD_BINARY_DIR=${binary_dir}") - else() - set(source_dir ${ACI_SOURCE_DIR}) - - # It is possible for a sample to use a custom set of Kconfig fragments for a - # child image, or to append additional Kconfig fragments to the child image. - # Note that in this context is the name of the child image as - # passed to the 'add_child_image' function. - # - # DIRECTORY - # | - prj.conf (A) - # | - prj_.conf (B) - # | - boards DIRECTORY - # | | - .conf (C) - # | | - _.conf (D) - - - # DIRECTORY - # | - prj.conf - # | - prj_.conf - # | - child_image DIRECTORY - # |-- .conf (I) Fragment, used together with (A) and (C) - # |-- _.conf (J) Fragment, used together with (B) and (D) - # |-- .overlay If present, will be merged with BOARD.dts - # |-- DIRECTORY - # |-- boards DIRECTORY - # | |-- .conf (E) If present, use instead of (C), requires (G). - # | |-- _.conf (F) If present, use instead of (D), requires (H). - # | |-- .overlay If present, will be merged with BOARD.dts - # | |-- _.overlay If present, will be merged with BOARD.dts - # |-- prj.conf (G) If present, use instead of (A) - # | Note that (C) is ignored if this is present. - # | Use (E) instead. - # |-- prj_.conf (H) If present, used instead of (B) when user - # | specify `-DCONF_FILE=prj_.conf for - # | parent image. Note that any (C) is ignored - # | if this is present. Use (F) instead. - # |-- .overlay If present, will be merged with BOARD.dts - # |-- _.overlay If present, will be merged with BOARD.dts - # - # Note: The folder `child_image/` is only need when configurations - # files must be used instead of the child image default configs. - # The append a child image default config, place the additional settings - # in `child_image/.conf`. - zephyr_get(COMMON_CHILD_IMAGE_CONFIG_DIR) - string(CONFIGURE "${COMMON_CHILD_IMAGE_CONFIG_DIR}" COMMON_CHILD_IMAGE_CONFIG_DIR) - foreach(config_dir ${APPLICATION_CONFIG_DIR} ${COMMON_CHILD_IMAGE_CONFIG_DIR} ) - set(ACI_CONF_DIR ${config_dir}/child_image) - set(ACI_NAME_CONF_DIR ${config_dir}/child_image/${ACI_NAME}) - if (NOT ${ACI_NAME}_CONF_FILE) - if(DEFINED CONF_FILE_BUILD_TYPE AND DEFINED ${ACI_NAME}_FILE_SUFFIX) - message(WARNING "Cannot use BUILD_TYPE='${CONF_FILE_BUILD_TYPE}' together with ${ACI_NAME}_FILE_SUFFIX='${${ACI_NAME}_FILE_SUFFIX}'. " - "Ignoring BUILD_TYPE='${CONF_FILE_BUILD_TYPE}'" - ) - else() - set(LEGACY_BUILD_ARGUMENT BUILD ${CONF_FILE_BUILD_TYPE}) - endif() - ncs_file(CONF_FILES ${ACI_NAME_CONF_DIR} - BOARD ${ACI_BOARD} - # Child image always uses the same revision as parent board. - BOARD_REVISION ${BOARD_REVISION} - KCONF ${ACI_NAME}_CONF_FILE - DTS ${ACI_NAME}_DTC_OVERLAY_FILE - ${LEGACY_BUILD_ARGUMENT} - SUFFIX ${${ACI_NAME}_FILE_SUFFIX} - ) - # Place the result in the CMake cache and remove local scoped variable. - foreach(file CONF_FILE DTC_OVERLAY_FILE) - if(DEFINED ${ACI_NAME}_${file}) - set(${ACI_NAME}_${file} ${${ACI_NAME}_${file}} CACHE STRING - "Default ${ACI_NAME} configuration file" FORCE - ) - set(${ACI_NAME}_${file}) - endif() - endforeach() - - # Check for configuration fragment. The contents of these are appended - # to the project configuration, as opposed to the CONF_FILE which is used - # as the base configuration. - if(DEFINED ${ACI_NAME}_FILE_SUFFIX) - # Child/parent image does not support a prefix for the main application, therefore only - # use child image configuration with suffixes if specifically commanded with an argument - # targeting this child image - set(child_image_conf_fragment ${ACI_CONF_DIR}/${ACI_NAME}.conf) - zephyr_file_suffix(child_image_conf_fragment SUFFIX ${${ACI_NAME}_FILE_SUFFIX}) - elseif(NOT "${CONF_FILE_BUILD_TYPE}" STREQUAL "") - set(child_image_conf_fragment ${ACI_CONF_DIR}/${ACI_NAME}_${CONF_FILE_BUILD_TYPE}.conf) - else() - set(child_image_conf_fragment ${ACI_CONF_DIR}/${ACI_NAME}.conf) - endif() - if (EXISTS ${child_image_conf_fragment}) - add_overlay_config(${ACI_NAME} ${child_image_conf_fragment}) - endif() - - # Check for overlay named .overlay. - set(child_image_dts_overlay ${ACI_CONF_DIR}/${ACI_NAME}.overlay) - zephyr_file_suffix(child_image_dts_overlay SUFFIX ${${ACI_NAME}_FILE_SUFFIX}) - if (EXISTS ${child_image_dts_overlay}) - add_overlay_dts(${ACI_NAME} ${child_image_dts_overlay}) - endif() - - if(${ACI_NAME}_CONF_FILE OR ${ACI_NAME}_DTC_OVERLAY_FILE - OR EXISTS ${child_image_conf_fragment} OR EXISTS ${child_image_dts_overlay}) - # If anything is picked up directly from APPLICATION_CONFIG_DIR, then look no further. - break() - endif() - endif() - endforeach() - # Construct a list of variables that, when present in the root - # image, should be passed on to all child images as well. - list(APPEND - SHARED_MULTI_IMAGE_VARIABLES - CMAKE_BUILD_TYPE - CMAKE_VERBOSE_MAKEFILE - BOARD_DIR - BOARD_REVISION - ZEPHYR_MODULES - ZEPHYR_EXTRA_MODULES - ZEPHYR_TOOLCHAIN_VARIANT - CROSS_COMPILE - GNUARMEMB_TOOLCHAIN_PATH - EXTRA_KCONFIG_TARGETS - NCS_TOOLCHAIN_VERSION - PM_DOMAINS - ${ACI_DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION - WEST_PYTHON - ) - - # Construct a list of cache variables that, when present in the root - # image, should be passed on to all child images as well. - list(APPEND - SHARED_CACHED_MULTI_IMAGE_VARIABLES - ARCH_ROOT - BOARD_ROOT - SOC_ROOT - MODULE_EXT_ROOT - SCA_ROOT - ) - - foreach(kconfig_target ${EXTRA_KCONFIG_TARGETS}) - list(APPEND - SHARED_MULTI_IMAGE_VARIABLES - EXTRA_KCONFIG_TARGET_COMMAND_FOR_${kconfig_target} - ) - endforeach() - - set(preload_file ${CMAKE_BINARY_DIR}/${ACI_NAME}/child_image_preload.cmake) - file(WRITE ${preload_file} "# Generated file used for preloading a child image\n") - - unset(image_cmake_args) - list(REMOVE_DUPLICATES SHARED_MULTI_IMAGE_VARIABLES) - foreach(shared_var ${SHARED_MULTI_IMAGE_VARIABLES}) - if(DEFINED ${shared_var}) - file( - APPEND - ${preload_file} - "set(${shared_var} \"${${shared_var}}\" CACHE INTERNAL \"NCS child image controlled\")\n" - ) - endif() - endforeach() - - list(REMOVE_DUPLICATES SHARED_CACHED_MULTI_IMAGE_VARIABLES) - foreach(shared_var ${SHARED_CACHED_MULTI_IMAGE_VARIABLES}) - if(DEFINED CACHE{${shared_var}} AND NOT DEFINED ${ACI_NAME}_${shared_var}) - file( - APPEND - ${preload_file} - "set(${shared_var} \"$CACHE{${shared_var}}\" CACHE INTERNAL \"NCS child image controlled\")\n" - ) - endif() - endforeach() - - # Add FILE_SUFFIX to the preload file if it is set with the specific name of this image - file(APPEND - ${preload_file} - "set(FILE_SUFFIX \"${${ACI_NAME}_FILE_SUFFIX}\" CACHE INTERNAL \"NCS child image controlled\")\n" - ) - - get_cmake_property(VARIABLES VARIABLES) - get_cmake_property(VARIABLES_CACHED CACHE_VARIABLES) - - set(regex "^${ACI_NAME}_.+") - - list(FILTER VARIABLES INCLUDE REGEX ${regex}) - list(FILTER VARIABLES_CACHED INCLUDE REGEX ${regex}) - - set(VARIABLES_ALL ${VARIABLES} ${VARIABLES_CACHED}) - list(REMOVE_DUPLICATES VARIABLES_ALL) - foreach(var_name ${VARIABLES_ALL}) - string(REPLACE "\"" "\\\"" ${var_name} "${${var_name}}") - # This regex is guaranteed to match due to the filtering done - # above, we only re-run the regex to extract the part after - # '_'. We run the regex twice because it is believed that - # list(FILTER is faster than doing a string(REGEX on each item. - string(REGEX MATCH "^${ACI_NAME}_(.+)" unused_out_var ${var_name}) - file( - APPEND - ${preload_file} - "set(${CMAKE_MATCH_1} \"${${var_name}}\" CACHE INTERNAL \"NCS child image controlled\")\n" - ) - endforeach() - endif() - - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${ACI_NAME}) - execute_process( - COMMAND ${CMAKE_COMMAND} - -G${CMAKE_GENERATOR} - ${EXTRA_MULTI_IMAGE_CMAKE_ARGS} # E.g. --trace-expand - -DIMAGE_NAME=${ACI_NAME} - -C ${preload_file} - ${extra_cmake_args} - ${source_dir} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/${ACI_NAME} - RESULT_VARIABLE ret - ) - - if (IMAGE_NAME) - # Expose your childrens secrets to your parent - set_shared(FILE ${CMAKE_BINARY_DIR}/${ACI_NAME}/shared_vars.cmake) - endif() - - set_property(DIRECTORY APPEND PROPERTY - CMAKE_CONFIGURE_DEPENDS - ${CMAKE_BINARY_DIR}/${ACI_NAME}/zephyr/.config - ) - - if(NOT ${ret} EQUAL "0") - message(FATAL_ERROR "CMake generation for ${ACI_NAME} failed, aborting. Command: ${ret}") - endif() - - message("=== child image ${ACI_NAME} - ${ACI_DOMAIN}${inherited} end ===\n") - - # Include some variables from the child image into the parent image - # namespace - include(${CMAKE_BINARY_DIR}/${ACI_NAME}/shared_vars.cmake) - - if(MULTI_IMAGE_DEBUG_MAKEFILE AND "${CMAKE_GENERATOR}" STREQUAL "Ninja") - set(multi_image_build_args "-d" "${MULTI_IMAGE_DEBUG_MAKEFILE}") - endif() - if(MULTI_IMAGE_DEBUG_MAKEFILE AND "${CMAKE_GENERATOR}" STREQUAL "Unix Makefiles") - set(multi_image_build_args "--debug=${MULTI_IMAGE_DEBUG_MAKEFILE}") - endif() - - get_shared(${ACI_NAME}_byproducts IMAGE ${ACI_NAME} PROPERTY BUILD_BYPRODUCTS) - - include(ExternalProject) - ExternalProject_Add(${ACI_NAME}_subimage - SOURCE_DIR ${source_dir} - BINARY_DIR ${CMAKE_BINARY_DIR}/${ACI_NAME} - BUILD_BYPRODUCTS ${${ACI_NAME}_byproducts} - CONFIGURE_COMMAND "" - BUILD_COMMAND ${CMAKE_COMMAND} --build . -- ${multi_image_build_args} - INSTALL_COMMAND "" - BUILD_ALWAYS True - USES_TERMINAL_BUILD True - ) - - set_property( - TARGET ${ACI_NAME}_subimage - PROPERTY preload_file - ${preload_file} - ) - - set_property( - TARGET ${ACI_NAME}_subimage - PROPERTY source_dir - ${source_dir} - ) - - set_property( - TARGET ${ACI_NAME}_subimage - PROPERTY binary_dir - ${CMAKE_BINARY_DIR}/${ACI_NAME} - ) - - if (NOT ACI_PRELOAD_IMAGE) - foreach(kconfig_target - menuconfig - guiconfig - ${EXTRA_KCONFIG_TARGETS} - ) - - add_custom_target(${ACI_NAME}_${kconfig_target} - ${CMAKE_MAKE_PROGRAM} ${kconfig_target} - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/${ACI_NAME} - USES_TERMINAL - ) - endforeach() - endif() - - if (NOT "${ACI_NAME}" STREQUAL "${${ACI_DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION}") - set_property( - GLOBAL APPEND PROPERTY - PM_IMAGES - "${ACI_NAME}" - ) - endif() - -endfunction() diff --git a/cmake/partition_manager.cmake b/cmake/partition_manager.cmake index 8e331d4a0eee..9c42f86224e7 100644 --- a/cmake/partition_manager.cmake +++ b/cmake/partition_manager.cmake @@ -26,21 +26,7 @@ endmacro() # Load static configuration if found. # Try user defined file first, then file found in configuration directory, # finally file from board directory. -if(SYSBUILD) - zephyr_get(PM_STATIC_YML_FILE SYSBUILD GLOBAL) -elseif(CONFIG_PARTITION_MANAGER_ENABLED) - message(DEPRECATION " - --------------------------------------------------------------------- - --- WARNING: Child and parent image functionality is deprecated --- - --- and should be replaced with sysbuild. Child and parent image --- - --- support remains only to allow existing customer applications --- - --- to build and allow porting to sysbuild, it is no longer --- - --- receiving updates or new features and it will not be possible --- - --- to build using child/parent image at all in nRF Connect SDK --- - --- version 2.9 onwards. --- - ---------------------------------------------------------------------" - ) -endif() +zephyr_get(PM_STATIC_YML_FILE SYSBUILD GLOBAL) if(DEFINED PM_STATIC_YML_FILE) string(CONFIGURE "${PM_STATIC_YML_FILE}" user_def_pm_static) @@ -80,13 +66,6 @@ elseif (EXISTS ${board_dir_pm_static_common}) set(static_configuration_file ${board_dir_pm_static_common}) endif() -if (EXISTS "${static_configuration_file}" AND NOT SYSBUILD) - message(STATUS "Found partition manager static configuration: " - "${static_configuration_file}" - ) - set(static_configuration --static-config ${static_configuration_file}) -endif() - if (NOT static_configuration AND CONFIG_PM_IMAGE_NOT_BUILT_FROM_SOURCE) message(WARNING "One or more child image is not configured to be built from source. \ @@ -97,23 +76,6 @@ if (NOT static_configuration AND CONFIG_PM_IMAGE_NOT_BUILT_FROM_SOURCE) place the image correctly in flash.") endif() -if (NOT static_configuration AND - (CONFIG_BOOTLOADER_MCUBOOT OR CONFIG_SECURE_BOOT) AND NOT SYSBUILD) - message(WARNING " - --------------------------------------------------------------------- - --- WARNING: Using a bootloader without pm_static.yml. --- - --- There are cases where a deployed product can consist of --- - --- multiple images, and only a subset of these images can be --- - --- upgraded through a firmware update mechanism. In such cases, --- - --- the upgradable images must have partitions that are static --- - --- and are matching the partition map used by the bootloader --- - --- programmed onto the device. --- - --------------------------------------------------------------------- - \n" - ) -endif() - - # Check if current image is the dynamic partition in its domain. # I.E. it is the only partition without a statically configured size in this # domain. This is equivalent to the 'app' partition in the root domain. @@ -129,675 +91,3 @@ endif() get_property(PM_IMAGES GLOBAL PROPERTY PM_IMAGES) get_property(PM_SUBSYS_PREPROCESSED GLOBAL PROPERTY PM_SUBSYS_PREPROCESSED) get_property(PM_DOMAINS GLOBAL PROPERTY PM_DOMAINS) - -# This file is executed once per domain. -# -# It will be executed if one of the following criteria is true for the -# current image: -# - It's a child image, and is the dynamic partition in the domain -# - It's the root image, and a static configuration has been provided -# - It's the root image, and PM_IMAGES is populated. -# - It's the root image, and other domains exist. -# - A subsys has defined a partition and CONFIG_PM_SINGLE_IMAGE is set. -# Otherwise, return here -if (NOT ( - (IMAGE_NAME AND is_dynamic_partition_in_domain) OR - (NOT IMAGE_NAME AND static_configuration) OR - (NOT IMAGE_NAME AND PM_IMAGES) OR - (NOT IMAGE_NAME AND PM_DOMAINS) OR - (PM_SUBSYS_PREPROCESSED AND CONFIG_PM_SINGLE_IMAGE) - ) - OR SYSBUILD - ) - return() -endif() - -# Set the dynamic partition. This is the only partition which does not -# have a statically defined size. There is only one dynamic partition per -# domain. For the "root domain" (ie the domain of the root image) this is -# always "app". -if (NOT is_dynamic_partition_in_domain) - set(dynamic_partition "app") -else() - set(dynamic_partition ${${DOMAIN}_PM_DOMAIN_DYNAMIC_PARTITION}) - set( - dynamic_partition_argument - "--flash_primary-dynamic-partition;${dynamic_partition}" - ) -endif() - -# Check if the dynamic partition image hex has already been defined -get_property(DYNAMIC_PARTITION_HEX GLOBAL PROPERTY - ${dynamic_partition}_PM_HEX_FILE - ) -if (NOT DYNAMIC_PARTITION_HEX) - # Add the dynamic partition as an image partition. - set_property(GLOBAL PROPERTY - ${dynamic_partition}_PM_HEX_FILE - ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME} - ) -endif() - -get_property(DYNAMIC_PARTITION_TARGET GLOBAL PROPERTY - ${dynamic_partition}_PM_TARGET - ) -if (NOT DYNAMIC_PARTITION_TARGET) - set_property(GLOBAL PROPERTY - ${dynamic_partition}_PM_TARGET - ${logical_target_for_zephyr_elf} - ) -endif() - -# Prepare the input_files, header_files, and images lists -set(generated_path include/generated) -foreach (image ${PM_IMAGES}) - list(APPEND prefixed_images ${DOMAIN}:${image}) - list(APPEND images ${image}) - - get_shared(${image}_input_files IMAGE ${image} PROPERTY PM_YML_FILES) - get_shared(${image}_binary_dir IMAGE ${image} PROPERTY ZEPHYR_BINARY_DIR) - - list(APPEND input_files ${${image}_input_files}) - list(APPEND header_files ${${image}_binary_dir}/${generated_path}/pm_config.h) - - # Re-configure (Re-execute all CMakeLists.txt code) when original - # (not preprocessed) configuration file changes. - get_shared(dependencies IMAGE ${image} PROPERTY PM_YML_DEP_FILES) - set_property( - DIRECTORY APPEND PROPERTY - CMAKE_CONFIGURE_DEPENDS - ${dependencies} - ) -endforeach() - -# Explicitly add the dynamic partition image -list(APPEND prefixed_images "${DOMAIN}:${dynamic_partition}") -list(APPEND images ${dynamic_partition}) -list(APPEND input_files ${ZEPHYR_BINARY_DIR}/${generated_path}/pm.yml) -list(APPEND header_files ${ZEPHYR_BINARY_DIR}/${generated_path}/pm_config.h) - -# Add subsys defined pm.yml to the input_files -list(APPEND input_files ${PM_SUBSYS_PREPROCESSED}) - -if (DEFINED CONFIG_SOC_SERIES_NRF91X) - # See nRF91 Product Specification, chapter "UICR" - set(otp_start_addr "0xff8108") - set(otp_size 756) # 189 * 4 -elseif (DEFINED CONFIG_SOC_NRF5340_CPUAPP) - # See nRF5340 Product Specification, chapter Application Core -> ... "UICR" - set(otp_start_addr "0xff8100") - set(otp_size 764) # 191 * 4 -elseif (DEFINED CONFIG_SOC_NRF54L15_CPUAPP) - set(otp_start_addr "0xffd500") - set(otp_size 1276) # 319 * 4 -endif() - -if (DEFINED CONFIG_SOC_SERIES_NRF54LX) - set(soc_nvs_controller rram_controller) - set(soc_nvs_controller_driver_kc CONFIG_SOC_FLASH_NRF_RRAM) -else() - set(soc_nvs_controller flash_controller) - set(soc_nvs_controller_driver_kc CONFIG_SOC_FLASH_NRF) -endif() - -add_region( - NAME sram_primary - SIZE ${CONFIG_PM_SRAM_SIZE} - BASE ${CONFIG_PM_SRAM_BASE} - PLACEMENT complex - DYNAMIC_PARTITION sram_primary - ) - -math(EXPR flash_size "${CONFIG_FLASH_SIZE} * 1024" OUTPUT_FORMAT HEXADECIMAL) - -if (CONFIG_SOC_SERIES_NRF91X OR CONFIG_SOC_NRF5340_CPUAPP OR CONFIG_SOC_NRF54L15_CPUAPP) - add_region( - NAME otp - SIZE ${otp_size} - BASE ${otp_start_addr} - PLACEMENT start_to_end - ) -endif() -add_region( - NAME flash_primary - SIZE ${flash_size} - BASE ${CONFIG_FLASH_BASE_ADDRESS} - PLACEMENT complex - DEVICE ${soc_nvs_controller} - DEFAULT_DRIVER_KCONFIG ${soc_nvs_controller_driver_kc} - ) - -dt_chosen(ext_flash_dev PROPERTY nordic,pm-ext-flash) -if (DEFINED ext_flash_dev) - dt_prop(num_bits PATH ${ext_flash_dev} PROPERTY size) - math(EXPR num_bytes "${num_bits} / 8") - - set(external_flash_driver_kconfig CONFIG_PM_EXTERNAL_FLASH_HAS_DRIVER) - - add_region( - NAME external_flash - SIZE ${num_bytes} - BASE ${CONFIG_PM_EXTERNAL_FLASH_BASE} - PLACEMENT start_to_end - DEVICE "DT_CHOSEN(nordic_pm_ext_flash)" - DEFAULT_DRIVER_KCONFIG ${external_flash_driver_kconfig} - ) -endif() - -# If simultaneous updates of the network core and application core is supported -# we add a region which is used to emulate flash. In reality this data is being -# placed in RAM. This is used to bank the network core update in RAM while -# the application core update is banked in flash. This works since the nRF53 -# application core has 512kB of RAM and the network core only has 256kB of flash -get_shared( - mcuboot_NRF53_MULTI_IMAGE_UPDATE - IMAGE mcuboot - PROPERTY NRF53_MULTI_IMAGE_UPDATE - ) - -get_shared( - mcuboot_NRF53_RECOVERY_NETWORK_CORE - IMAGE mcuboot - PROPERTY NRF53_RECOVERY_NETWORK_CORE - ) - -if ((DEFINED mcuboot_NRF53_MULTI_IMAGE_UPDATE) OR (DEFINED mcuboot_NRF53_RECOVERY_NETWORK_CORE)) - # This region will contain the 'mcuboot_secondary' partition, and the banked - # updates for the network core will be stored here. - get_shared(ram_flash_label IMAGE mcuboot PROPERTY RAM_FLASH_LABEL) - get_shared(ram_flash_addr IMAGE mcuboot PROPERTY RAM_FLASH_ADDR) - get_shared(ram_flash_size IMAGE mcuboot PROPERTY RAM_FLASH_SIZE) - - add_region( - NAME ram_flash - SIZE ${ram_flash_size} - BASE ${ram_flash_addr} - PLACEMENT start_to_end - DEVICE ${ram_flash_label} - DEFAULT_DRIVER_KCONFIG CONFIG_FLASH_SIMULATOR - ) -endif() - -if (DOMAIN) - set(UNDERSCORE_DOMAIN _${DOMAIN}) -endif() - -set(pm_out_partition_file ${APPLICATION_BINARY_DIR}/partitions${UNDERSCORE_DOMAIN}.yml) -set(pm_out_region_file ${APPLICATION_BINARY_DIR}/regions${UNDERSCORE_DOMAIN}.yml) -set(pm_out_dotconf_file ${APPLICATION_BINARY_DIR}/pm${UNDERSCORE_DOMAIN}.config) - -set(pm_cmd - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/partition_manager.py - --input-files ${input_files} - --regions ${regions} - --output-partitions ${pm_out_partition_file} - --output-regions ${pm_out_region_file} - ${dynamic_partition_argument} - ${static_configuration} - ${region_arguments} - ) - -set(pm_output_cmd - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/partition_manager_output.py - --input-partitions ${pm_out_partition_file} - --input-regions ${pm_out_region_file} - --config-file ${pm_out_dotconf_file} - ) - -# Run the partition manager algorithm. -execute_process( - COMMAND - ${pm_cmd} - RESULT_VARIABLE ret - ) - -if(NOT ${ret} EQUAL "0") - message(FATAL_ERROR "Partition Manager failed, aborting. Command: ${pm_cmd}") -endif() - -# Produce header files and config file. -execute_process( - COMMAND - ${pm_output_cmd} - RESULT_VARIABLE ret - ) - -if(NOT ${ret} EQUAL "0") - message(FATAL_ERROR "Partition Manager output generation failed, aborting. Command: ${pm_output_cmd}") -endif() - -# Create a dummy target that we can add properties to for -# extraction in generator expressions. -add_custom_target(partition_manager) - -# Make Partition Manager configuration available in CMake -import_pm_config(${pm_out_dotconf_file} pm_var_names) - -foreach(name ${pm_var_names}) - set_property( - TARGET partition_manager - PROPERTY ${name} - ${${name}} - ) -endforeach() - -# Turn the space-separated list into a Cmake list. -string(REPLACE " " ";" PM_ALL_BY_SIZE ${PM_ALL_BY_SIZE}) - -# Iterate over every partition, from smallest to largest. -foreach(part ${PM_ALL_BY_SIZE}) - string(TOUPPER ${part} PART) - get_property(${part}_PM_HEX_FILE GLOBAL PROPERTY ${part}_PM_HEX_FILE) - get_property(${part}_PM_ELF_FILE GLOBAL PROPERTY ${part}_PM_ELF_FILE) - - # Process container partitions (if it has a SPAN list it is a container partition). - if(DEFINED PM_${PART}_SPAN) - string(REPLACE " " ";" PM_${PART}_SPAN ${PM_${PART}_SPAN}) - list(APPEND containers ${part}) - endif() - - # Include the partition in the merge operation if it has a hex file. - if(DEFINED ${part}_PM_HEX_FILE) - get_property(${part}_PM_TARGET GLOBAL PROPERTY ${part}_PM_TARGET) - list(APPEND explicitly_assigned ${part}) - else() - if(${part} IN_LIST images) - get_shared(${part}_bin_dir IMAGE ${part} PROPERTY ZEPHYR_BINARY_DIR) - get_shared(${part}_hex_file IMAGE ${part} PROPERTY KERNEL_HEX_NAME) - get_shared(${part}_elf_file IMAGE ${part} PROPERTY KERNEL_ELF_NAME) - set(${part}_PM_HEX_FILE ${${part}_bin_dir}/${${part}_hex_file}) - set(${part}_PM_ELF_FILE ${${part}_bin_dir}/${${part}_elf_file}) - set(${part}_PM_TARGET ${part}_subimage) - elseif(${part} IN_LIST containers) - set(${part}_PM_HEX_FILE ${PROJECT_BINARY_DIR}/${part}.hex) - set(${part}_PM_TARGET ${part}_hex) - endif() - list(APPEND implicitly_assigned ${part}) - endif() -endforeach() - -if (${is_dynamic_partition_in_domain}) - set(merged_suffix _${DOMAIN}) - string(TOUPPER ${merged_suffix} MERGED_SUFFIX) -endif() -set(merged merged${merged_suffix}) -set(MERGED MERGED${MERGED_SUFFIX}) - -set(PM_${MERGED}_SPAN ${implicitly_assigned} ${explicitly_assigned}) -set(${merged}_overlap TRUE) # Enable overlapping for the merged hex file. - -# Iterate over all container partitions, plus the "fake" merged paritition. -# The loop will create a hex file for each iteration. -foreach(container ${containers} ${merged}) - string(TOUPPER ${container} CONTAINER) - - # Prepare the list of hex files and list of dependencies for the merge command. - foreach(part ${PM_${CONTAINER}_SPAN}) - string(TOUPPER ${part} PART) - list(APPEND ${container}hex_files ${${part}_PM_HEX_FILE}) - list(APPEND ${container}elf_files ${${part}_PM_ELF_FILE}) - list(APPEND ${container}targets ${${part}_PM_TARGET}) - endforeach() - - # Do not merge hex files for empty partitions - if(NOT ${container}hex_files) - list(REMOVE_ITEM PM_${MERGED}_SPAN ${container}) - continue() - endif() - - # If overlapping is enabled, add the appropriate argument. - if(${${container}_overlap}) - set(${container}overlap_arg --overlap=replace) - endif() - - # Add command to merge files. - add_custom_command( - OUTPUT ${PROJECT_BINARY_DIR}/${container}.hex - COMMAND - ${PYTHON_EXECUTABLE} - ${ZEPHYR_BASE}/scripts/build/mergehex.py - -o ${PROJECT_BINARY_DIR}/${container}.hex - ${${container}overlap_arg} - ${${container}hex_files} - DEPENDS - ${${container}targets} - ${${container}hex_files} - # SES will load symbols from all elf files listed as dependencies to - # ${PROJECT_BINARY_DIR}/merged.hex. Therefore we add - # ${${container}elf_files} as dependency to ensure they are loaded by SES - # even though it is unnecessary for building the application. - ${${container}elf_files} - ) - - # Wrapper target for the merge command. - add_custom_target( - ${container}_hex - ALL DEPENDS - ${PROJECT_BINARY_DIR}/${container}.hex - ) - -endforeach() - -if (CONFIG_SECURE_BOOT AND CONFIG_BOOTLOADER_MCUBOOT) - # Create symbols for the offsets required for moving test update hex files - # to MCUBoots secondary slot. This is needed because objcopy does not - # support arithmetic expressions as argument (e.g. '0x100+0x200'), and all - # of the symbols used to generate the offset is only available as a - # generator expression when MCUBoots cmake code exectues. This because - # partition manager is performed as the last step in the configuration stage. - if(CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY AND CONFIG_HAS_HW_NRF_QSPI) - if(DEFINED ext_flash_dev) - get_filename_component(qspi_node ${ext_flash_dev} DIRECTORY) - else() - dt_nodelabel(qspi_node NODELABEL "qspi") - endif() - if(DEFINED qspi_node) - dt_reg_addr(xip_addr PATH ${qspi_node} NAME qspi_mm) - if(NOT DEFINED xip_addr) - message(WARNING "\ - Could not find memory mapped address for XIP. Generated update hex files will \ - not have the correct base address. Hence they can not be programmed directly \ - to the external flash") - endif() - endif() - else() - set(xip_addr 0) - endif() - - math(EXPR s0_offset "${xip_addr} + ${PM_MCUBOOT_SECONDARY_ADDRESS} - ${PM_S0_ADDRESS}") - math(EXPR s1_offset "${xip_addr} + ${PM_MCUBOOT_SECONDARY_ADDRESS} - ${PM_S1_ADDRESS}") - - set_property( - TARGET partition_manager - PROPERTY s0_TO_SECONDARY - ${s0_offset} - ) - set_property( - TARGET partition_manager - PROPERTY s1_TO_SECONDARY - ${s1_offset} - ) -endif() - -# Calculate absolute address for the wi-fi firmware patch location. -if (CONFIG_WIFI_NRF70 AND CONFIG_NRF_WIFI_PATCHES_EXT_FLASH_STORE) - if(DEFINED ext_flash_dev) - get_filename_component(qspi_node ${ext_flash_dev} DIRECTORY) - else() - dt_nodelabel(qspi_node NODELABEL "qspi") - endif() - if(DEFINED qspi_node) - dt_reg_addr(xip_addr PATH ${qspi_node} NAME qspi_mm) - if(NOT DEFINED xip_addr) - message(WARNING "\ - Could not find memory mapped address for XIP. Generated update hex files will \ - not have the correct base address. Hence they can not be programmed directly \ - to the external flash") - endif() - else() - set(xip_addr 0) - endif() - - math(EXPR wifi_fw_abs_addr "${xip_addr} + ${PM_NRF70_WIFI_FW_OFFSET}") - set_property( - TARGET partition_manager - PROPERTY nrf70_wifi_fw_XIP_ABS_ADDR - ${wifi_fw_abs_addr} - ) -endif() - -if (is_dynamic_partition_in_domain) - # We are being built as sub image. - # Expose the generated partition manager configuration files to parent image. - # This is used by the root image to create the global configuration in - # pm_config.h. - set_shared(IMAGE ${DOMAIN} PROPERTY PM_DOMAIN_PARTITIONS ${pm_out_partition_file}) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_DOMAIN_REGIONS ${pm_out_region_file}) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_DOMAIN_HEADER_FILES ${header_files}) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_DOMAIN_IMAGES ${prefixed_images}) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_HEX_FILE ${PROJECT_BINARY_DIR}/${merged}.hex) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_DOTCONF_FILES ${pm_out_dotconf_file}) - set_shared(IMAGE ${DOMAIN} PROPERTY PM_APP_HEX ${PROJECT_BINARY_DIR}/app.hex) - set_shared(IMAGE ${IMAGE_NAME} APPEND PROPERTY BUILD_BYPRODUCTS ${PROJECT_BINARY_DIR}/${merged}.hex) - if(CONFIG_SECURE_BOOT) - # Only when secure boot is enabled the app will be signed. - set_shared(IMAGE ${DOMAIN} PROPERTY PM_SIGNED_APP_HEX ${PROJECT_BINARY_DIR}/signed_by_b0_app.hex) - endif() -else() - # This is the root image, generate the global pm_config.h - # First, include the shared properties for all child images. - if (PM_DOMAINS) - # We ensure the existence of PM_DOMAINS to support older cmake versions. - # When version >= 3.17 is required this check can be removed. - list(REMOVE_DUPLICATES PM_DOMAINS) - endif() - foreach (d ${PM_DOMAINS}) - # Don't include shared vars from own domain. - if (NOT ("${DOMAIN}" STREQUAL "${d}")) - get_shared(shared_header_files IMAGE ${d} PROPERTY PM_DOMAIN_HEADER_FILES) - get_shared(shared_prefixed_images IMAGE ${d} PROPERTY PM_DOMAIN_IMAGES) - get_shared(shared_pm_out_partition_file IMAGE ${d} PROPERTY PM_DOMAIN_PARTITIONS) - get_shared(shared_pm_out_region_file IMAGE ${d} PROPERTY PM_DOMAIN_REGIONS) - get_shared(shared_domain_hex_files IMAGE ${d} PROPERTY PM_HEX_FILE) - - list(APPEND header_files ${shared_header_files}) - list(APPEND prefixed_images ${shared_prefixed_images}) - list(APPEND pm_out_partition_file ${shared_pm_out_partition_file}) - list(APPEND pm_out_region_file ${shared_pm_out_region_file}) - list(APPEND domain_hex_files ${shared_domain_hex_files}) - list(APPEND global_hex_depends ${${d}_PM_DOMAIN_DYNAMIC_PARTITION}_subimage) - - # Add domain prefix cmake variables for all partitions - # Here, we actually overwrite the already imported pm.config values - # for our own domain. This is not an issue since all of these variables - # are accessed through the 'partition_manager' target, and most likely - # through generator expression, as this file is one of the last - # cmake files executed in the configure stage. - get_shared(conf_file IMAGE ${d} PROPERTY PM_DOTCONF_FILES) - import_pm_config(${conf_file} ${d}_pm_var_names) - - foreach(name ${${d}_pm_var_names}) - set_property( - TARGET partition_manager - PROPERTY ${d}_${name} - ${${name}} - ) - endforeach() - endif() - endforeach() - - if (CONFIG_BOOTLOADER_MCUBOOT) - if (CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY AND CONFIG_HAS_HW_NRF_QSPI) - # First we see if an ext flash dev has been chosen, if not, then we look - # up the 'qspi' node and assume that this has the required address. - if (DEFINED ext_flash_dev) - get_filename_component(qspi_node ${ext_flash_dev} DIRECTORY) - else() - dt_nodelabel(qspi_node NODELABEL "qspi") - endif() - - # If the qspi node is still not defined we are building on a platform - # which does not have the qspi peripheral, in which case no hex files - # will be generated for the secondary slot. - if(DEFINED qspi_node) - dt_reg_addr(xip_addr PATH ${qspi_node} NAME qspi_mm) - if(NOT DEFINED xip_addr) - message(WARNING "\ -Could not find memory mapped address for XIP. Generated update hex files will \ -not have the correct base address. Hence they can not be programmed directly \ -to the external flash") - endif() - endif() - endif() - - # Create symbols for the offset required for moving the signed network - # core application to MCUBoots secondary slot. This is needed - # because objcopy does not support arithmetic expressions as argument - # (e.g. '0x100+0x200'), and all of the symbols used to generate the - # offset are only available as a generator expression when MCUBoots - # cmake code executes. - - # Check if a signed version of the network core application is defined. - # If so, this indicates that we need to support firmware updates on the - # network core. This again means that we should generate the required - # hex files. - get_shared(cpunet_signed_app_hex IMAGE CPUNET PROPERTY PM_SIGNED_APP_HEX) - - if (CONFIG_NRF53_UPGRADE_NETWORK_CORE - AND DEFINED cpunet_signed_app_hex) - # The address coming from other domains are not available in this scope - # since it is imported by a different domain. Hence, it must be fetched - # through the 'partition_manager' target. - get_target_property(net_app_addr partition_manager CPUNET_PM_APP_ADDRESS) - - get_shared( - mcuboot_NRF53_MULTI_IMAGE_UPDATE - IMAGE mcuboot - PROPERTY NRF53_MULTI_IMAGE_UPDATE - ) - - # Check if multi image updates are enabled, in which case we need - # to use the "_1" variant of the secondary partition for the network core. - if(DEFINED mcuboot_NRF53_MULTI_IMAGE_UPDATE) - set(sec_slot_idx "_1") - endif() - - # Calculate the offset from the address which the net/app core app is linked - # against to the secondary slot. We need these values to generate hex files - # which targets the secondary slot. - math(EXPR net_app_to_secondary - "${xip_addr} \ - + ${PM_MCUBOOT_SECONDARY${sec_slot_idx}_ADDRESS} \ - - ${net_app_addr} \ - + ${PM_MCUBOOT_PAD_SIZE}" - ) - - set_property( - TARGET partition_manager - PROPERTY net_app_TO_SECONDARY - ${net_app_to_secondary} - ) - - # This value is needed by `imgtool.py` which is used to sign the images. - set_property( - TARGET partition_manager - PROPERTY net_app_slot_size - ${PM_MCUBOOT_SECONDARY${sec_slot_idx}_SIZE} - ) - endif() - - math(EXPR app_to_secondary - "${xip_addr} \ - + ${PM_MCUBOOT_SECONDARY_ADDRESS} \ - - ${PM_MCUBOOT_PRIMARY_ADDRESS}" - ) - - set_property( - TARGET partition_manager - PROPERTY app_TO_SECONDARY - ${app_to_secondary} - ) - endif() - - # Explicitly add the root image domain hex file to the list - list(APPEND domain_hex_files ${PROJECT_BINARY_DIR}/${merged}.hex) - list(APPEND global_hex_depends ${merged}_hex) - - # Now all partition manager configuration from all images and domains are - # available. Generate the global pm_config.h, and provide it to all images. - set(pm_global_output_cmd - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/partition_manager_output.py - --input-partitions ${pm_out_partition_file} - --input-regions ${pm_out_region_file} - --header-files ${header_files} - --images ${prefixed_images} - ) - - execute_process( - COMMAND - ${pm_global_output_cmd} - RESULT_VARIABLE ret - ) - - if(NOT ${ret} EQUAL "0") - message(FATAL_ERROR "Partition Manager GLOBAL output generation failed, - aborting. Command: ${pm_global_output_cmd}") - endif() - - set_property( - TARGET partition_manager - PROPERTY PM_CONFIG_FILES - ${pm_out_partition_file} - ) - - set_property( - TARGET partition_manager - PROPERTY PM_DEPENDS - ${global_hex_depends} - ) - - add_custom_target( - partition_manager_report - COMMAND - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/partition_manager_report.py - --input ${pm_out_partition_file} - COMMAND_EXPAND_LISTS - ) - - if (PM_DOMAINS) - # For convenience, generate global hex file containing all domains' hex - # files. - set(merged_domains merged_domains) - set(final_merged ${ZEPHYR_BINARY_DIR}/${merged_domains}.hex) - - # Add command to merge files. - add_custom_command( - OUTPUT ${final_merged} - COMMAND - ${PYTHON_EXECUTABLE} - ${ZEPHYR_BASE}/scripts/build/mergehex.py - -o ${final_merged} - ${domain_hex_files} - DEPENDS - ${domain_hex_files} - ${global_hex_depends} - ) - - # Wrapper target for the merge command. - add_custom_target(merged_domains_hex ALL DEPENDS ${final_merged}) - endif() - - set(ZEPHYR_RUNNER_CONFIG_KERNEL_HEX "${final_merged}" - CACHE STRING "Path to merged image in Intel Hex format" FORCE) - -endif() - -# We need to tell the flash runner use the merged hex file instead of -# 'zephyr.hex'This is typically done by setting the 'hex_file' property of the -# 'runners_yaml_props_target' target. However, since the CMakeLists.txt file -# reading those properties has already run, and the 'hex_file' property -# is not evaluated in a generator expression, it is too late at this point to -# set that variable. Hence we must operate on the 'yaml_contents' property, -# which is evaluated in a generator expression. - -if (merged_domains) - # Multiple domains are included in the build, point to the result of - # merging the merged hex file for all domains. - set(merged_hex_to_flash ${merged_domains}.hex) -else() - set(merged_hex_to_flash ${merged}.hex) -endif() - -get_target_property(runners_content runners_yaml_props_target yaml_contents) - -string(REGEX REPLACE "hex_file:[^\n]*" - "hex_file: ${merged_hex_to_flash}" runners_content_updated_hex_file ${runners_content}) - -set_property( - TARGET runners_yaml_props_target - PROPERTY yaml_contents ${runners_content_updated_hex_file} - ) diff --git a/cmake/sysbuild/lwm2m_carrier_divided_dfu.cmake b/cmake/sysbuild/lwm2m_carrier_divided_dfu.cmake index 4d19e3f0a6e9..9487589f3b11 100644 --- a/cmake/sysbuild/lwm2m_carrier_divided_dfu.cmake +++ b/cmake/sysbuild/lwm2m_carrier_divided_dfu.cmake @@ -30,6 +30,4 @@ function(lwm2m_carrier_divided_dfu) ) endfunction(lwm2m_carrier_divided_dfu) -if(SYSBUILD) - lwm2m_carrier_divided_dfu() -endif() +lwm2m_carrier_divided_dfu() diff --git a/doc/nrf/app_dev/config_and_build/multi_image.rst b/doc/nrf/app_dev/config_and_build/multi_image.rst deleted file mode 100644 index 5292c17eb22d..000000000000 --- a/doc/nrf/app_dev/config_and_build/multi_image.rst +++ /dev/null @@ -1,412 +0,0 @@ -.. _ug_multi_image: - -Multi-image builds using child and parent images -################################################ - -.. contents:: - :local: - :depth: 2 - -.. caution:: - |sysbuild_related_deprecation_note| - -The firmware programmed to a device can be composed of either one application or several separate images. -In the latter case, the *parent* :term:`image file` requires one or more other images (the *child images*) to be present. -The child image then *chain-loads*, or *boots*, the parent image, which could also be a child image to another parent image, and boots that one. - -The most common use cases for builds composed of multiple images are applications that require a bootloader to be present or applications for multi-core CPUs. - -Using multiple images has the following advantages: - -* You can run the linker multiple times and partition the final firmware into several regions. - This partitioning is often useful for bootloaders. -* Since there is a symbol table for each image, the same symbol names can exist multiple times in the final firmware. - This is useful for bootloader images, which can require their own copy of a library that the application uses, but in a different version or configuration. -* In multi-core builds, the :term:`build configuration` of a child image in a separate core can be made known to the parent image. - -For the list of image files output by the build system for the multi-image builds, refer to :ref:`app_build_output_files` page. - -.. _ug_multi_image_when_to_use_images: - -When to use multiple images -*************************** - -In the |NCS|, multiple images are required in the following scenarios: - -First-stage and second-stage bootloaders - The first-stage bootloader establishes a root of trust by verifying the next step in the boot sequence. - This first-stage bootloader is immutable, which means it cannot be updated or deleted. - If a second-stage bootloader is present, then the first-stage bootloader is responsible for booting and updating the second-stage bootloader, which in turn is responsible for booting and updating the application. - As such, the first-stage bootloader, the second-stage bootloader, and the application must be located in different images. - In this scenario, the application is the parent image and the bootloaders are two separate child images. - - See :ref:`ug_bootloader` and :ref:`ug_bootloader_adding` for more information. - -nRF5340 development kit support - The nRF5340 development kit (DK) contains two separate processors: a network core and an application core. - When programming an application for the nRF5340 DK, the application must be divided into at least two images, one for each core. - - See :ref:`ug_nrf5340` for more information. - -nRF5340 Audio development kit support - The nRF5340 Audio development kit (DK) is based on the nRF5340 development kit and also contains two separate processors. - When programming an application for the nRF5340 Audio DK, the application core image is built from a combination of different configuration files. - The network core image is programmed with an application-specific precompiled Bluetooth Low Energy Controller binary file that contains the LE Audio Controller Subsystem for nRF53. - - See the documentation for :ref:`nrf53_audio_app` for more information. - -.. _ug_multi_image_default_config: - -Default configuration -********************* - -The |NCS| samples are set up to build all related images as one solution, starting from the parent image. -This is referred to as a *multi-image build*. - -When building the parent image, you can configure how the child image should be handled: - -* Build the child image from the source and include it with the parent image. - This is the default setting. -* Use a prebuilt HEX file of the child image and include it with the parent image. -* Ignore the child image. - -When building the child image from the source or using a prebuilt HEX file, the build system merges the HEX files of both the parent and child image, so that they can be programmed in one single step. -This means that you can enable and integrate an additional image just by using the default configuration. - -To change the default configuration and configure how a child image is handled, locate the ``BUILD_STRATEGY`` Kconfig options for the child image in the parent image configuration. -For example, to use a prebuilt HEX file of the MCUboot instead of building it, select :kconfig:option:`CONFIG_MCUBOOT_BUILD_STRATEGY_USE_HEX_FILE` instead of the default :kconfig:option:`CONFIG_MCUBOOT_BUILD_STRATEGY_FROM_SOURCE`, and specify the HEX file in :kconfig:option:`CONFIG_MCUBOOT_HEX_FILE`. -To ignore an MCUboot child image, select :kconfig:option:`CONFIG_MCUBOOT_BUILD_STRATEGY_SKIP_BUILD` instead of :kconfig:option:`CONFIG_MCUBOOT_BUILD_STRATEGY_FROM_SOURCE`. - -.. _ug_multi_image_defining: - -Defining and enabling a child image -*********************************** - -You can enable existing child images in the |NCS| by enabling the respective modules in the parent image and selecting the desired build strategy. - -To turn an application that you have implemented into a child image that can be included in a parent image, you must update the build scripts to enable the child image and add the required configuration options. -You should also know how image-specific variables are disambiguated and what targets of the child images are available. - -.. _ug_multi_image_build_scripts: - -Updating the build scripts -========================== - -To make it possible to enable a child image from a parent image, you must include the child image in the build script. -If you need to perform this operation out-of-tree (that is, without modifying |NCS| code), or from the top-level CMakeLists.txt in your sample, see :ref:`ug_multi_image_add_child_image_oot`. - -To do so, place the code from the following example in the CMake tree that is conditional on a configuration option. -In the |NCS|, the code is included in the :file:`CMakeLists.txt` file for the samples, and in the MCUboot repository. - -.. code-block:: cmake - - if (CONFIG_SECURE_BOOT) - add_child_image( - NAME b0 - SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/bootloader - ) - endif() - - if (CONFIG_BOOTLOADER_MCUBOOT) - add_child_image( - NAME mcuboot - SOURCE_DIR ${MCUBOOT_DIR}/boot/zephyr - ) - endif() - -In this code, ``add_child_image`` registers the child image with the given name and file path and executes the build scripts of the child image. -Note that both the child image's application build scripts and the core build scripts are executed. -The core build scripts might use a different configuration and possibly different devicetree settings. - -If you have to execute a child image on a different core, you must specify the namespace for the child image as *domain* when adding the child image. -See the following example: - -.. code-block:: cmake - - add_child_image( - NAME hci_ipc - SOURCE_DIR ${ZEPHYR_BASE}/samples/bluetooth/hci_ipc - DOMAIN CPUNET - ) - -A *domain* is well-defined if there is the ``CONFIG_DOMAIN_${DOMAIN}_BOARD`` configuration option in Kconfig. - -.. _ug_multi_image_add_child_image_oot: - -Adding a child image using Zephyr modules -========================================= - -Any call to ``add_child_image`` must be done *after* :file:`nrf/cmake/extensions.cmake` is invoked, but *before* :file:`multi_image.cmake` is invoked. -In some scenarios, this is not possible without modifying the |NCS| build code, for example, from top-level sample files and project :file:`CMakeLists.txt` files. - -To avoid this issue, use the *Modules* mechanism provided by the Zephyr build system. -The following example shows how to add the required module from a top-level sample :file:`CMakeLists.txt`. - -.. code-block:: cmake - - 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) - - target_sources(app PRIVATE src/main.c) - -A :file:`zephyr/module.yml` file is needed at the base of the added module. -The following example specifies only the path to the :file:`CMakeLists.txt` of the new module. -See :ref:`modules` for more details. - -.. code-block:: - - build: - cmake: aci - -The :file:`CMakeLists.txt` located in the directory pointed to by :file:`zephyr/module.yml` will be invoked when ``add_child_image`` can be invoked. - -.. code-block:: cmake - - add_child_image( - NAME remote - SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../remote - DOMAIN remote - BOARD ${CONFIG_APP_REMOTE_BOARD} - ) - -Adding configuration options -============================ - -When enabling a child image, you must select the build strategy to define how the image should be included. -The following three options are available: - -* ``_BUILD_STRATEGY_FROM_SOURCE`` - Build the child image from source along with the parent image. -* ``_BUILD_STRATEGY_USE_HEX_FILE`` - Merge the specified HEX file of the child image with the parent image, using ``_HEX_FILE`` to specify the HEX file. -* ``_BUILD_STRATEGY_SKIP_BUILD`` - Ignore the child image when building and build only the parent image. - -.. note:: - - Child images that are built with the build strategy ``_BUILD_STRATEGY_SKIP_BUILD`` or ``_BUILD_STRATEGY_USE_HEX_FILE`` must define a :ref:`static partition `. - -Add these configuration options to the Kconfig file of your child image, replacing ```` with the uppercase name of your child image that is specified in ``add_child_image``. -To do this, include the :file:`Kconfig.template.build_strategy` template as follows: - -.. code-block:: Kconfig - - module=MCUBOOT - source "${ZEPHYR_NRF_MODULE_DIR}/subsys/partition_manager/Kconfig.template.build_strategy" - -.. _ug_multi_image_variables: - -Image-specific variables -======================== - -The child and parent images are executed in different CMake processes and thus have different namespaces. - -Variables in the parent image are not propagated to the child image, with the following exceptions: - -* Any variable named ``_VARIABLEONE`` in a parent image is propagated to the child image named ```` as ``VARIABLEONE``. - See `Temporary variables in child images`_ for more information. -* CMake build settings, such as ``BOARD_DIR``, build type, toolchain info, partition manager info, and similar are always passed to child images. - See `Permanent configuration changes to child images`_ for more information. - -Using these two exceptions, you can set variables in child images from either parent images or the command line, and you can also set variables globally across all images. - -.. _ug_multi_image_variables_fragments: - -Temporary variables in child images ------------------------------------ - -It is possible to provide variables to the child images. -These variables will be valid until you :ref:`clean the build directory pristinely `. - -For example, to change the ``VARIABLEONE`` variable for the ``childimageone`` child image and the parent image, specify the CMake command as follows: - - .. parsed-literal:: - :class: highlight - - cmake -D\ *childimageone*\_\ *VARIABLEONE*\=value -D\ *VARIABLEONE*\=value - -You can extend the CMake command used to create the child images by adding flags to the CMake variable ``EXTRA_MULTI_IMAGE_CMAKE_ARGS``. -For example, add ``--trace-expand`` to that variable to output more debug information. - -With west, you can pass these configuration variables into CMake by using the ``--`` separator: - - .. code-block:: console - - west build -b nrf52840dk/nrf52840 zephyr/samples/hello_world -- \ - -Dmcuboot_CONF_FILE=prj_a.conf \ - -DCONF_FILE=app_prj.conf - -Child image Kconfig modification -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -It is possible to provide Kconfig configuration for child images, either as individual settings or using Kconfig fragments. -Each child image is referenced using its image name. - -These temporary settings will be valid until you :ref:`clean the build directory pristinely `. - -The following example sets the configuration option ``CONFIG_VARIABLEONE=val`` in the child image ``childimageone``: - - .. parsed-literal:: - :class: highlight - - cmake -D\ *childimageone*\_\ *CONFIG_VARIABLEONE=val*\ [...] - -You can add a Kconfig fragment to the child image default configuration in a similar way. -The following example adds an extra Kconfig fragment ``extrafragment.conf`` to ``childimageone``: - - .. parsed-literal:: - :class: highlight - - cmake -D\ *childimageone*\_EXTRA_CONF_FILE=\ *extrafragment.conf*\ [...] - -It is also possible to provide a custom configuration file as a replacement for the default Kconfig file for the child image. -The following example uses the custom configuration file ``myfile.conf`` when building ``childimageone``: - - .. parsed-literal:: - :class: highlight - - cmake -D\ *childimageone*\_CONF_FILE=\ *myfile.conf*\ [...] - -If your application includes multiple child images, then you can combine all the above as follows: - -* Setting ``CONFIG_VARIABLEONE=val`` in the main application. -* Adding a Kconfig fragment ``extrafragment.conf`` to the ``childimageone`` child image, using ``-Dchildimageone_EXTRA_CONF_FILE=extrafragment.conf``. -* Using ``myfile.conf`` as configuration for the ``quz`` child image, using ``-Dquz_CONF_FILE=myfile.conf``. - - .. parsed-literal:: - :class: highlight - - cmake -DCONFIG_VARIABLEONE=val -D\ *childimageone*\_EXTRA_CONF_FILE=\ *extrafragment.conf*\ -Dquz_CONF_FILE=\ *myfile.conf*\ [...] - -See :ref:`ug_bootloader` for more details. - -.. note:: - - The build system grabs the Kconfig fragment or configuration file specified in a CMake argument relative to that image's application directory. - For example, the build system uses ``nrf/samples/bootloader/my-fragment.conf`` when building with the ``-Db0_EXTRA_CONF_FILE=my-fragment.conf`` option, whereas ``-DEXTRA_CONF_FILE=my-fragment.conf`` grabs the fragment from the main application's directory, such as ``zephyr/samples/hello_world/my-fragment.conf``. - -You can also merge multiple fragments into the overall configuration for an image by giving a list of Kconfig fragments as a string, separated using ``;``. -The following example shows how to combine ``abc.conf``, Kconfig fragment of the ``childimageone`` child image, with the ``extrafragment.conf`` fragment: - - .. parsed-literal:: - :class: highlight - - cmake -D\ *childimageone*\_EXTRA_CONF_FILE='\ *extrafragment.conf*\;\ *abc.conf*\' - -When the build system finds the fragment, it outputs their merge during the CMake build output as follows: - -.. parsed-literal:: - :class: highlight - - ... - Merged configuration '\ *extrafragment.conf*\' - Merged configuration '\ *abc.conf*\' - ... - -Child image devicetree modification -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -You can provide devicetree overlays for a child image using ``*.overlay`` files. - -The following example sets the devicetree overlay ``extra.overlay`` to ``childimageone``: - -.. parsed-literal:: - :class: highlight - - cmake -D\ *childimageone*\_DTC_OVERLAY_FILE='\ *extra.overlay*\' - -The build system does also automatically apply any devicetree overlay located in the ``child_image`` folder and named as follows (where ``ACI_NAME`` is the name of the child image): - -* ``child_image/.overlay`` -* ``child_image//.overlay`` -* ``child_image//_.overlay`` -* ``child_image//boards/.overlay`` -* ``child_image//boards/_.overlay`` - -.. note:: - - The build system grabs the devicetree overlay files specified in a CMake argument relative to that image's application directory. - For example, the build system uses ``nrf/samples/bootloader/my-dts.overlay`` when building with the ``-Db0_DTC_OVERLAY_FILE=my-dts.overlay`` option, whereas ``-DDTC_OVERLAY_FILE=my-dts.overlay`` grabs the fragment from the main application's directory, such as ``zephyr/samples/hello_world/my-dts.overlay``. - -.. _ug_multi_image_permanent_changes: - -Permanent configuration changes to child images ------------------------------------------------ - -You can make a project automatically pass Kconfig configuration files, fragments, and devicetree overlays to child images by placing them under a predefined path. -For example, in the |NCS| applications and samples that use different :ref:`build types `, the :file:`child_image` folder in the application source directory is often used to apply :ref:`permanent configuration changes `. - -The listing below describes how to leverage this functionality, where ``ACI_NAME`` is the name of the child image to which the configuration will be applied. - -.. literalinclude:: ../../../../cmake/multi_image.cmake - :language: c - :start-at: It is possible for a sample to use a custom set of Kconfig fragments for a - :end-before: set(ACI_CONF_DIR ${config_dir}/child_image) - -When you are using :ref:`app_build_additions_build_types` and the configuration name has been inferred, the child image Kconfig overlay file is searched at :file:`child_image/_.conf`. -Alternatively, the child image Kconfig configuration file can be introduced as :file:`child_image//prj.conf` and follow the same pattern as the parent Kconfig. -For example, :file:`child_image/mcuboot/prj_release.conf` can be used to define the ``release`` build type for the ``mcuboot`` child image. - -Child image targets -=================== - -You can indirectly invoke a selection of child image targets from the parent image. -Currently, the child targets that can be invoked from the parent targets are ``menuconfig``, ``guiconfig``, and any targets listed in ``EXTRA_KCONFIG_TARGETS``. - -To disambiguate targets, use the same prefix convention used for variables. -For example, to run menuconfig, invoke the ``menuconfig`` target to configure the parent image and ``mcuboot_menuconfig`` to configure the MCUboot child image. - -You can also invoke any child target directly from its build directory. -Child build directories are located at the root of the parent's build directory. - -Controlling the build process -============================= - -The child image is built using CMake's build command ``cmake --build``. -This mechanism allows additional control of the build process through CMake. - -CMake options -------------- - -The following CMake options are propagated from the CMake command of the parent image to the CMake command of the child image: - -* ``CMAKE_BUILD_TYPE`` -* ``CMAKE_VERBOSE_MAKEFILE`` - -You can add other CMake options to a specific child image in the same way as you can set :ref:`Image-specific variables `. -For example, add ``-Dmcuboot_CMAKE_VERBOSE_MAKEFILE`` to the parent's CMake command to build the ``mcuboot`` child image with verbose output. - -To enable additional debug information for the multi-image build command, set the CMake option ``MULTI_IMAGE_DEBUG_MAKEFILE`` to the desired debug mode. -For example, add ``-DMULTI_IMAGE_DEBUG_MAKEFILE=explain`` to log the reasons why a command was executed. - -See :ref:`cmake_options` for instructions on how to specify these CMake options for the build. - -CMake environment variables ---------------------------- - -Unlike CMake options, CMake environment variables allow you to control the build process without re-invoking CMake. - -You can use the CMake environment variables `VERBOSE`_ and `CMAKE_BUILD_PARALLEL_LEVEL`_ to control the verbosity and the number of parallel jobs for a build: - -When using the command line or |VSC| terminal window, you must set them before invoking west. -They apply to both the parent and child images. -For example, to build with verbose output and one parallel job, use the following command, where *board_target* is the target for the development kit for which you are building: - -.. parsed-literal:: - :class: highlight - - west build -b *board_target* -- -DCMAKE_VERBOSE_MAKEFILE=1 -DCMAKE_BUILD_PARALLEL_LEVEL=1 - -Memory placement -**************** - -In a multi-image build, all images must be placed in memory so that they do not overlap. -The flash memory start address for each image must be specified by, for example, :kconfig:option:`CONFIG_FLASH_LOAD_OFFSET`. - -Hardcoding the image locations like this works fine for simple use cases like a bootloader that prepares a device, where there are no further requirements on where in memory each image must be placed. -However, more advanced use cases require a memory layout where images are located in a specific order relative to one another. - -The |NCS| provides a Python tool that allows you to specify this kind of relative placement or even a static placement based on start addresses and sizes for the different images. - -See :ref:`partition_manager` for more information about how to set up your partitions and configure your build system. diff --git a/lib/edge_impulse/CMakeLists.txt b/lib/edge_impulse/CMakeLists.txt index 5b69061aa620..6da3f3ff7884 100644 --- a/lib/edge_impulse/CMakeLists.txt +++ b/lib/edge_impulse/CMakeLists.txt @@ -50,10 +50,7 @@ endforeach() list(REMOVE_DUPLICATES EI_URI_LIST) file(GLOB_RECURSE edge_impulse_all_headers "${EDGE_IMPULSE_SOURCE_DIR}/*.h") - -if(SYSBUILD) - zephyr_get(EI_API_KEY_HEADER SYSBUILD GLOBAL) -endif() +zephyr_get(EI_API_KEY_HEADER SYSBUILD GLOBAL) include(ExternalProject) ExternalProject_Add(edge_impulse_project diff --git a/modules/mcuboot/CMakeLists.txt b/modules/mcuboot/CMakeLists.txt index 5ec2643d7c86..fbe8fbd62891 100644 --- a/modules/mcuboot/CMakeLists.txt +++ b/modules/mcuboot/CMakeLists.txt @@ -1,950 +1,3 @@ add_subdirectory(${ZEPHYR_MCUBOOT_MODULE_DIR}/boot/bootutil/zephyr ${CMAKE_CURRENT_BINARY_DIR}/boot/bootutil/zephyr ) - -if(SYSBUILD) - # Code below is partition manager w/ child image support, thus return when - # sysbuild is used. - return() -endif() - -if (CONFIG_MCUBOOT) - if (CONFIG_NRF53_MULTI_IMAGE_UPDATE) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY NRF53_MULTI_IMAGE_UPDATE - ${CONFIG_NRF53_MULTI_IMAGE_UPDATE}) - endif() - - if (CONFIG_NRF53_RECOVERY_NETWORK_CORE) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY NRF53_RECOVERY_NETWORK_CORE - ${CONFIG_NRF53_RECOVERY_NETWORK_CORE}) - endif() - - dt_nodelabel(ram_flash_ctrl_dev NODELABEL nordic_ram_flash_controller) - if (DEFINED ram_flash_ctrl_dev) - # Share the information about the ram_flash node with the parent image. - # This information is used to create the partition manager region. - dt_nodelabel(ram_flash_dev NODELABEL flash_sim0) - dt_reg_addr(ram_flash_addr PATH ${ram_flash_dev}) - dt_reg_size(ram_flash_size PATH ${ram_flash_dev}) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY RAM_FLASH_ADDR ${ram_flash_addr}) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY RAM_FLASH_SIZE ${ram_flash_size}) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY RAM_FLASH_LABEL nordic_ram_flash_controller) - endif() -endif() - -if(CONFIG_XIP_SPLIT_IMAGE) - # Add MCUboot extra configuration file to disable image verification and use 3 images - add_overlay_config( - mcuboot - ${ZEPHYR_NRF_MODULE_DIR}/modules/mcuboot/nrf5340_exip_image.conf - ) -endif() - -if(CONFIG_BOOTLOADER_MCUBOOT) - if (CONFIG_NCS_IS_VARIANT_IMAGE) - # NCS Handles everything regarding mcuboot, ensure Zephyr doesn't interfere. - # This is a temporary solution until Zephyr signing has been made more modular. - set(CONFIG_BOOTLOADER_MCUBOOT False PARENT_SCOPE) - - # When building the variant of an image, the configuration of the variant image - # is identical to the base image, except 'CONFIG_NCS_IS_VARIANT_IMAGE'. The - # logic below should only be performed once, for the base image, not for the variant variant. - # Hence, we have this early return to avoid execution of this file for the variant image. - return() - endif() - - include(${ZEPHYR_NRF_MODULE_DIR}/cmake/fw_zip.cmake) - include(${ZEPHYR_NRF_MODULE_DIR}/cmake/dfu_multi_image.cmake) - - function(sign) - # Signs a hex image - # - # Required arguments are: - # SIGNED_BIN_FILE_IN - (required) Hex image to sign - # SIGNED_HEX_FILE_NAME_PREFIX - (required) Prefix of the output image - # SLOT_SIZE - (required) The size of the primary partition - # SIGNED_HEX_FILE_OUT - (required) Signed hex output image - # - # Optional arguments: - # START_ADDRESS_OFFSET - (optional) Offset - # SIGNED_BIN_FILE_OUT - (optional) Signed bin output image - # SIGNED_HEX_TEST_FILE_OUT - (optional) Signed hex output test image including IMAGE_MAGIC - # IMAGE_DEPENDENCIES - (optional) Dependencies between signed image and other images - # ROM_FIXED - (optional) Start address of image - # DEPENDS - (optional) One or more dependencies for signing the hex image - set(oneValueArgs SIGNED_BIN_FILE_IN SIGNED_HEX_FILE_NAME_PREFIX SLOT_SIZE SIGNED_HEX_FILE_OUT) - set(oneValueOptionalArgs SIGNED_BIN_FILE_OUT SIGNED_HEX_TEST_FILE_OUT START_ADDRESS_OFFSET IMAGE_DEPENDENCIES ROM_FIXED) - set(multiValueArgs DEPENDS) - cmake_parse_arguments(SIGN_ARG "" "${oneValueArgs};${oneValueOptionalArgs}" "${multiValueArgs}" ${ARGN}) - check_arguments_required_all(sign SIGN_ARG ${oneValueArgs}) - - set(signed_hex ${SIGN_ARG_SIGNED_HEX_FILE_NAME_PREFIX}_signed.hex) - set(${SIGN_ARG_SIGNED_HEX_FILE_OUT} ${signed_hex} PARENT_SCOPE) - set(to_sign_bin ${SIGN_ARG_SIGNED_HEX_FILE_NAME_PREFIX}_to_sign.bin) - set(update_bin ${SIGN_ARG_SIGNED_HEX_FILE_NAME_PREFIX}_update.bin) - set(test_update_hex ${SIGN_ARG_SIGNED_HEX_FILE_NAME_PREFIX}_test_update.hex) - if(DEFINED SIGN_ARG_SIGNED_BIN_FILE_OUT) - set(${SIGN_ARG_SIGNED_BIN_FILE_OUT} ${update_bin} PARENT_SCOPE) - endif() - if(DEFINED SIGN_ARG_SIGNED_HEX_TEST_FILE_OUT) - set(${SIGN_ARG_SIGNED_HEX_TEST_FILE_OUT} ${test_update_hex} PARENT_SCOPE) - endif() - - if(DEFINED SIGN_ARG_ROM_FIXED) - set(SIGN_ARG_ROM_FIXED --rom-fixed ${SIGN_ARG_ROM_FIXED}) - endif() - - # Ensure that it is possible to move the secondary slot to the memory - # mapped area for external flash if the secondary slot is located in - # external flash. Only devices with 'qspi' should have hex files generated - # for the secondary slot, since these are the only ones with a memory mapped - # area. - dt_nodelabel(qspi_node NODELABEL "qspi") - if ((NOT CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY OR DEFINED qspi_node) AND - SIGN_ARG_START_ADDRESS_OFFSET) - set(moved_test_update_hex - ${SIGN_ARG_SIGNED_HEX_FILE_NAME_PREFIX}_moved_test_update.hex - ) - - if(DEFINED SIGN_ARG_SIGNED_HEX_TEST_FILE_OUT) - set(${SIGN_ARG_SIGNED_HEX_TEST_FILE_OUT} - ${test_update_hex} ${moved_test_update_hex} PARENT_SCOPE - ) - endif() - - add_custom_command( - OUTPUT - ${moved_test_update_hex} # Signed hex with IMAGE_MAGIC located at secondary slot - - COMMAND - # Create version of test update which is located at the secondary slot. - # Hence, if a programmer is given this hex file, it will flash it - # to the secondary slot, and upon reboot mcuboot will swap in the - # contents of the hex file. - ${CMAKE_OBJCOPY} - --input-target=ihex - --output-target=ihex - --change-address=${SIGN_ARG_START_ADDRESS_OFFSET} - --gap-fill=0xff - ${test_update_hex} - ${moved_test_update_hex} - - DEPENDS - ${SIGN_ARG_DEPENDS} - ${test_update_hex} - ) - endif() - - if(DEFINED SIGN_ARG_IMAGE_DEPENDENCIES) - set(sign_dependencies "-d;\"${SIGN_ARG_IMAGE_DEPENDENCIES}\"") - endif() - - add_custom_command( - OUTPUT - ${signed_hex} # Signed hex of input hex. - - COMMAND - # Create signed hex file from input hex file. - # This does not have the IMAGE_MAGIC at the end. So for this hex file - # to be applied by mcuboot, the application is required to write the - # IMAGE_MAGIC into the image trailer. - ${sign_cmd} - ${sign_dependencies} - ${SIGN_ARG_ROM_FIXED} - --slot-size ${SIGN_ARG_SLOT_SIZE} - ${SIGN_ARG_SIGNED_BIN_FILE_IN} - ${signed_hex} - - DEPENDS - ${SIGN_ARG_DEPENDS} - ) - - add_custom_command( - OUTPUT - ${update_bin} # Signed binary of input hex. - - COMMAND - # Create binary version of the input hex file, this is done so that we - # can create a signed binary file which will be transferred in OTA - # updates. - ${CMAKE_OBJCOPY} - --input-target=ihex - --output-target=binary - --gap-fill=0xff - ${SIGN_ARG_SIGNED_BIN_FILE_IN} - ${to_sign_bin} - - COMMAND - # Sign the binary version of the input hex file. - ${sign_cmd} - ${sign_dependencies} - ${SIGN_ARG_ROM_FIXED} - --slot-size ${SIGN_ARG_SLOT_SIZE} - ${to_sign_bin} - ${update_bin} - DEPENDS - ${SIGN_ARG_DEPENDS} - ) - - add_custom_command( - OUTPUT - ${test_update_hex} # Signed hex with IMAGE_MAGIC - - COMMAND - # Create signed hex file from input hex file *with* IMAGE_MAGIC. - # As this includes the IMAGE_MAGIC in its image trailer, it will be - # swapped in by mcuboot without any invocation from the app. Note, - # however, that this this hex file is located in the same address space - # as the input hex file, so in order for it to work as a test update, - # it needs to be moved. - ${sign_cmd} - ${sign_dependencies} - ${SIGN_ARG_ROM_FIXED} - --slot-size ${SIGN_ARG_SLOT_SIZE} - --pad # Adds IMAGE_MAGIC to end of slot. - ${SIGN_ARG_SIGNED_BIN_FILE_IN} - ${test_update_hex} - - DEPENDS - ${SIGN_ARG_DEPENDS} - ${update_bin} - ) - endfunction() - - function(split) - # Splits an elf image into 2 sets of hex and bin files - # - # Required arguments are: - # ELF_FILE_IN - # ELF_SECTION_NAMES - # HEX_INCLUDE_FILE_OUT - # HEX_EXCLUDE_FILE_OUT - set(oneValueArgs ELF_FILE_IN HEX_INCLUDE_FILE_OUT HEX_EXCLUDE_FILE_OUT) - set(multiValueArgs ELF_SECTION_NAMES DEPENDS) - cmake_parse_arguments(SPLIT_ARG "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - check_arguments_required_all(split SPLIT_ARG ${oneValueArgs} ELF_SECTION_NAMES) - - set(include_param) - set(exclude_param) - - foreach(section_name ${SPLIT_ARG_ELF_SECTION_NAMES}) - set(include_param ${include_param} -R ${section_name}) - set(exclude_param ${exclude_param} -j ${section_name}) - endforeach() - - add_custom_command( - OUTPUT - ${SPLIT_ARG_HEX_INCLUDE_FILE_OUT} - - COMMAND - ${CMAKE_OBJCOPY} - --output-target=ihex - ${include_param} - ${SPLIT_ARG_ELF_FILE_IN} - ${SPLIT_ARG_HEX_INCLUDE_FILE_OUT} - - DEPENDS - ${SPLIT_ARG_DEPENDS} - ) - - add_custom_command( - OUTPUT - ${SPLIT_ARG_HEX_EXCLUDE_FILE_OUT} - - COMMAND - ${CMAKE_OBJCOPY} - --output-target=ihex - ${exclude_param} - ${SPLIT_ARG_ELF_FILE_IN} - ${SPLIT_ARG_HEX_EXCLUDE_FILE_OUT} - - DEPENDS - ${SPLIT_ARG_DEPENDS} - ) - endfunction() - - if (CONFIG_BUILD_S1_VARIANT AND ("${CONFIG_S1_VARIANT_IMAGE_NAME}" STREQUAL "mcuboot")) - # Inject this configuration from parent image to mcuboot. - add_overlay_config( - mcuboot - ${ZEPHYR_NRF_MODULE_DIR}/subsys/bootloader/image/build_s1.conf - ) - endif() - - if (CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY) - # By passing this value we don't require the user to pass any overlay files - # to the MCUboot child image for storing the secondary partition in - # external flash. - add_overlay_config( - mcuboot - ${ZEPHYR_NRF_MODULE_DIR}/subsys/partition_manager/ext_flash_mcuboot_secondary.conf - ) - endif() - - if (CONFIG_BUILD_WITH_TFM) - # Configure MCUBoot to be able to boot TFM - add_overlay_config( - mcuboot - ${ZEPHYR_NRF_MODULE_DIR}/modules/mcuboot/tfm.conf - ) - - # Add fault injection protection to MCUBOOT - add_overlay_config( - mcuboot - ${ZEPHYR_NRF_MODULE_DIR}/modules/mcuboot/fih_low_enable.conf - ) - endif() - - if (CONFIG_NRF53_UPGRADE_NETWORK_CORE AND CONFIG_ADD_MCUBOOT_MEDIATE_SIM_FLASH_DTS) - # To allow multi image update of the network core we add a devicetree - # overlay which defines a flash controller used for emulating flash - # in RAM. - add_overlay_dts( - mcuboot - ${ZEPHYR_NRF_MODULE_DIR}/modules/mcuboot/flash_sim.overlay - ) - endif() - - # For devices with USB then a USB CDC node in mcuboot is required. - # As USB CDC is generally needed for this mcuboot use-case it should be - # considered if this solution could be better generalized. - if (CONFIG_MCUBOOT_USB_SUPPORT) - add_overlay_dts( - mcuboot - ${ZEPHYR_NRF_MODULE_DIR}/modules/mcuboot/usb.overlay - ) - endif() - - # Enable the same option in the MCUBoot child image - if (CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION) - add_overlay_config( - mcuboot - ${ZEPHYR_NRF_MODULE_DIR}/modules/mcuboot/hw_counters.conf - ) - - set(imgtool_security_counter --security-counter ${CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_VALUE}) - endif() - - add_child_image( - NAME mcuboot - SOURCE_DIR ${ZEPHYR_MCUBOOT_MODULE_DIR}/boot/zephyr - ) - - if (CONFIG_BUILD_S1_VARIANT) - add_child_image( - NAME s1_image - PRELOAD_IMAGE mcuboot - ) - elseif(CONFIG_BOOT_BUILD_DIRECT_XIP_VARIANT) - add_child_image( - NAME mcuboot_secondary_app - PRELOAD_IMAGE app - ) - endif() - - set(merged_hex_file - ${PROJECT_BINARY_DIR}/mcuboot_primary_app.hex) - set(merged_hex_file_depends - mcuboot_primary_app_hex$${PROJECT_BINARY_DIR}/mcuboot_primary_app.hex) - set(sign_merged - $) - set(app_to_sign_hex - $) - set(app_sign_depends - $) - - if (NOT DEFINED CONFIG_BOOT_SIGNATURE_KEY_FILE) - get_shared(mcuboot_sign_key IMAGE mcuboot PROPERTY SIGNATURE_KEY_FILE) - set(CONFIG_BOOT_SIGNATURE_KEY_FILE ${mcuboot_sign_key}) - endif () - - foreach (filepath ${mcuboot_CONF_FILE}) - if (EXISTS ${filepath}) - file(STRINGS ${filepath} mcuboot_CONFIG_BOOT_SIGNATURE_KEY_FILE - REGEX "^CONFIG_BOOT_SIGNATURE_KEY_FILE=") - if (mcuboot_CONFIG_BOOT_SIGNATURE_KEY_FILE) - get_filename_component(mcuboot_CONF_DIR ${filepath} DIRECTORY) - endif() - endif() - endforeach() - - if(IS_ABSOLUTE ${CONFIG_BOOT_SIGNATURE_KEY_FILE}) - set(mcuboot_key_file ${CONFIG_BOOT_SIGNATURE_KEY_FILE}) - elseif (DEFINED mcuboot_CONF_DIR) - if (EXISTS ${mcuboot_CONF_DIR}/${CONFIG_BOOT_SIGNATURE_KEY_FILE}) - set(mcuboot_key_file ${mcuboot_CONF_DIR}/${CONFIG_BOOT_SIGNATURE_KEY_FILE}) - endif() - endif() - - if(CONFIG_SIGN_IMAGES) - # Set default key - if (NOT DEFINED mcuboot_key_file) - message(WARNING " - --------------------------------------------------------- - --- WARNING: Using default MCUBoot key, it should not --- - --- be used for production. --- - --------------------------------------------------------- - \n" - ) - set(mcuboot_key_file ${ZEPHYR_MCUBOOT_MODULE_DIR}/${CONFIG_BOOT_SIGNATURE_KEY_FILE}) - endif() - - set(app_core_binary_name app_update.bin) - - execute_process(COMMAND - ${PYTHON_EXECUTABLE} - ${ZEPHYR_MCUBOOT_MODULE_DIR}/scripts/imgtool.py - getpub -k ${mcuboot_key_file} - OUTPUT_QUIET - ERROR_QUIET - RESULT_VARIABLE ret_val - ) - - if(${ret_val} EQUAL 2) - message(WARNING "Key file `${mcuboot_key_file}` does not contain a valid \ - private key. Signing of images will be disabled.") - message("Disable signing with `CONFIG_SIGN_IMAGES=n` to silence this warning.") - return() - endif() - - # Arguments to imgtool. - if(NOT CONFIG_MCUBOOT_EXTRA_IMGTOOL_ARGS STREQUAL "") - # Separate extra arguments into the proper format for adding to - # extra_post_build_commands. - # - # Use UNIX_COMMAND syntax for uniform results across host - # platforms. - separate_arguments(imgtool_extra UNIX_COMMAND ${CONFIG_MCUBOOT_EXTRA_IMGTOOL_ARGS}) - else() - set(imgtool_extra) - endif() - - set(sign_cmd - ${PYTHON_EXECUTABLE} - ${ZEPHYR_MCUBOOT_MODULE_DIR}/scripts/imgtool.py - sign - --key ${mcuboot_key_file} - --header-size $ - --align ${CONFIG_MCUBOOT_FLASH_WRITE_BLOCK_SIZE} - --version ${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION} - --pad-header - ${imgtool_security_counter} - ${imgtool_extra} - ) - - set(app_offset $) - - if (CONFIG_NRF53_ENFORCE_IMAGE_VERSION_EQUALITY) - # Specify image pair IDs to generate dependencies between images. - set(APPLICATION_IMAGE_PAIR_IDX 0) - set(NETWORK_IMAGE_PAIR_IDX 1) - - # Add dependency inside application core image to require the latest network core image. - set(sign_dependencies IMAGE_DEPENDENCIES "(${NETWORK_IMAGE_PAIR_IDX},${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION})") - endif() - - if (CONFIG_BOOT_BUILD_DIRECT_XIP_VARIANT) - set(rom_fixed ROM_FIXED $) - else() - set(rom_fixed) - endif() - - if(CONFIG_XIP_SPLIT_IMAGE) - split( - ELF_FILE_IN ${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME} - ELF_SECTION_NAMES ".extflash_text_reloc;.extflash_rodata_reloc" - HEX_INCLUDE_FILE_OUT ${PROJECT_BINARY_DIR}/internal_flash.hex - HEX_EXCLUDE_FILE_OUT ${PROJECT_BINARY_DIR}/qspi_flash.hex - DEPENDS ${app_sign_depends} ${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME} - ) - - add_custom_target(mcuboot_split_target - DEPENDS - ${PROJECT_BINARY_DIR}/internal_flash.hex - ${PROJECT_BINARY_DIR}/qspi_flash.hex - ) - - sign( - SIGNED_BIN_FILE_IN ${PROJECT_BINARY_DIR}/internal_flash.hex - SIGNED_HEX_FILE_NAME_PREFIX ${PROJECT_BINARY_DIR}/internal_flash - SLOT_SIZE $ - SIGNED_HEX_FILE_OUT internal_flash_signed_hex - SIGNED_BIN_FILE_OUT internal_flash_signed_bin - ${sign_dependencies} - ${rom_fixed} - DEPENDS ${app_sign_depends} mcuboot_split_target - ) - - sign( - SIGNED_BIN_FILE_IN ${PROJECT_BINARY_DIR}/qspi_flash.hex - SIGNED_HEX_FILE_NAME_PREFIX ${PROJECT_BINARY_DIR}/qspi_flash - SLOT_SIZE $ - SIGNED_HEX_FILE_OUT qspi_flash_signed_hex - SIGNED_BIN_FILE_OUT qspi_flash_signed_bin - ${sign_dependencies} - ${rom_fixed} - DEPENDS ${app_sign_depends} mcuboot_split_target - ) - - add_custom_target(mcuboot_sign_target - DEPENDS - ${internal_flash_signed_hex} - ${internal_flash_signed_bin} - ${qspi_flash_signed_hex} - ${qspi_flash_signed_bin} - ) - - # When signing split images then we must inform partition manager that it - # now has to use both images as mcuboot primary app. - set_property(GLOBAL PROPERTY - mcuboot_primary_app_PM_HEX_FILE - ${qspi_flash_signed_hex} - ${internal_flash_signed_hex} - ) - set_property(GLOBAL PROPERTY - mcuboot_primary_app_PM_TARGET - mcuboot_sign_target - ) - - set(generate_bin_app_files - ${PROJECT_BINARY_DIR}/internal_flash_update.bin - ${PROJECT_BINARY_DIR}/qspi_flash_update.bin - ) - - set(generate_script_app_params - "internal_flash_update.binload_address=$" - "internal_flash_update.binimage_index=0" - "internal_flash_update.binslot_index_primary=1" - "internal_flash_update.binslot_index_secondary=2" - "internal_flash_update.binversion_MCUBOOT=${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION}" - "qspi_flash_update.binload_address=$" - "qspi_flash_update.binimage_index=2" - "qspi_flash_update.binslot_index_primary=5" - "qspi_flash_update.binslot_index_secondary=6" - "qspi_flash_update.binversion_MCUBOOT=${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION}" - ) -else() - sign( - SIGNED_BIN_FILE_IN ${app_to_sign_hex} - SIGNED_HEX_FILE_NAME_PREFIX ${PROJECT_BINARY_DIR}/app - SLOT_SIZE $ - START_ADDRESS_OFFSET ${app_offset} - SIGNED_HEX_FILE_OUT app_signed_hex - SIGNED_BIN_FILE_OUT app_signed_bin - SIGNED_HEX_TEST_FILE_OUT app_signed_test_hex - ${sign_dependencies} - ${rom_fixed} - DEPENDS ${app_sign_depends} - ) - - add_custom_target(mcuboot_sign_target - DEPENDS ${app_signed_hex} ${app_signed_bin} ${app_signed_test_hex} - ) - - set_property(GLOBAL PROPERTY - mcuboot_primary_app_PM_HEX_FILE - ${app_signed_hex} - ) - set_property(GLOBAL PROPERTY - mcuboot_primary_app_PM_TARGET - mcuboot_sign_target - ) - - set(generate_bin_app_files - ${PROJECT_BINARY_DIR}/${app_core_binary_name} - ) -endif() - - if (CONFIG_BOOT_BUILD_DIRECT_XIP_VARIANT) - get_shared(mcuboot_secondary_app_bin_dir IMAGE mcuboot_secondary_app PROPERTY ZEPHYR_BINARY_DIR) - set(mcuboot_secondary_app_hex ${mcuboot_secondary_app_bin_dir}/zephyr.hex) - - set(rom_fixed ROM_FIXED $) - - sign( - SIGNED_BIN_FILE_IN ${mcuboot_secondary_app_hex} - SIGNED_HEX_FILE_NAME_PREFIX ${PROJECT_BINARY_DIR}/mcuboot_secondary_app - SLOT_SIZE $ - SIGNED_HEX_FILE_OUT mcuboot_secondary_app_signed_hex - SIGNED_BIN_FILE_OUT mcuboot_secondary_app_signed_bin - SIGNED_HEX_TEST_FILE_OUT mcuboot_secondary_app_signed_test_hex - ${rom_fixed} - DEPENDS mcuboot_secondary_app_subimage ${mcuboot_secondary_app_bin_dir}/zephyr.hex - ) - - add_custom_target(mcuboot_secondary_app_sign_target - DEPENDS - ${mcuboot_secondary_app_signed_hex} - ${mcuboot_secondary_app_signed_bin} - ${mcuboot_secondary_app_signed_test_hex} - ) - - set_property(GLOBAL PROPERTY - mcuboot_secondary_app_PM_HEX_FILE - ${mcuboot_secondary_app_signed_hex} - ) - - set_property(GLOBAL PROPERTY - mcuboot_secondary_app_PM_TARGET - mcuboot_secondary_app_sign_target - ) - endif() - - get_shared(cpunet_signed_app_hex IMAGE CPUNET PROPERTY PM_SIGNED_APP_HEX) - - if (CONFIG_NRF53_UPGRADE_NETWORK_CORE - AND DEFINED cpunet_signed_app_hex) - # Network core application updates are enabled. - # We know this since MCUBoot is enabled on the application core, and - # a network core child image is included in the build. - # These updates are verified by the application core MCUBoot. - # Create a signed variant of the network core application. - - get_shared(cpunet_images IMAGE CPUNET PROPERTY PM_DOMAIN_IMAGES) - foreach(image ${cpunet_images}) - if(${image} MATCHES "CPUNET:(.*)") - set(image_name ${CMAKE_MATCH_1}) - if(TARGET ${image_name}_subimage) - get_shared(${image_name}_byproducts IMAGE ${image_name} PROPERTY BUILD_BYPRODUCTS) - list(APPEND sign_depends ${image_name}_subimage ${${image_name}_byproducts}) - endif() - endif() - endforeach() - - set(net_core_binary_name net_core_app_update.bin) - - if (CONFIG_NRF53_ENFORCE_IMAGE_VERSION_EQUALITY) - # Add dependency inside network core image to require the latest application core image. - set(sign_dependencies IMAGE_DEPENDENCIES "(${APPLICATION_IMAGE_PAIR_IDX},${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION})") - endif() - - sign( - SIGNED_BIN_FILE_IN ${cpunet_signed_app_hex} - SIGNED_HEX_FILE_NAME_PREFIX ${PROJECT_BINARY_DIR}/net_core_app - SLOT_SIZE $ - START_ADDRESS_OFFSET $ - SIGNED_HEX_FILE_OUT net_core_app_signed_hex - SIGNED_BIN_FILE_OUT net_core_app_signed_bin - SIGNED_HEX_TEST_FILE_OUT net_core_app_signed_test_hex - ${sign_dependencies} - DEPENDS ${sign_depends} - ) - - add_custom_target( - net_core_app_sign_target - DEPENDS ${net_core_app_signed_hex} - ${net_core_app_signed_bin} - ${net_core_app_signed_test_hex} - ) - - add_dependencies( - mcuboot_sign_target - net_core_app_sign_target - ) - - get_shared(net_core_soc IMAGE net_core PROPERTY SOC) - get_shared(net_core_version IMAGE net_core PROPERTY VERSION) - - set(generate_bin_files - ${generate_bin_app_files} - ${PROJECT_BINARY_DIR}/${net_core_binary_name} - ) - - if(NOT CONFIG_XIP_SPLIT_IMAGE) - set(generate_script_app_params - "${app_core_binary_name}load_address=$" - "${app_core_binary_name}image_index=0" - "${app_core_binary_name}slot_index_primary=1" - "${app_core_binary_name}slot_index_secondary=2" - "${app_core_binary_name}version_MCUBOOT=${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION}" - ) - endif() - - set(generate_script_params - ${generate_script_app_params} - "${net_core_binary_name}image_index=1" - "${net_core_binary_name}slot_index_primary=3" - "${net_core_binary_name}slot_index_secondary=4" - "${net_core_binary_name}load_address=$" - "${net_core_binary_name}board=${CONFIG_DOMAIN_CPUNET_BOARD}" - "${net_core_binary_name}version=${net_core_version}" - "${net_core_binary_name}soc=${net_core_soc}" - ) - else() - # No network core update - if(CONFIG_BOOT_BUILD_DIRECT_XIP_VARIANT) - if(CONFIG_XIP_SPLIT_IMAGE) - message(FATAL_ERROR "This build configuration is not supported: -CONFIG_BOOT_BUILD_DIRECT_XIP_VARIANT cannot be used with CONFIG_XIP_SPLIT_IMAGE.") - endif() - - set(secondary_app_core_binary_name mcuboot_secondary_app_update.bin) - set(generate_bin_files - ${generate_bin_app_files} - ${PROJECT_BINARY_DIR}/${secondary_app_core_binary_name} - ) - set(generate_script_params - "${app_core_binary_name}load_address=$" - "${app_core_binary_name}version_MCUBOOT+XIP=${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION}" - "${app_core_binary_name}slot=0" - "${secondary_app_core_binary_name}load_address=$" - "${secondary_app_core_binary_name}version_MCUBOOT+XIP=${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION}" - "${secondary_app_core_binary_name}slot=1" - ) - else() - set(generate_bin_files - ${generate_bin_app_files} - ) - - if(NOT CONFIG_XIP_SPLIT_IMAGE) - set(generate_script_params - "load_address=$" - "version_MCUBOOT=${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION}" - ) - else() - set(generate_script_params ${generate_script_app_params}) - endif() - endif() - endif() - - # Targets for adding nrf70 wifi firmware patch. This workflow creates the nrf70_signed.hex and nrf70_update.bin files that can be - # used in DFU process, and multi-image DFU process. - if(CONFIG_NRF_WIFI_FW_PATCH_DFU) - set(nrf70_binary_name nrf70_update.bin) - - sign( - SIGNED_BIN_FILE_IN ${PROJECT_BINARY_DIR}/nrf70.hex - SIGNED_HEX_FILE_NAME_PREFIX ${PROJECT_BINARY_DIR}/nrf70 - SLOT_SIZE $ - SIGNED_HEX_FILE_OUT nrf70_signed_hex - SIGNED_BIN_FILE_OUT nrf70_signed_bin - SIGNED_HEX_TEST_FILE_OUT nrf70_signed_test_hex - DEPENDS ${PROJECT_BINARY_DIR}/nrf70.hex - ) - - add_custom_target(mcuboot_nrf70_target - DEPENDS - ${nrf70_signed_hex} - ${nrf70_signed_bin} - ${nrf70_signed_test_hex} - ) - - set_property(GLOBAL PROPERTY - nrf70_wifi_fw_PM_HEX_FILE - ${nrf70_signed_hex} - ) - - set_property(GLOBAL PROPERTY - nrf70_wifi_fw_PM_TARGET - mcuboot_nrf70_target - ) - - add_dependencies( - mcuboot_sign_target - mcuboot_nrf70_target - ) - - # Add nrf70 update file to the existing bin files list before generating the zip file. - list(APPEND generate_bin_files - ${PROJECT_BINARY_DIR}/${nrf70_binary_name} - ) - - if(CONFIG_NRF53_UPGRADE_NETWORK_CORE) - list(APPEND generate_script_params - "${nrf70_binary_name}image_index=2" - "${nrf70_binary_name}slot_index_primary=5" - "${nrf70_binary_name}slot_index_secondary=6" - ) - else() - list(APPEND generate_script_params - "${nrf70_binary_name}image_index=1" - "${nrf70_binary_name}slot_index_primary=3" - "${nrf70_binary_name}slot_index_secondary=4" - ) - endif() - - endif() - - generate_dfu_zip( - OUTPUT ${PROJECT_BINARY_DIR}/dfu_application.zip - BIN_FILES ${generate_bin_files} - TYPE application - SCRIPT_PARAMS ${generate_script_params} - ) - - if (CONFIG_BUILD_S1_VARIANT AND ("${CONFIG_S1_VARIANT_IMAGE_NAME}" STREQUAL "mcuboot")) - # Secure Boot (B0) is enabled, and we have to build update candidates - # for both S1 and S0. - - # We need to override some attributes of the parent slot S0/S1. - # Which contains both the S0/S1 image and the padding/header. - foreach(parent_slot s0;s1) - set(slot ${parent_slot}_image) - - # Fetch the target and hex file for the current slot. - # Note that these hex files are already signed by B0. - get_property(${slot}_target GLOBAL PROPERTY ${slot}_PM_TARGET) - get_property(${slot}_hex GLOBAL PROPERTY ${slot}_PM_HEX_FILE) - - # The gap from S0/S1 partition is calculated by partition manager - # and stored in its target. - set(slot_offset - $) - - set(out_path ${PROJECT_BINARY_DIR}/signed_by_mcuboot_and_b0_${slot}) - - sign( - SIGNED_BIN_FILE_IN ${${slot}_hex} - SIGNED_HEX_FILE_NAME_PREFIX ${out_path} - SLOT_SIZE $ - START_ADDRESS_OFFSET ${slot_offset} - SIGNED_HEX_FILE_OUT signed_hex - SIGNED_BIN_FILE_OUT signed_bin - SIGNED_HEX_TEST_FILE_OUT signed_test_hex - DEPENDS ${${slot}_target} ${${slot}_hex} - ) - - # We now have to override the S0/S1 partition, so use `parent_slot` - # variable, which is "s0" and "s1" respectively. This to get partition - # manager to override the implicitly assigned container hex files. - - # Wrapper target for the generated hex file. - add_custom_target(signed_${parent_slot}_target - DEPENDS ${signed_hex} ${signed_bin} ${signed_test_hex} - ) - - # Override the container hex file. - set_property(GLOBAL PROPERTY - ${parent_slot}_PM_HEX_FILE - ${signed_hex} - ) - - # Override the container hex file target. - set_property(GLOBAL PROPERTY - ${parent_slot}_PM_TARGET - signed_${parent_slot}_target - ) - endforeach() - - # Generate zip file with both update candidates - set(s0_name signed_by_mcuboot_and_b0_s0_image_update.bin) - set(s0_bin_path ${PROJECT_BINARY_DIR}/${s0_name}) - set(s1_name signed_by_mcuboot_and_b0_s1_image_update.bin) - set(s1_bin_path ${PROJECT_BINARY_DIR}/${s1_name}) - - # Create dependency to ensure explicit build order. This is needed to have - # a single target represent the state when both s0 and s1 imags are built. - add_dependencies( - signed_s1_target - signed_s0_target - ) - - generate_dfu_zip( - OUTPUT ${PROJECT_BINARY_DIR}/dfu_mcuboot.zip - BIN_FILES ${s0_bin_path} ${s1_bin_path} - TYPE mcuboot - SCRIPT_PARAMS - "${s0_name}load_address=$" - "${s1_name}load_address=$" - "version_MCUBOOT=${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION}" - "version_B0=${CONFIG_FW_INFO_FIRMWARE_VERSION}" - ) - endif() - endif(CONFIG_SIGN_IMAGES) -endif() - -if (CONFIG_DFU_MULTI_IMAGE_PACKAGE_BUILD) - set(dfu_multi_image_ids) - set(dfu_multi_image_paths) - set(dfu_multi_image_targets) - - if(CONFIG_XIP_SPLIT_IMAGE) - message(FATAL_ERROR "This build configuration is not supported: -CONFIG_DFU_MULTI_IMAGE_PACKAGE_BUILD cannot be used with CONFIG_XIP_SPLIT_IMAGE.") - endif() - - if (CONFIG_DFU_MULTI_IMAGE_PACKAGE_APP) - list(APPEND dfu_multi_image_ids 0) - list(APPEND dfu_multi_image_paths "${PROJECT_BINARY_DIR}/${app_core_binary_name}") - list(APPEND dfu_multi_image_targets mcuboot_sign_target) - endif() - - if (CONFIG_DFU_MULTI_IMAGE_PACKAGE_NET) - list(APPEND dfu_multi_image_ids 1) - list(APPEND dfu_multi_image_paths "${PROJECT_BINARY_DIR}/${net_core_binary_name}") - list(APPEND dfu_multi_image_targets net_core_app_sign_target) - endif() - - if (CONFIG_DFU_MULTI_IMAGE_PACKAGE_MCUBOOT) - list(APPEND dfu_multi_image_ids -2 -1) - list(APPEND dfu_multi_image_paths "${s0_bin_path}" "${s1_bin_path}") - list(APPEND dfu_multi_image_targets signed_s0_target signed_s1_target) - endif() - - if(CONFIG_NRF_WIFI_FW_PATCH_DFU) - if (CONFIG_DFU_MULTI_IMAGE_PACKAGE_NET) - list(APPEND dfu_multi_image_ids 2) - else() - list(APPEND dfu_multi_image_ids 1) - endif() - list(APPEND dfu_multi_image_paths "${PROJECT_BINARY_DIR}/${nrf70_binary_name}") - list(APPEND dfu_multi_image_targets mcuboot_nrf70_target) - endif() - - dfu_multi_image_package(dfu_multi_image_pkg - IMAGE_IDS ${dfu_multi_image_ids} - IMAGE_PATHS ${dfu_multi_image_paths} - OUTPUT ${PROJECT_BINARY_DIR}/dfu_multi_image.bin - ) - - add_dependencies(dfu_multi_image_pkg ${dfu_multi_image_targets}) -endif() - -if(CONFIG_ZIGBEE AND CONFIG_ZIGBEE_FOTA) - if (CONFIG_ZIGBEE_FOTA_GENERATE_LEGACY_IMAGE_TYPE) - set(firmware_binary "${PROJECT_BINARY_DIR}/${app_core_binary_name}") - set(legacy_cmd "--legacy") - elseif(CONFIG_DFU_MULTI_IMAGE_PACKAGE_BUILD) - set(firmware_binary "${PROJECT_BINARY_DIR}/dfu_multi_image.bin") - set(legacy_cmd ) - else() - message(FATAL_ERROR "No Zigbee FOTA image format selected. Please enable either legacy or the multi-image format.") - endif() - - add_custom_target(zigbee_ota_image ALL - COMMAND - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/bootloader/zb_add_ota_header.py - --application ${firmware_binary} - --application-version-string ${CONFIG_MCUBOOT_IMGTOOL_SIGN_VERSION} - --zigbee-manufacturer-id ${CONFIG_ZIGBEE_FOTA_MANUFACTURER_ID} - --zigbee-image-type ${CONFIG_ZIGBEE_FOTA_IMAGE_TYPE} - --zigbee-comment ${CONFIG_ZIGBEE_FOTA_COMMENT} - --zigbee-ota-min-hw-version ${CONFIG_ZIGBEE_FOTA_MIN_HW_VERSION} - --zigbee-ota-max-hw-version ${CONFIG_ZIGBEE_FOTA_MAX_HW_VERSION} - --out-directory ${PROJECT_BINARY_DIR} - ${legacy_cmd} - - DEPENDS - ${firmware_binary} - ) -endif(CONFIG_ZIGBEE AND CONFIG_ZIGBEE_FOTA) - -# Zephyr has a Kconfig option used for signing an application image -# with MCUboot using west sign. If partition manager is in use and -# there are multiple images, we want to make sure users understand -# this option should probably be left alone, since the NCS build -# system has its own way of managing signing. -if (CONFIG_MCUBOOT_SIGNATURE_KEY_FILE) - message(WARNING - "CONFIG_MCUBOOT_SIGNATURE_KEY_FILE is set to \"${CONFIG_MCUBOOT_SIGNATURE_KEY_FILE}\". -You are using the NCS Mcuboot signing, which means this option will be ignored. -Image signing in NCS is done via the MCUboot image's \ - CONFIG_BOOT_SIGNATURE_KEY_FILE option. -Consider setting CONFIG_MCUBOOT_SIGNATURE_KEY_FILE in your application image\ - back to its default value, the empty string.") -endif() - -# NCS Handles everything regarding mcuboot, ensure Zephyr doesn't interfere. -# This is a temporary solution until Zephyr signing has been made more modular. -set(CONFIG_BOOTLOADER_MCUBOOT False PARENT_SCOPE) diff --git a/modules/mcuboot/Kconfig b/modules/mcuboot/Kconfig index 506804b19b27..4bbd2b5cd963 100644 --- a/modules/mcuboot/Kconfig +++ b/modules/mcuboot/Kconfig @@ -1,41 +1,7 @@ menu "MCUboot" -config BOOT_SIGNATURE_KEY_FILE - string "MCUBoot PEM key file" - depends on !MCUBOOT_BUILD_STRATEGY_FROM_SOURCE - help - Absolute path to PEM key file containing the private key corresponding - to the public key included in MCUBoot. This will be used to sign the - image so that it can be verified by MCUBoot. Since MCUBoot is not - built from source, it is not possible for the build system to deduce - what key was used when compiling it. Hence, it is required that the - key is passed to the build system through this option. - -config SIGN_IMAGES - bool "Sign images for MCUBoot" - default y - imply BUILD_OUTPUT_META - depends on MCUBOOT_BUILD_STRATEGY_FROM_SOURCE \ - || BOOT_SIGNATURE_KEY_FILE != "" - help - Sign images for MCUBoot as integrated part of the build stages using - the private key. - if BOOTLOADER_MCUBOOT -config BOOT_BUILD_DIRECT_XIP_VARIANT - bool "Build DIRECT_XIP variant" - default y if MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP - default y if MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP_WITH_REVERT - help - Build a variant of the 'app' image which can be used for DIRECT_XIP. - -# The name of this configuration needs to match the requirements set by the -# script `partition_manager.py`. See `pm.yml` in the application directory -# of MCUBoot. -module=MCUBOOT -source "${ZEPHYR_BASE}/../nrf/subsys/partition_manager/Kconfig.template.build_strategy" - menuconfig MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION bool "Downgrade prevention using hardware security counters" depends on SOC_NRF5340_CPUAPP || SOC_SERIES_NRF91X @@ -98,41 +64,6 @@ config USE_NRF53_MULTI_IMAGE_WITHOUT_UPGRADE_ONLY different swapping methods. This will however give you the potential of bricking the network core upon reverts. -config DFU_MULTI_IMAGE_PACKAGE_BUILD - bool "Build DFU Multi Image package" - depends on BOOTLOADER_MCUBOOT - help - Build DFU Multi Image package that contains a manifest file followed by - selected update images. - -if DFU_MULTI_IMAGE_PACKAGE_BUILD - -config DFU_MULTI_IMAGE_PACKAGE_APP - bool "Include Application Core image in DFU Multi Image package" - default y - -config DFU_MULTI_IMAGE_PACKAGE_NET - bool "Include Network Core image in DFU Multi Image package" - depends on NRF53_UPGRADE_NETWORK_CORE - default y - -config DFU_MULTI_IMAGE_PACKAGE_MCUBOOT - bool "Include MCUboot image in DFU Multi Image package" - depends on BUILD_S1_VARIANT - # Currently simultaneous application and MCUboot updates are unsupported - depends on !DFU_MULTI_IMAGE_PACKAGE_APP && !DFU_MULTI_IMAGE_PACKAGE_NET - -endif # DFU_MULTI_IMAGE_PACKAGE_BUILD - -config ADD_MCUBOOT_MEDIATE_SIM_FLASH_DTS - bool "DTS overlay of the sim-flash intermediary for upgrading NET core" - depends on BOOTLOADER_MCUBOOT - help - Add DTS overlay which defines the flash simulator device which is emulating - the network core primary slot. This slot is required either to allow - multi image update of the network core or to allow serial recovery of - the network core. - config MCUBOOT_USE_ALL_AVAILABLE_RAM bool "Allow MCUBoot to use all available RAM (security implications)" depends on ARM_TRUSTZONE_M @@ -143,13 +74,3 @@ config MCUBOOT_USE_ALL_AVAILABLE_RAM RAM partition. endmenu - -config XIP_SPLIT_IMAGE - bool "Split XIP image" - depends on SOC_NRF5340_CPUAPP - depends on !MCUBOOT - help - Allows for an image to be split into 2 parts where there is code executing from internal - flash and code from QSPI via XIP. Requires specific project setup for projects to use - this feature: project's cmake which supports code dispatching, linker script for describe QSPI - linking area and dedicated partition manager configuration. diff --git a/modules/mcuboot/boot/zephyr/Kconfig b/modules/mcuboot/boot/zephyr/Kconfig index d4752cf04c1a..5dc4e87b6605 100644 --- a/modules/mcuboot/boot/zephyr/Kconfig +++ b/modules/mcuboot/boot/zephyr/Kconfig @@ -105,9 +105,6 @@ config BOOT_ERASE_PROGRESSIVELY config BOOT_IMAGE_ACCESS_HOOKS bool - # Child/parent check - default y if UPDATEABLE_IMAGE_NUMBER > 1 && SOC_NRF5340_CPUAPP && PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY && MCUBOOT_APPLICATION_IMAGE_NUMBER = -1 - # Sysbuild check default y if MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 depends on MCUBOOT diff --git a/modules/mcuboot/hooks/nrf53_hooks.c b/modules/mcuboot/hooks/nrf53_hooks.c index 79c9b599c5f4..72237e110e97 100644 --- a/modules/mcuboot/hooks/nrf53_hooks.c +++ b/modules/mcuboot/hooks/nrf53_hooks.c @@ -15,17 +15,10 @@ #include "bootutil/fault_injection_hardening.h" #include "flash_map_backend/flash_map_backend.h" -#if CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 -/* Sysbuild */ /* MCUboot image update image number */ #define NET_CORE_SECONDARY_IMAGE CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER /* MCUboot serial recovery slot number */ #define NET_CORE_VIRTUAL_PRIMARY_SLOT (CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER * 2) + 1 -#else -/* Legacy child/parent */ -#define NET_CORE_SECONDARY_IMAGE 1 -#define NET_CORE_VIRTUAL_PRIMARY_SLOT 3 -#endif #include #if defined(CONFIG_PCD_APP) && defined(CONFIG_NRF53_MULTI_IMAGE_UPDATE) \ diff --git a/modules/trusted-firmware-m/CMakeLists.txt b/modules/trusted-firmware-m/CMakeLists.txt index 62ec748b929d..5404a933e28f 100644 --- a/modules/trusted-firmware-m/CMakeLists.txt +++ b/modules/trusted-firmware-m/CMakeLists.txt @@ -30,30 +30,23 @@ endif() if(CONFIG_BOOTLOADER_MCUBOOT AND NOT CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY) # Configure the secondary partition to be non-secure - if(SYSBUILD) - function(mcuboot_single_check val) - import_kconfig(CONFIG_ "${CMAKE_BINARY_DIR}/../mcuboot/zephyr/.config") - set(${val} "${CONFIG_SINGLE_APPLICATION_SLOT}" PARENT_SCOPE) - endfunction() - - set(mcuboot_single_slot) - mcuboot_single_check(mcuboot_single_slot) - - if(mcuboot_single_slot) - set_property(TARGET zephyr_property_target - APPEND PROPERTY TFM_CMAKE_OPTIONS - -DNRF_NS_SECONDARY=n - ) - else() - set_property(TARGET zephyr_property_target - APPEND PROPERTY TFM_CMAKE_OPTIONS - -DNRF_NS_SECONDARY=y - ) - endif() + function(mcuboot_single_check val) + import_kconfig(CONFIG_ "${CMAKE_BINARY_DIR}/../mcuboot/zephyr/.config") + set(${val} "${CONFIG_SINGLE_APPLICATION_SLOT}" PARENT_SCOPE) + endfunction() + + set(mcuboot_single_slot) + mcuboot_single_check(mcuboot_single_slot) + + if(mcuboot_single_slot) + set_property(TARGET zephyr_property_target + APPEND PROPERTY TFM_CMAKE_OPTIONS + -DNRF_NS_SECONDARY=n + ) else() set_property(TARGET zephyr_property_target APPEND PROPERTY TFM_CMAKE_OPTIONS - -DNRF_NS_SECONDARY=$ + -DNRF_NS_SECONDARY=y ) endif() endif() @@ -352,8 +345,6 @@ set_property(TARGET zephyr_property_target -DTFM_EXTRA_CONFIG_PATH="${CMAKE_CURRENT_BINARY_DIR}/config_extra.cmake" ) -if(SYSBUILD) - set(BYPRODUCT_KERNEL_SIGNED_HEX_NAME "${CMAKE_BINARY_DIR}/zephyr/tfm_merged.hex" - CACHE FILEPATH "Kernel hex file" FORCE - ) -endif() +set(BYPRODUCT_KERNEL_SIGNED_HEX_NAME "${CMAKE_BINARY_DIR}/zephyr/tfm_merged.hex" + CACHE FILEPATH "Kernel hex file" FORCE +) diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index cbe5f9ba71b0..8c0062102703 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -4,155 +4,4 @@ # SPDX-License-Identifier: LicenseRef-Nordic-5-Clause # -if (CONFIG_SECURE_BOOT) - if (CONFIG_SOC_NRF5340_CPUNET) - # Share some information which is used when generating the zip file - # with the update binaries. - set_shared(IMAGE net_core PROPERTY SOC ${CONFIG_SOC}) - set_shared(IMAGE net_core PROPERTY VERSION ${CONFIG_FW_INFO_FIRMWARE_VERSION}) - add_child_image( - NAME b0n - SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/nrf5340/netboot - ) - else() - add_child_image( - NAME b0 - SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/bootloader - ) - endif() - if (CONFIG_SOC_NRF5340_CPUAPP AND CONFIG_BOOTLOADER_MCUBOOT) - add_overlay_config( - mcuboot - ${ZEPHYR_NRF_MODULE_DIR}/subsys/bootloader/image/log_minimal.conf - ) - endif() - if (CONFIG_BUILD_S1_VARIANT AND "${CONFIG_S1_VARIANT_IMAGE_NAME}" STREQUAL "app") - add_child_image( - NAME s1_image - PRELOAD_IMAGE app - ) - endif() -endif() - -if (CONFIG_NCS_SAMPLE_EMPTY_APP_CORE_CHILD_IMAGE) - add_child_image( - NAME "empty_app_core" - SOURCE_DIR "${ZEPHYR_NRF_MODULE_DIR}/samples/nrf5340/empty_app_core" - DOMAIN "CPUAPP" - BOARD ${CONFIG_DOMAIN_CPUAPP_BOARD} - ) -endif() - -if (CONFIG_NCS_SAMPLE_PROVISIONING_NET_CORE_CHILD_IMAGE) - add_child_image( - NAME "provisioning_net_core" - SOURCE_DIR "${ZEPHYR_NRF_MODULE_DIR}/samples/tfm/provisioning_image_net_core" - DOMAIN "CPUNET" - BOARD ${CONFIG_DOMAIN_CPUNET_BOARD} - ) -endif() - -if (CONFIG_NCS_SAMPLE_REMOTE_SHELL_CHILD_IMAGE) - add_child_image( - NAME "remote_shell" - SOURCE_DIR "${ZEPHYR_NRF_MODULE_DIR}/samples/nrf5340/remote_shell" - DOMAIN "CPUAPP" - BOARD ${CONFIG_DOMAIN_CPUAPP_BOARD} - ) -endif() - -if (CONFIG_NCS_SAMPLE_DTM_REMOTE_HCI_CHILD_IMAGE) - add_child_image( - NAME "remote_hci" - SOURCE_DIR "${ZEPHYR_NRF_MODULE_DIR}/samples/bluetooth/direct_test_mode/remote_hci" - DOMAIN "CPUAPP" - BOARD ${CONFIG_DOMAIN_CPUAPP_BOARD} - ) -endif() - -if (CONFIG_NCS_INCLUDE_RPMSG_CHILD_IMAGE OR CONFIG_NCS_SAMPLE_EMPTY_NET_CORE_CHILD_IMAGE) - - if (CONFIG_NCS_SAMPLE_EMPTY_NET_CORE_CHILD_IMAGE) - set(CHILD_IMAGE_NAME "empty_net_core") - set(CHILD_IMAGE_PATH "${ZEPHYR_NRF_MODULE_DIR}/samples/nrf5340/empty_net_core") - - elseif (CONFIG_NCS_SAMPLE_MULTIPROTOCOL_RPMSG_CHILD_IMAGE) - set(CHILD_IMAGE_NAME "multiprotocol_rpmsg") - set(CHILD_IMAGE_PATH "${ZEPHYR_NRF_MODULE_DIR}/samples/nrf5340/multiprotocol_rpmsg") - - elseif (CONFIG_NCS_SAMPLE_HCI_IPC_CHILD_IMAGE) - set(CHILD_IMAGE_NAME "hci_ipc") - set(CHILD_IMAGE_PATH "${ZEPHYR_BASE}/samples/bluetooth/hci_ipc") - - elseif (CONFIG_NCS_SAMPLE_802154_RPMSG_CHILD_IMAGE) - set(CHILD_IMAGE_NAME "802154_rpmsg") - set(CHILD_IMAGE_PATH "${ZEPHYR_BASE}/samples/boards/nordic/ieee802154/802154_rpmsg") - - elseif (CONFIG_NCS_SAMPLE_RPC_HOST_CHILD_IMAGE) - set(CHILD_IMAGE_NAME "rpc_host") - set(CHILD_IMAGE_PATH "${ZEPHYR_NRF_MODULE_DIR}/samples/bluetooth/rpc_host") - - elseif (CONFIG_NCS_SAMPLE_PERIPHERAL_RADIO_TEST_CHILD_IMAGE) - set(CHILD_IMAGE_NAME "peripheral_radio_test") - set(CHILD_IMAGE_PATH "${ZEPHYR_NRF_MODULE_DIR}/samples/peripheral/radio_test") - - else() - # If we get here, something is wrong with the Kconfig resolution - message(WARNING "CONFIG_NCS_INCLUDE_RPMSG_CHILD_IMAGE is set but " - "couldn't resolve which RPMsg sample to add.") - endif() - - if (CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU_SPEEDUP) - # By passing this value we don't require the user to pass any overlay files to the - # network core child image. Bluetooth buffer sizes are aligned automatically. - if (CONFIG_NCS_SAMPLE_HCI_IPC_CHILD_IMAGE OR CONFIG_NCS_SAMPLE_MULTIPROTOCOL_RPMSG_CHILD_IMAGE) - add_overlay_config( - ${CHILD_IMAGE_NAME} - ${CMAKE_CURRENT_LIST_DIR}/common/mcumgr_bt_ota_dfu/rpmsg_child_image_overlay.conf - ) - endif() - endif() - - # Only include a child image if both image name and path have been defined. - # Prevents e.g. menuconfig from becoming inaccessible, among others. - if(CHILD_IMAGE_NAME AND CHILD_IMAGE_PATH) - - if (CONFIG_NRF53_UPGRADE_NETWORK_CORE) - # Inject this configuration from parent image to enable - # secure bootloader on the network core. This enables firmware update - # of the network core application. - add_overlay_config( - ${CHILD_IMAGE_NAME} - "${ZEPHYR_NRF_MODULE_DIR}/subsys/bootloader/image/secure_boot.conf" - ) - - # Inject this configuration from parent image mcuboot to enable - # the PCD subsystem which is used to communicate the firmware update - # to the network core bootloader. - add_overlay_config( - mcuboot - "${ZEPHYR_NRF_MODULE_DIR}/subsys/pcd/pcd.conf" - ) - endif() - - if (CONFIG_BT_MESH) - # Inject this configuration from the parent image to enable - # the necessary amount of advertising sets in the Bluetooth controller - # on the network core required by the Bluetooth Mesh. - add_overlay_config( - ${CHILD_IMAGE_NAME} - "${ZEPHYR_NRF_MODULE_DIR}/subsys/bluetooth/mesh/hci_ipc_child_image_overlay.conf" - ) - endif() - - add_child_image( - NAME ${CHILD_IMAGE_NAME} - SOURCE_DIR ${CHILD_IMAGE_PATH} - DOMAIN "CPUNET" - BOARD ${CONFIG_DOMAIN_CPUNET_BOARD} - ) - endif() - -endif() - add_subdirectory(common) diff --git a/samples/Kconfig b/samples/Kconfig index cd0b31fd8925..7d58eb3d4370 100644 --- a/samples/Kconfig +++ b/samples/Kconfig @@ -17,117 +17,6 @@ config NCS_SAMPLES_DEFAULTS help Use the default configuration for NCS samples. -if SOC_SERIES_NRF53X - -config NRF70_RADIO_TEST_COMBO - bool "Enable radio test combo build for nRF5340" - depends on SOC_NRF5340_CPUAPP - select SOC_NRF53_CPUNET_ENABLE - -config NCS_SAMPLE_EMPTY_APP_CORE_CHILD_IMAGE - bool "Add empty_app_core as a child image" - depends on SOC_NRF5340_CPUNET - select PARTITION_MANAGER_ENABLED - help - Add empty_app_core as a child image (application core). - Used by samples that run on the network core only. - -config NCS_INCLUDE_RPMSG_CHILD_IMAGE - bool "Include RPMsg sample on netcore" - depends on SOC_NRF5340_CPUAPP && (BT_HCI_IPC || NRF_802154_SER_HOST || BT_RPC || NRF70_RADIO_TEST_COMBO) - select PARTITION_MANAGER_ENABLED - default y if BT_HCI_IPC || NRF_802154_SER_HOST || BT_RPC || NRF70_RADIO_TEST_COMBO - help - Enabling this setting will include a network stack to run on the - network core and communicate over RPMsg with the application core. - The application core does not have access to the radio peripheral. - - The network core sample to be included depends on the configuration of - the application. - - The following RPMsg samples may be included when this setting is enabled: - In order of precedence: - - Multiprotocol RPMsg: When both Bluetooth and nRF IEEE 802.15.4 Serialization host are enabled. - - HCI RPMsg: When only Bluetooth is enabled - - nRF IEEE 802.15.4 Serialization RPMsg: When only nRF IEEE 802.15.4 Serialization host is enabled. - - nRF RPC Host: When Bluetooth and Bluetooth serialization over RPC are enabled. - - nRF BLE radio test: When both Wi-Fi and BLE radio test are enabled for testing SR co-existence. - -config NCS_SAMPLE_REMOTE_SHELL_CHILD_IMAGE - bool "Add remote_shell sample as a child image" - depends on SHELL_IPC || IPC_UART - select PARTITION_MANAGER_ENABLED - help - Add remote_shell as a child image (application core). - Used by samples that run on the network core only. - -config NCS_SAMPLE_DTM_REMOTE_HCI_CHILD_IMAGE - bool "Add remote_hci child image for DTM" - depends on SOC_NRF5340_CPUNET - select PARTITION_MANAGER_ENABLED - help - Add remote_hci as a child image (application core). - Used by the DTM sample to pass HCI commands from - application core UART peripheral. - -if NCS_INCLUDE_RPMSG_CHILD_IMAGE - -config NCS_SAMPLE_MULTIPROTOCOL_RPMSG_CHILD_IMAGE - bool - depends on BT_HCI_IPC && NRF_802154_SER_HOST && !BT_RPC && !NRF70_RADIO_TEST_COMBO - default y - help - multiprotocol_rpmsg sample as a child image (network core). - -config NCS_SAMPLE_HCI_IPC_CHILD_IMAGE - bool - depends on BT_HCI_IPC && !NRF_802154_SER_HOST && !BT_RPC && !NRF70_RADIO_TEST_COMBO - default y - help - hci_ipc sample as a child image (network core). - -config NCS_SAMPLE_802154_RPMSG_CHILD_IMAGE - bool - depends on NRF_802154_SER_HOST && !BT_HCI_IPC && !BT_RPC && !NRF70_RADIO_TEST_COMBO - default y - help - 802154_rpmsg sample as a child image (network core). - -config NCS_SAMPLE_RPC_HOST_CHILD_IMAGE - bool - depends on BT_RPC && !NRF70_RADIO_TEST_COMBO - default y - help - rpc_host sample as a child image (network core). - -config NCS_SAMPLE_PERIPHERAL_RADIO_TEST_CHILD_IMAGE - bool "Add peripheral radio_test sample as a child image" - depends on NRF70_RADIO_TEST_COMBO - default y - select PARTITION_MANAGER_ENABLED - help - Add peripheral radio_test as a child image (network core). - Used by samples that run on the application core only. - -endif # NCS_INCLUDE_RPMSG_CHILD_IMAGE - -config NCS_SAMPLE_EMPTY_NET_CORE_CHILD_IMAGE - bool - depends on SOC_NRF5340_CPUAPP && SOC_NRF53_CPUNET_ENABLE - depends on NRF53_UPGRADE_NETWORK_CORE && !NCS_INCLUDE_RPMSG_CHILD_IMAGE - default y - help - nRF5340 empty network core sample as a child image (network core). - -config NCS_SAMPLE_PROVISIONING_NET_CORE_CHILD_IMAGE - bool "Add provisioning_image_netcore sample as a child image" - depends on SOC_NRF5340_CPUAPP && SOC_NRF53_CPUNET_ENABLE - depends on !NCS_INCLUDE_RPMSG_CHILD_IMAGE - help - nRF5340 network core provisioning image as a child image. - -endif # SOC_SERIES_NRF53X - menu "Image build variants" # These are set by CMake, and they need a prompt. diff --git a/samples/bluetooth/peripheral_uart/nrf5340dk_app_sr_net.conf b/samples/bluetooth/peripheral_uart/nrf5340dk_app_sr_net.conf index 98da3f134528..3b93b0f89ee5 100644 --- a/samples/bluetooth/peripheral_uart/nrf5340dk_app_sr_net.conf +++ b/samples/bluetooth/peripheral_uart/nrf5340dk_app_sr_net.conf @@ -6,4 +6,3 @@ CONFIG_BOOTLOADER_MCUBOOT=y CONFIG_NRF53_UPGRADE_NETWORK_CORE=y -CONFIG_ADD_MCUBOOT_MEDIATE_SIM_FLASH_DTS=y diff --git a/samples/cellular/nrf_cloud_multi_service/boards/thingy91_nrf9160_ns.conf b/samples/cellular/nrf_cloud_multi_service/boards/thingy91_nrf9160_ns.conf index be6571b00696..d9639ab08c20 100644 --- a/samples/cellular/nrf_cloud_multi_service/boards/thingy91_nrf9160_ns.conf +++ b/samples/cellular/nrf_cloud_multi_service/boards/thingy91_nrf9160_ns.conf @@ -28,4 +28,3 @@ CONFIG_LED_PWM=y # Disable MCUboot DFU -- incompatible with static partitions CONFIG_SECURE_BOOT=n -CONFIG_BUILD_S1_VARIANT=n diff --git a/samples/cellular/nrf_cloud_rest_fota/prj.conf b/samples/cellular/nrf_cloud_rest_fota/prj.conf index c0a47f95d996..978e8faec7ce 100644 --- a/samples/cellular/nrf_cloud_rest_fota/prj.conf +++ b/samples/cellular/nrf_cloud_rest_fota/prj.conf @@ -28,7 +28,6 @@ CONFIG_STREAM_FLASH=y CONFIG_MCUBOOT_IMG_MANAGER=y CONFIG_IMG_ERASE_PROGRESSIVELY=y CONFIG_SECURE_BOOT=y -CONFIG_BUILD_S1_VARIANT=y CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=n # Settings diff --git a/samples/common/mcumgr_bt_ota_dfu/rpmsg_child_image_overlay.conf b/samples/common/mcumgr_bt_ota_dfu/rpmsg_child_image_overlay.conf deleted file mode 100644 index 0d200267521e..000000000000 --- a/samples/common/mcumgr_bt_ota_dfu/rpmsg_child_image_overlay.conf +++ /dev/null @@ -1,5 +0,0 @@ -# Align Bluetooth buffers with the Application image -CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU_SPEEDUP=y - -# Reduce the maximum connection number to fit the image into RAM memory. -CONFIG_BT_MAX_CONN=10 diff --git a/samples/mpsl/timeslot/prj.conf b/samples/mpsl/timeslot/prj.conf index 79a5a1494ade..66802df21061 100644 --- a/samples/mpsl/timeslot/prj.conf +++ b/samples/mpsl/timeslot/prj.conf @@ -12,7 +12,6 @@ CONFIG_CONSOLE_GETCHAR=y CONFIG_MPSL=y CONFIG_MPSL_TIMESLOT_SESSION_COUNT=1 -CONFIG_NCS_SAMPLE_EMPTY_APP_CORE_CHILD_IMAGE=y CONFIG_RING_BUFFER=y CONFIG_LOG=y CONFIG_LOG_MODE_DEFERRED=y diff --git a/samples/tfm/tfm_psa_template/prj.conf b/samples/tfm/tfm_psa_template/prj.conf index 1483bb0d4d4b..182d86aaca4a 100644 --- a/samples/tfm/tfm_psa_template/prj.conf +++ b/samples/tfm/tfm_psa_template/prj.conf @@ -14,7 +14,6 @@ CONFIG_TFM_PARTITION_INITIAL_ATTESTATION=y CONFIG_TFM_NRF_PROVISIONING=y CONFIG_SECURE_BOOT=y -CONFIG_BUILD_S1_VARIANT=y # Enable mcumgr. CONFIG_MCUMGR=y diff --git a/scripts/bluetooth/mesh/mesh_dfu_metadata.py b/scripts/bluetooth/mesh/mesh_dfu_metadata.py index 2ba3757d6686..abcd6d85120d 100644 --- a/scripts/bluetooth/mesh/mesh_dfu_metadata.py +++ b/scripts/bluetooth/mesh/mesh_dfu_metadata.py @@ -34,7 +34,6 @@ def exit_with_error_msg(): traceback.print_exc() print("Extracting BLE Mesh metadata failed") - print("You can bypass this script by disabling the CONFIG_BT_MESH_DFU_METADATA_ON_BUILD option in your project config") sys.exit(0) @@ -399,16 +398,8 @@ def existing_metadata_print(path): args = input_parse() sysbuild_config_path = os.path.abspath(os.path.join(args.bin_path, '.config.sysbuild')) - - if os.path.isfile(sysbuild_config_path): - # Sysbuild - zip_path = os.path.abspath(os.path.join(args.bin_path, '..', '..', 'dfu_application.zip')) - sysbuild = True - else: - # Child/parent image - zip_path = os.path.abspath(os.path.join(args.bin_path, 'dfu_application.zip')) - sysbuild = False - + zip_path = os.path.abspath(os.path.join(args.bin_path, '..', '..', 'dfu_application.zip')) + sysbuild = True metadata_path = os.path.abspath(os.path.join(args.bin_path, FILE_NAME)) config_path = os.path.abspath(os.path.join(args.bin_path, '.config')) kconfigs = KConfig.from_file(config_path) diff --git a/subsys/CMakeLists.txt b/subsys/CMakeLists.txt index 80023be74eea..58a0d7e83d62 100644 --- a/subsys/CMakeLists.txt +++ b/subsys/CMakeLists.txt @@ -6,21 +6,11 @@ add_subdirectory_ifdef(CONFIG_BT bluetooth) -add_subdirectory_ifdef(CONFIG_BOOTLOADER_MCUBOOT bootloader/bl_override) add_subdirectory_ifdef(CONFIG_IS_SECURE_BOOTLOADER bootloader) -if(NOT (SYSBUILD OR NCS_SYSBUILD_PARTITION_MANAGER)) - add_subdirectory_ifdef(CONFIG_SECURE_BOOT bootloader/image) -endif() add_subdirectory_ifdef(CONFIG_SECURE_BOOT_CRYPTO bootloader/bl_crypto) add_subdirectory_ifdef(CONFIG_SECURE_BOOT_VALIDATION bootloader/bl_validation) add_subdirectory_ifdef(CONFIG_SECURE_BOOT_STORAGE bootloader/bl_storage) -if(NOT SYSBUILD) - if(CONFIG_BOOTLOADER_PROVISION_HEX) - include(bootloader/cmake/provision_hex.cmake) - endif() -endif() - add_subdirectory_ifdef(CONFIG_NRF_SECURITY nrf_security) add_subdirectory_ifdef(CONFIG_TRUSTED_STORAGE trusted_storage) diff --git a/subsys/bluetooth/mesh/CMakeLists.txt b/subsys/bluetooth/mesh/CMakeLists.txt index e58a83dfa059..047cdcc8b28b 100644 --- a/subsys/bluetooth/mesh/CMakeLists.txt +++ b/subsys/bluetooth/mesh/CMakeLists.txt @@ -80,9 +80,3 @@ zephyr_linker_sources(SECTIONS sensor_types.ld) zephyr_linker_sources(SECTIONS scene_types.ld) zephyr_library_sources_ifdef(CONFIG_BT_MESH_RPL_STORAGE_MODE_EMDS rpl.c) - -if(CONFIG_SIGN_IMAGES AND CONFIG_BT_MESH_DFU_METADATA_ON_BUILD) - # Child/parent image - include(${ZEPHYR_NRF_MODULE_DIR}/cmake/mesh_dfu_metadata.cmake) - mesh_dfu_metadata() -endif() diff --git a/subsys/bluetooth/mesh/Kconfig b/subsys/bluetooth/mesh/Kconfig index 41071f4e1be4..55cca2e5a97e 100644 --- a/subsys/bluetooth/mesh/Kconfig +++ b/subsys/bluetooth/mesh/Kconfig @@ -129,16 +129,6 @@ choice TFM_PROFILE_TYPE default TFM_PROFILE_TYPE_NOT_SET endchoice -config BT_MESH_DFU_METADATA_ON_BUILD - bool "Generate DFU metadata on build" - default y if BT_MESH_DFU_SRV - depends on SIGN_IMAGES - help - Generate a JSON file containing all DFU related metadata upon - application build. The JSON will be added to dfu application zip - file stored in the project binary folder of your project, along - with the application update image. - rsource "Kconfig.models" rsource "Kconfig.dk_prov" rsource "shell/Kconfig" diff --git a/subsys/bluetooth/mesh/hci_ipc_child_image_overlay.conf b/subsys/bluetooth/mesh/hci_ipc_child_image_overlay.conf deleted file mode 100644 index 39302d470782..000000000000 --- a/subsys/bluetooth/mesh/hci_ipc_child_image_overlay.conf +++ /dev/null @@ -1,12 +0,0 @@ -# -# Copyright (c) 2023 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -# The application configuration does not apply to the network core. This file is needed to align -# the advertiser configuration on the controller configuration with the default host configuration -# set for the Bluetooth Mesh subsystem. See ncs/nrf/subsys/bluetooth/mesh/Kconfig for the default -# configuration. -CONFIG_BT_EXT_ADV=y -CONFIG_BT_EXT_ADV_MAX_ADV_SET=5 diff --git a/subsys/bluetooth/services/fast_pair/CMakeLists.txt b/subsys/bluetooth/services/fast_pair/CMakeLists.txt index 691ee6f38df3..2938fb20996f 100644 --- a/subsys/bluetooth/services/fast_pair/CMakeLists.txt +++ b/subsys/bluetooth/services/fast_pair/CMakeLists.txt @@ -39,59 +39,10 @@ if(CONFIG_BT_FAST_PAIR_FMDN) target_link_libraries(fast_pair PRIVATE fmdn) endif() -if(SYSBUILD) zephyr_get(FP_DATA_PRESENT MERGE SYSBUILD) - if(NOT FP_DATA_PRESENT AND TARGET zephyr_interface) - zephyr_compile_definitions( - FP_DATA_NOT_PRESENT - ) - endif() -endif() - -if(NOT SYSBUILD) - set(FP_PARTITION_NAME bt_fast_pair) - - set( - FP_PROVISIONING_DATA_HEX - ${CMAKE_BINARY_DIR}/modules/nrf/subsys/bluetooth/services/fast_pair/fp_provisioning_data.hex - ) - - set(FP_PROVISIONING_DATA_ADDRESS $) - - if(NOT DEFINED FP_MODEL_ID OR NOT DEFINED FP_ANTI_SPOOFING_KEY) - message(FATAL_ERROR "FP_MODEL_ID and FP_ANTI_SPOOFING_KEY build variables must be specified.") - endif() - - add_custom_command( - OUTPUT - ${FP_PROVISIONING_DATA_HEX} - DEPENDS - "${CMAKE_BINARY_DIR}/pm.config" - COMMAND - ${PYTHON_EXECUTABLE} ${ZEPHYR_NRF_MODULE_DIR}/scripts/nrf_provision/fast_pair/fp_provision_cli.py - -o ${FP_PROVISIONING_DATA_HEX} -a ${FP_PROVISIONING_DATA_ADDRESS} - -m ${FP_MODEL_ID} -k ${FP_ANTI_SPOOFING_KEY} - COMMENT - "Generating Fast Pair provisioning data hex file" - USES_TERMINAL - ) - - add_custom_target( - ${FP_PARTITION_NAME}_target - DEPENDS - "${FP_PROVISIONING_DATA_HEX}" - ) - - set_property( - GLOBAL PROPERTY - ${FP_PARTITION_NAME}_PM_HEX_FILE - "${FP_PROVISIONING_DATA_HEX}" - ) - - set_property( - GLOBAL PROPERTY - ${FP_PARTITION_NAME}_PM_TARGET - ${FP_PARTITION_NAME}_target +if(NOT FP_DATA_PRESENT AND TARGET zephyr_interface) + zephyr_compile_definitions( + FP_DATA_NOT_PRESENT ) endif() diff --git a/subsys/bootloader/CMakeLists.txt b/subsys/bootloader/CMakeLists.txt index 7bbcb9740892..ad4d43198ec3 100644 --- a/subsys/bootloader/CMakeLists.txt +++ b/subsys/bootloader/CMakeLists.txt @@ -8,16 +8,10 @@ add_subdirectory(bl_boot) zephyr_include_directories(include) -if(NOT IMAGE_NAME AND (NOT SYSBUILD OR (SYSBUILD AND NOT CONFIG_PARTITION_MANAGER_ENABLED))) +if(NOT IMAGE_NAME AND NOT CONFIG_PARTITION_MANAGER_ENABLED) message(WARNING "Building bootloader without associated application. " "Dummy values will be used for partition configuration." "Building bootloader without associated application. ") - if(NOT SYSBUILD) - message(WARNING "The idiomatic way of including the immutable bootloader is to set " - "the configuration 'CONFIG_SECURE_BOOTLOADER=y' in your applications " - "'prj.conf'.") - endif() - zephyr_include_directories(include/dummy_values/) endif() diff --git a/subsys/bootloader/Kconfig b/subsys/bootloader/Kconfig index a513b99ddf51..c8cad7c5f120 100644 --- a/subsys/bootloader/Kconfig +++ b/subsys/bootloader/Kconfig @@ -6,22 +6,6 @@ menu "Bootloader" -config BUILD_S1_VARIANT - # This can not depend on BOOTLOADER_MCUBOOT, or SECURE_BOOT as this - # option has to be set when building MCUBoot (or any other child image - # which will be stored in S0 and S1) itself. - bool "Build S1 variant of specified image" - help - Build upgrade candidate of image for alternative slot S1. - -config S1_VARIANT_IMAGE_NAME - string - default "mcuboot" if MCUBOOT || BOOTLOADER_MCUBOOT - default "app" if !BOOTLOADER_MCUBOOT - depends on BUILD_S1_VARIANT - help - Which image should be linked against S1. - config SECURE_BOOT bool "Use Secure Bootloader" depends on !IS_SECURE_BOOTLOADER @@ -31,106 +15,8 @@ config SECURE_BOOT Set this option to enable the first stage bootloader which verifies the signature of the app. -config BOOTLOADER_PROVISION_HEX - bool - default y if SECURE_BOOT - default y if MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION - help - Generate provision.hex if NSIB is enabled or if MCUboot hardware - counters are enabled. - if SECURE_BOOT -module=B0 -source "${ZEPHYR_BASE}/../nrf/subsys/partition_manager/Kconfig.template.build_strategy" - -config SB_PRIVATE_KEY_PROVIDED - bool - help - Hidden config specifying whether the build system has access to the - private key used for signing, and will use it to perform signing and - create the public key to be provisioned. - -choice SB_SIGNING - prompt "Firmware signing method" - default SB_SIGNING_PYTHON - config SB_SIGNING_PYTHON - bool "Sign with Python ecdsa library" - select SB_PRIVATE_KEY_PROVIDED - - config SB_SIGNING_OPENSSL - bool "Sign with openssl command line tool" - select SB_PRIVATE_KEY_PROVIDED - - config SB_SIGNING_CUSTOM - bool "Sign with custom command" -endchoice - -config SB_SIGNING_KEY_FILE - string - prompt "Private key PEM file" if SB_PRIVATE_KEY_PROVIDED - default "" - help - Absolute path to the private key PEM file. - Specifies the private key used for signing the firmware image. - The hash of the corresponding public key is stored as the first - entry in the list of public key hashes in the provision hex file. - See also SB_PUBLIC_KEY_FILES. - -config SB_SIGNING_COMMAND - string - prompt "Custom signing command" if !SB_PRIVATE_KEY_PROVIDED - default "" - help - This command will be called to produce a signature of the firmware. - It will be called as "${CONFIG_SB_SIGNING_COMMAND} " - The command must calculate the signature over the contents - of the and write the signature to stdout. - The signature must be on DER format. - -config SB_SIGNING_PUBLIC_KEY - string - prompt "Public key PEM file" if !SB_PRIVATE_KEY_PROVIDED - default "" - help - Path to a PEM file. - When using a custom signing command, specify the corresponding public - key here. This public key is checked during building, and added as - the first entry in the provisioned data. See SB_PUBLIC_KEY_FILES. - -config SB_PUBLIC_KEY_FILES - string "Public Key PEM files" - default "" - help - Comma-separated list of absolute paths to public key pem files. - The provision hex file will contain a list of hashes of public keys. - The first public key hash is the one corresponding to the private - signing key used to sign the image. See SB_SIGNING_KEY_FILE. - The hashes of the public keys specified in this configuration will be - placed after the aforementioned public key hash, in the order - they appear in this config. The order is significant since if an image - is successfully validated against a public key in the list, all - public keys before it in the list will be invalidated. - Example value: ~/keys/pk1.pem,~/keys/pk2.pem,~/keys/pk3.pem - If config is the string "debug", 2 generated debug files will be used. - If config is an empty string then only the public key hash - corresponding to the private signing key used to sign the image is - included in provision.hex. - -config SB_DEBUG_SIGNATURE_PUBLIC_KEY_LAST - bool "[DEBUG] Place signing public key last" - default n - help - Place the public key used for signing last in the list instead of - first. This is meant to be used for testing looping through the - public keys. - -config SB_DEBUG_NO_VERIFY_HASHES - bool - help - [DEBUG] Don't check public key hashes for applicability. - Use this only in (negative) tests! - config SB_MONOTONIC_COUNTER bool "Enable HW monotonic version counter" default y diff --git a/subsys/bootloader/bl_override/CMakeLists.txt b/subsys/bootloader/bl_override/CMakeLists.txt deleted file mode 100644 index efc44cf606f8..000000000000 --- a/subsys/bootloader/bl_override/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -# -# Copyright (c) 2022 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -if (CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK) - add_overlay_config( - mcuboot - ${CMAKE_CURRENT_SOURCE_DIR}/override_external_mcuboot.conf - ) -endif() diff --git a/subsys/bootloader/cmake/provision_hex.cmake b/subsys/bootloader/cmake/provision_hex.cmake deleted file mode 100644 index 4c1e5ab3b5cd..000000000000 --- a/subsys/bootloader/cmake/provision_hex.cmake +++ /dev/null @@ -1,167 +0,0 @@ -# -# Copyright (c) 2022 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -# This CMakeLists.txt is executed only by the parent application -# and generates the provision.hex file. - -set_ifndef(partition_manager_target partition_manager) - -if(NCS_SYSBUILD_PARTITION_MANAGER) - # Get the main app of the domain that secure boot should handle. - get_property(main_app GLOBAL PROPERTY DOMAIN_APP_${SB_CONFIG_SECURE_BOOT_DOMAIN}) - ExternalProject_Get_Property(${main_app} BINARY_DIR) - import_kconfig(CONFIG_ ${BINARY_DIR}/zephyr/.config) - sysbuild_get(APPLICATION_CONFIG_DIR IMAGE ${main_app} VAR APPLICATION_CONFIG_DIR CACHE) -endif() - -if (CONFIG_NCS_IS_VARIANT_IMAGE) - # When building the variant of an image, the configuration of the variant image - # is identical to the base image, except 'CONFIG_NCS_IS_VARIANT_IMAGE'. This file is - # included when provisioning, which can be the case for the base - # image. However, the logic in this file should only be performed once, for - # the base image, not for the variant variant. Hence, we have this check to avoid - # execution of this file for the variant image. - return() -endif() - -# Build and include hex file containing provisioned data for the bootloader. -set(PROVISION_HEX_NAME provision.hex) -set(PROVISION_HEX ${PROJECT_BINARY_DIR}/${PROVISION_HEX_NAME}) - -if(CONFIG_SECURE_BOOT) - if (DEFINED CONFIG_SB_MONOTONIC_COUNTER) - set(monotonic_counter_arg - --num-counter-slots-version ${CONFIG_SB_NUM_VER_COUNTER_SLOTS}) - endif() - - # Skip signing if MCUBoot is to be booted and its not built from source - if ((CONFIG_SB_VALIDATE_FW_SIGNATURE OR CONFIG_SB_VALIDATE_FW_HASH) AND - ((NOT (CONFIG_BOOTLOADER_MCUBOOT AND NOT CONFIG_MCUBOOT_BUILD_STRATEGY_FROM_SOURCE)) OR NCS_SYSBUILD_PARTITION_MANAGER)) - - # Input is comma separated string, convert to CMake list type - string(REPLACE "," ";" PUBLIC_KEY_FILES_LIST "${CONFIG_SB_PUBLIC_KEY_FILES}") - - include(${CMAKE_CURRENT_LIST_DIR}/debug_keys.cmake) - include(${CMAKE_CURRENT_LIST_DIR}/sign.cmake) - - if (${CONFIG_SB_DEBUG_SIGNATURE_PUBLIC_KEY_LAST}) - message(WARNING - " - ----------------------------------------------------------------- - --- WARNING: SB_DEBUG_SIGNATURE_PUBLIC_KEY_LAST is enabled. --- - --- This config should only be enabled for testing/debugging. --- - -----------------------------------------------------------------") - list(APPEND PUBLIC_KEY_FILES ${SIGNATURE_PUBLIC_KEY_FILE}) - else() - list(INSERT PUBLIC_KEY_FILES 0 ${SIGNATURE_PUBLIC_KEY_FILE}) - endif() - - # Convert CMake list type back to comma separated string. - string(REPLACE ";" "," PUBLIC_KEY_FILES "${PUBLIC_KEY_FILES}") - - set(public_keys_file_arg - --public-key-files "${PUBLIC_KEY_FILES}" - ) - - set(PROVISION_DEPENDS signature_public_key_file_target) - endif() - - # Adjustment to be able to load into sysbuild - if (CONFIG_SOC_NRF5340_CPUNET OR "${domain}" STREQUAL "CPUNET") - set(s0_arg --s0-addr $) - else() - set(s0_arg --s0-addr $) - set(s1_arg --s1-addr $) - endif() - - if (CONFIG_SB_DEBUG_NO_VERIFY_HASHES) - set(no_verify_hashes_arg --no-verify-hashes) - endif() -endif() - -if(CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION) - set(mcuboot_counters_slots --mcuboot-counters-slots ${CONFIG_MCUBOOT_HW_DOWNGRADE_PREVENTION_COUNTER_SLOTS}) -endif() - -if(CONFIG_SECURE_BOOT) -add_custom_command( - OUTPUT - ${PROVISION_HEX} - COMMAND - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/bootloader/provision.py - ${s0_arg} - ${s1_arg} - --provision-addr $ - ${public_keys_file_arg} - --output ${PROVISION_HEX} - --max-size ${CONFIG_PM_PARTITION_SIZE_PROVISION} - ${monotonic_counter_arg} - ${no_verify_hashes_arg} - ${mcuboot_counters_slots} - DEPENDS - ${PROVISION_KEY_DEPENDS} - ${PROVISION_DEPENDS} - WORKING_DIRECTORY - ${PROJECT_BINARY_DIR} - COMMENT - "Creating data to be provisioned to the Bootloader, storing to ${PROVISION_HEX_NAME}" - USES_TERMINAL - ) -elseif(CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION) -add_custom_command( - OUTPUT - ${PROVISION_HEX} - COMMAND - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/bootloader/provision.py - --mcuboot-only - --provision-addr $ - --output ${PROVISION_HEX} - --max-size ${CONFIG_PM_PARTITION_SIZE_PROVISION} - ${mcuboot_counters_num} - ${mcuboot_counters_slots} - DEPENDS - ${PROVISION_KEY_DEPENDS} - WORKING_DIRECTORY - ${PROJECT_BINARY_DIR} - COMMENT - "Creating data to be provisioned to the Bootloader, storing to ${PROVISION_HEX_NAME}" - USES_TERMINAL - ) -endif() - - -if(CONFIG_SECURE_BOOT OR CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION) - add_custom_target( - provision_target - DEPENDS - ${PROVISION_HEX} - ${PROVISION_DEPENDS} - ) - - get_property( - provision_set - GLOBAL PROPERTY provision_PM_HEX_FILE SET - ) - - if(NOT provision_set) - # Set hex file and target for the 'provision' placeholder partition. - # This includes the hex file (and its corresponding target) to the build. - set_property( - GLOBAL PROPERTY - provision_PM_HEX_FILE - ${PROVISION_HEX} - ) - - set_property( - GLOBAL PROPERTY - provision_PM_TARGET - provision_target - ) - endif() - -endif() diff --git a/subsys/bootloader/cmake/sign.cmake b/subsys/bootloader/cmake/sign.cmake deleted file mode 100644 index 03215a8f45b2..000000000000 --- a/subsys/bootloader/cmake/sign.cmake +++ /dev/null @@ -1,264 +0,0 @@ -# -# Copyright (c) 2018 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -set(GENERATED_PATH ${PROJECT_BINARY_DIR}/nrf/subsys/bootloader/generated) - -# This is needed for make, ninja is able to resolve and create the path but make -# is not able to resolve it. -file(MAKE_DIRECTORY ${GENERATED_PATH}) - -set(SIGNATURE_PUBLIC_KEY_FILE ${GENERATED_PATH}/public.pem) - -if (CONFIG_SB_SIGNING_PYTHON) - set(PUB_GEN_CMD - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/bootloader/keygen.py - --public - --in ${SIGNATURE_PRIVATE_KEY_FILE} - --out ${SIGNATURE_PUBLIC_KEY_FILE} - ) -elseif (CONFIG_SB_SIGNING_OPENSSL) - set(PUB_GEN_CMD - openssl ec - -pubout - -in ${SIGNATURE_PRIVATE_KEY_FILE} - -out ${SIGNATURE_PUBLIC_KEY_FILE} - ) -elseif (CONFIG_SB_SIGNING_CUSTOM) - set(SIGNATURE_PUBLIC_KEY_FILE ${CONFIG_SB_SIGNING_PUBLIC_KEY}) - if (NOT EXISTS ${SIGNATURE_PUBLIC_KEY_FILE} OR IS_DIRECTORY ${SIGNATURE_PUBLIC_KEY_FILE}) - message(WARNING "Invalid public key file: ${SIGNATURE_PUBLIC_KEY_FILE}") - endif() -else () - message(WARNING "Unable to parse signing config.") -endif() - -if (CONFIG_SB_PRIVATE_KEY_PROVIDED) - add_custom_command( - OUTPUT - ${SIGNATURE_PUBLIC_KEY_FILE} - COMMAND - ${PUB_GEN_CMD} - DEPENDS - ${SIGNATURE_PRIVATE_KEY_FILE} - COMMENT - "Creating public key from private key used for signing" - WORKING_DIRECTORY - ${PROJECT_BINARY_DIR} - USES_TERMINAL - ) -endif() - -# Public key file target is required for all signing options -add_custom_target( - signature_public_key_file_target - DEPENDS - ${SIGNATURE_PUBLIC_KEY_FILE} - ) - -include(${CMAKE_CURRENT_LIST_DIR}/../cmake/bl_validation_magic.cmake) - -set(slots s0_image) -if (CONFIG_SECURE_BOOT AND CONFIG_SOC_NRF5340_CPUNET AND NOT NCS_SYSBUILD_PARTITION_MANAGER) - list(APPEND slots app) -endif() - -if(NCS_SYSBUILD_PARTITION_MANAGER AND "${SB_CONFIG_SECURE_BOOT_DOMAIN}" STREQUAL "CPUNET") - get_property(domain_app GLOBAL PROPERTY DOMAIN_APP_${SB_CONFIG_SECURE_BOOT_DOMAIN}) - set(slots ${domain_app}) -endif() - -if (CONFIG_BUILD_S1_VARIANT) - list(APPEND slots s1_image) -endif () - -if (NOT "${CONFIG_SB_VALIDATION_INFO_CRYPTO_ID}" EQUAL "1") - message(FATAL_ERROR - "This value of SB_VALIDATION_INFO_CRYPTO_ID is not supported") -endif() - -foreach (slot ${slots}) - set(signed_hex ${PROJECT_BINARY_DIR}/signed_by_b0_${slot}.hex) - set(signed_bin ${PROJECT_BINARY_DIR}/signed_by_b0_${slot}.bin) - -if(NCS_SYSBUILD_PARTITION_MANAGER) - # A container can be merged, in which case we should use old style below, - # or it may be an actual image, where we know everything. - # Initial support disregards the merged hex files. - # In parent-child, everything is merged, even when having a single image in a - # container (where the original image == the merged image). - if(TARGET ${slot}) - # If slot is a target of it's own, then it means we target the hex directly and not a merged hex. - sysbuild_get(${slot}_image_dir IMAGE ${slot} VAR APPLICATION_BINARY_DIR CACHE) - sysbuild_get(${slot}_kernel_name IMAGE ${slot} VAR CONFIG_KERNEL_BIN_NAME KCONFIG) - - set(slot_hex ${${slot}_image_dir}/zephyr/${${slot}_kernel_name}.hex) - set(sign_depends ${${slot}_image_dir}/zephyr/${${slot}_kernel_name}.hex) - else() - set(slot_hex ${PROJECT_BINARY_DIR}/${slot}.hex) - set(sign_depends ${slot}_hex) - endif() -else() - if ("${slot}" STREQUAL "s1_image") - # The s1_image slot is built as a child image, add the dependency and - # path to its hex file accordingly. We cannot use the shared variables - # from the s1 child image since its configure stage might not have executed - # yet. - set(slot_hex ${CMAKE_BINARY_DIR}/s1_image/zephyr/zephyr.hex) - set(sign_depends s1_image_subimage) - else() - set(slot_hex ${PROJECT_BINARY_DIR}/${slot}.hex) - set(sign_depends ${slot}_hex) - endif() - list(APPEND sign_depends ${slot_hex} ${SIGN_KEY_FILE_DEPENDS}) -endif() - - set(to_sign ${slot_hex}) - set(hash_file ${GENERATED_PATH}/${slot}_firmware.sha256) - set(signature_file ${GENERATED_PATH}/${slot}_firmware.signature) - - set(hash_cmd - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/bootloader/hash.py - --in ${to_sign} - > ${hash_file} - ) - - if (CONFIG_SB_SIGNING_PYTHON) - set(sign_cmd - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/bootloader/do_sign.py - --private-key ${SIGNATURE_PRIVATE_KEY_FILE} - --in ${hash_file} - > ${signature_file} - ) - elseif (CONFIG_SB_SIGNING_OPENSSL) - set(sign_cmd - openssl dgst - -sha256 - -sign ${SIGNATURE_PRIVATE_KEY_FILE} ${hash_file} | - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/bootloader/asn1parse.py - --alg ecdsa - --contents signature - > ${signature_file} - ) - elseif (CONFIG_SB_SIGNING_CUSTOM) - set(custom_sign_cmd "${CONFIG_SB_SIGNING_COMMAND}") - - if (("${custom_sign_cmd}" STREQUAL "") OR (NOT EXISTS ${SIGNATURE_PUBLIC_KEY_FILE})) - message(FATAL_ERROR "You must specify a signing command and valid public key file for custom signing.") - endif() - - string(APPEND custom_sign_cmd " ${hash_file} > ${signature_file}") - string(REPLACE " " ";" sign_cmd ${custom_sign_cmd}) - else () - message(WARNING "Unable to parse signing config.") - endif() - - add_custom_command( - OUTPUT - ${signature_file} - COMMAND - ${hash_cmd} - COMMAND - ${sign_cmd} - DEPENDS - ${sign_depends} - WORKING_DIRECTORY - ${PROJECT_BINARY_DIR} - COMMENT - "Creating signature of application" - USES_TERMINAL - COMMAND_EXPAND_LISTS - ) - - add_custom_target( - ${slot}_signature_file_target - DEPENDS - ${signature_file} - ) - - add_custom_command( - OUTPUT - ${signed_hex} - ${signed_bin} - COMMAND - ${PYTHON_EXECUTABLE} - ${ZEPHYR_NRF_MODULE_DIR}/scripts/bootloader/validation_data.py - --input ${to_sign} - --output-hex ${signed_hex} - --output-bin ${signed_bin} - --offset ${CONFIG_SB_VALIDATION_METADATA_OFFSET} - --signature ${signature_file} - --public-key ${SIGNATURE_PUBLIC_KEY_FILE} - --magic-value "${VALIDATION_INFO_MAGIC}" - DEPENDS - ${SIGN_KEY_FILE_DEPENDS} - ${signature_file} - ${slot}_signature_file_target - ${SIGNATURE_PUBLIC_KEY_FILE} - WORKING_DIRECTORY - ${PROJECT_BINARY_DIR} - COMMENT - "Creating validation for ${KERNEL_HEX_NAME}, storing to ${SIGNED_KERNEL_HEX_NAME}" - USES_TERMINAL - ) - - add_custom_target( - ${slot}_signed_kernel_hex_target - DEPENDS - ${signed_hex} - ${slot}_signature_file_target - signature_public_key_file_target - ) - - # Set hex file and target for the ${slot) (s0/s1) container partition. - # This includes the hex file (and its corresponding target) to the build. - set_property( - GLOBAL PROPERTY - ${slot}_PM_HEX_FILE - ${signed_hex} - ) - - set_property( - GLOBAL PROPERTY - ${slot}_PM_TARGET - ${slot}_signed_kernel_hex_target - ) - -endforeach() - - -if (CONFIG_BUILD_S1_VARIANT AND NOT CONFIG_BOOTLOADER_MCUBOOT) - # B0 will boot the app directly, create the DFU zip. If MCUBoot is enabled, - # the DFU zip files is generated by the MCUBoot build code. - - # Create dependency to ensure explicit build order. This is needed to have - # a single target represent the state when both s0 and s1 imags are built. - add_dependencies( - s1_image_signed_kernel_hex_target - s0_image_signed_kernel_hex_target - ) - - include(${ZEPHYR_NRF_MODULE_DIR}/cmake/fw_zip.cmake) - - # Generate zip file with both update candidates - set(s0_name signed_by_b0_s0_image.bin) - set(s0_bin_path ${PROJECT_BINARY_DIR}/${s0_name}) - set(s1_name signed_by_b0_s1_image.bin) - set(s1_bin_path ${PROJECT_BINARY_DIR}/${s1_name}) - - generate_dfu_zip( - OUTPUT ${PROJECT_BINARY_DIR}/dfu_application.zip - BIN_FILES ${s0_bin_path} ${s1_bin_path} - TYPE application - SCRIPT_PARAMS - "${s0_name}load_address=$" - "${s1_name}load_address=$" - "version_B0=${CONFIG_FW_INFO_FIRMWARE_VERSION}" - ) -endif() diff --git a/subsys/bootloader/image/CMakeLists.txt b/subsys/bootloader/image/CMakeLists.txt deleted file mode 100644 index e8a460beef05..000000000000 --- a/subsys/bootloader/image/CMakeLists.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# Copyright (c) 2019 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -# This CMakeLists.txt is executed by the root application only when -# B0 (SECURE_BOOT) is enabled. First, figure out what image will be -# booted by B0, and set the required properties for that image to be -# bootable by B0. - -if (CONFIG_NCS_IS_VARIANT_IMAGE) - # When building the a variant of an image, the configuration of the variant image - # is identical to the base image, except 'CONFIG_NCS_IS_VARIANT_IMAGE'. This file is - # included if 'CONFIG_SECURE_BOOT' is set, which can be the case for the base - # image. However, the logic in this file should only be performed once, for - # the base image, not for the variant variant. Hence, we have this check to avoid - # execution of this file for the variant image. - return() -endif() - -if (CONFIG_BOOTLOADER_MCUBOOT) - set(image_to_boot mcuboot) - - add_overlay_config( - mcuboot - ${CMAKE_CURRENT_SOURCE_DIR}/multi_image_mcuboot.conf - ) -endif() - -if (image_to_boot) - # Include a kconfig file which enables CONFIG_FW_INFO in the image - # which is booted by B0. - add_overlay_config( - ${image_to_boot} - ${CMAKE_CURRENT_SOURCE_DIR}/fw_info.conf - ) -else() - assert(CONFIG_FW_INFO "CONFIG_FW_INFO must be set") -endif() diff --git a/subsys/bootloader/image/build_s1.conf b/subsys/bootloader/image/build_s1.conf deleted file mode 100644 index 8032d324aad8..000000000000 --- a/subsys/bootloader/image/build_s1.conf +++ /dev/null @@ -1 +0,0 @@ -CONFIG_BUILD_S1_VARIANT=y diff --git a/subsys/net/lib/nrf70_fw_ext/Kconfig b/subsys/net/lib/nrf70_fw_ext/Kconfig index bea2c33d5fb5..170058e96f8f 100644 --- a/subsys/net/lib/nrf70_fw_ext/Kconfig +++ b/subsys/net/lib/nrf70_fw_ext/Kconfig @@ -68,7 +68,6 @@ config NRF_WIFI_FW_PATCH_DFU bool "Direct Firmware Update of nRF70 FW patch" depends on PARTITION_MANAGER_ENABLED depends on BOOTLOADER_MCUBOOT - depends on !XIP_SPLIT_IMAGE help Enabling this option adds support for Device Firmware Update (DFU) for the nRF70 Series Firmware Patch. diff --git a/subsys/net/lib/nrf_cloud/Kconfig.nrf_cloud_fota b/subsys/net/lib/nrf_cloud/Kconfig.nrf_cloud_fota index 4a2d47c7a5bd..9be157ab82c6 100644 --- a/subsys/net/lib/nrf_cloud/Kconfig.nrf_cloud_fota +++ b/subsys/net/lib/nrf_cloud/Kconfig.nrf_cloud_fota @@ -149,7 +149,7 @@ config NRF_CLOUD_FOTA_TYPE_APP_SUPPORTED config NRF_CLOUD_FOTA_TYPE_BOOT_SUPPORTED bool - default y if (BOOTLOADER_MCUBOOT && BUILD_S1_VARIANT && SECURE_BOOT && \ + default y if (BOOTLOADER_MCUBOOT && MCUBOOT_MCUBOOT_IMAGE_NUMBER != -1 && \ NRF_CLOUD_FOTA_TRANSPORT_ENABLED) help This symbol is y when bootloader FOTA is supported by the configuration. diff --git a/subsys/net/lib/nrf_cloud/Kconfig.nrf_cloud_pgps b/subsys/net/lib/nrf_cloud/Kconfig.nrf_cloud_pgps index 7d3d68762fbb..8255f79089b2 100644 --- a/subsys/net/lib/nrf_cloud/Kconfig.nrf_cloud_pgps +++ b/subsys/net/lib/nrf_cloud/Kconfig.nrf_cloud_pgps @@ -130,7 +130,8 @@ config NRF_CLOUD_PGPS_SOCKET_RETRIES choice NRF_CLOUD_PGPS_STORAGE prompt "nRF Cloud P-GPS persistent storage location" - default NRF_CLOUD_PGPS_STORAGE_PARTITION if BUILD_S1_VARIANT +#TODO: Add MCUBOOT_BOOTLOADER_MODE_RAM_LOAD once included via next upmerge + default NRF_CLOUD_PGPS_STORAGE_PARTITION if MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP || MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP_WITH_REVERT default NRF_CLOUD_PGPS_STORAGE_MCUBOOT_SECONDARY if BOARD_THINGY91_NRF9160_NS help The P-GPS subsystem requires a contiguous section of flash memory in @@ -149,13 +150,14 @@ config NRF_CLOUD_PGPS_STORAGE_MCUBOOT_SECONDARY bool "Reuse MCUboot secondary partition for P-GPS storage" depends on BOOTLOADER_MCUBOOT depends on IMG_MANAGER - depends on !BUILD_S1_VARIANT +#TODO: Add MCUBOOT_BOOTLOADER_MODE_RAM_LOAD once included via next upmerge + depends on !MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP && !MCUBOOT_BOOTLOADER_MODE_DIRECT_XIP_WITH_REVERT help If set, use the secondary MCUboot partition to also store P-GPS data. Note that when a FOTA job executes, this data will be lost and will have to be downloaded again after the FOTA job is complete. This is not compatible with FOTA updates of MUCboot itself, which is possible - when SECURE_BOOT and BUILD_S1_VARIANT are enabled. + when SECURE_BOOT is enabled. config NRF_CLOUD_PGPS_STORAGE_CUSTOM bool "Use application-provided location and size in flash" diff --git a/subsys/partition_manager/CMakeLists.txt b/subsys/partition_manager/CMakeLists.txt index a5500c480322..f0f99fe21740 100644 --- a/subsys/partition_manager/CMakeLists.txt +++ b/subsys/partition_manager/CMakeLists.txt @@ -13,11 +13,7 @@ if (CONFIG_PARTITION_MANAGER_ENABLED) endif() # Hacked location, but currently we need it and child image is not used. - -if(SYSBUILD) - set_shared(IMAGE ${IMAGE_NAME} PROPERTY ZEPHYR_BINARY_DIR ${ZEPHYR_BINARY_DIR}) -endif() - +set_shared(IMAGE ${IMAGE_NAME} PROPERTY ZEPHYR_BINARY_DIR ${ZEPHYR_BINARY_DIR}) function(preprocess_pm_yml in_file out_file) execute_process( @@ -36,20 +32,17 @@ function(preprocess_pm_yml in_file out_file) message(FATAL_ERROR "command failed with return code: ${ret}") endif() - if (DEFINED IMAGE_NAME OR SYSBUILD) - # Share location of original source file so that the parent image can add it - # to the CMAKE_CONFIGURE_DEPENDS list. - set_shared(IMAGE ${IMAGE_NAME} APPEND PROPERTY PM_YML_DEP_FILES ${in_file}) + # Share location of original source file so that the parent image can add it + # to the CMAKE_CONFIGURE_DEPENDS list. + set_shared(IMAGE ${IMAGE_NAME} APPEND PROPERTY PM_YML_DEP_FILES ${in_file}) - # Share location of preprocessed pm.yml file so that the parent image can - # use it as source for partition manager configuration. - set_shared(IMAGE ${IMAGE_NAME} APPEND PROPERTY PM_YML_FILES ${out_file}) - endif() + # Share location of preprocessed pm.yml file so that the parent image can + # use it as source for partition manager configuration. + set_shared(IMAGE ${IMAGE_NAME} APPEND PROPERTY PM_YML_FILES ${out_file}) # Re-configure (Re-execute all CMakeLists.txt code) when original # (not preprocessed) configuration file changes. set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${in_file}) - endfunction() @@ -140,24 +133,17 @@ endif() # We are using partition manager if we are a child image or if we are # the root image and the 'partition_manager' target exists. -if (SYSBUILD) - set(using_partition_manager 1) -else() - set(using_partition_manager - $,$> - ) -endif() zephyr_compile_definitions( - USE_PARTITION_MANAGER=${using_partition_manager} + USE_PARTITION_MANAGER=1 ) # TODO: check how this patch got lost and if more are missing set_property(GLOBAL APPEND PROPERTY PROPERTY_LINKER_SCRIPT_DEFINES - -DUSE_PARTITION_MANAGER=${using_partition_manager} + -DUSE_PARTITION_MANAGER=1 ) -if((EXISTS ${CMAKE_SOURCE_DIR}/pm.yml) AND (IMAGE_NAME OR (SYSBUILD AND NOT SYSBUILD_MAIN_APP))) +if((EXISTS ${CMAKE_SOURCE_DIR}/pm.yml) AND (IMAGE_NAME OR NOT SYSBUILD_MAIN_APP)) # Only preprocess pm.yml when being built as sub image. preprocess_pm_yml( diff --git a/subsys/partition_manager/Kconfig b/subsys/partition_manager/Kconfig index 1ac7b3f068e9..3f3ba8b6db28 100644 --- a/subsys/partition_manager/Kconfig +++ b/subsys/partition_manager/Kconfig @@ -218,7 +218,6 @@ config PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY # option is propagated to the MCUboot child image automatically. depends on PM_EXTERNAL_FLASH_ENABLED || MCUBOOT default y if BOOTLOADER_MCUBOOT - imply ADD_MCUBOOT_MEDIATE_SIM_FLASH_DTS help Place the secondary partition of MCUboot in the external flash instead of the internal flash. This option should only be enabled by the user diff --git a/subsys/partition_manager/Kconfig.template.build_strategy b/subsys/partition_manager/Kconfig.template.build_strategy deleted file mode 100644 index 8e1b46091877..000000000000 --- a/subsys/partition_manager/Kconfig.template.build_strategy +++ /dev/null @@ -1,34 +0,0 @@ -if !HIDE_CHILD_PARENT_CONFIG - -choice - prompt "$(module) build strategy" - default $(module)_BUILD_STRATEGY_FROM_SOURCE - -config $(module)_BUILD_STRATEGY_USE_HEX_FILE - # Mandatory option when being built through add_child_image' - bool "Use hex file instead of building $(module)" - select PM_IMAGE_NOT_BUILT_FROM_SOURCE - select PARTITION_MANAGER_ENABLED - -if $(module)_BUILD_STRATEGY_USE_HEX_FILE - -config $(module)_HEX_FILE - # Mandatory option when being built through add_child_image' - string "$(module) hex file" - -endif # $(module)_BUILD_STRATEGY_USE_HEX_FILE - -config $(module)_BUILD_STRATEGY_SKIP_BUILD - # Mandatory option when being built through add_child_image' - bool "Skip building $(module)" - select PM_IMAGE_NOT_BUILT_FROM_SOURCE - select PARTITION_MANAGER_ENABLED - -config $(module)_BUILD_STRATEGY_FROM_SOURCE - # Mandatory option when being built through add_child_image' - bool "Build from source" - select PARTITION_MANAGER_ENABLED - -endchoice - -endif diff --git a/subsys/zigbee/lib/zigbee_fota/Kconfig b/subsys/zigbee/lib/zigbee_fota/Kconfig index 9db271cb239a..83499f9b27dc 100644 --- a/subsys/zigbee/lib/zigbee_fota/Kconfig +++ b/subsys/zigbee/lib/zigbee_fota/Kconfig @@ -10,7 +10,6 @@ menuconfig ZIGBEE_FOTA imply MCUMGR imply DFU_TARGET imply DFU_MULTI_IMAGE - imply DFU_MULTI_IMAGE_PACKAGE_BUILD if !ZIGBEE_FOTA_GENERATE_LEGACY_IMAGE_TYPE if ZIGBEE_FOTA diff --git a/sysbuild/CMakeLists.txt b/sysbuild/CMakeLists.txt index b960f8dba7fa..e5138d67ef4f 100644 --- a/sysbuild/CMakeLists.txt +++ b/sysbuild/CMakeLists.txt @@ -73,13 +73,7 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake) restore_ncs_vars() if(NOT SB_CONFIG_PARTITION_MANAGER) - # Disable any Kconfigs for child images in the main application - foreach(config NCS_SAMPLE_EMPTY_APP_CORE_CHILD_IMAGE NCS_INCLUDE_RPMSG_CHILD_IMAGE NCS_SAMPLE_REMOTE_SHELL_CHILD_IMAGE - NCS_SAMPLE_DTM_REMOTE_HCI_CHILD_IMAGE NCS_SAMPLE_PERIPHERAL_RADIO_TEST_CHILD_IMAGE B0_BUILD_STRATEGY_USE_HEX_FILE - B0_BUILD_STRATEGY_SKIP_BUILD B0_BUILD_STRATEGY_FROM_SOURCE PM_SINGLE_IMAGE MCUBOOT_BUILD_STRATEGY_USE_HEX_FILE - MCUBOOT_BUILD_STRATEGY_SKIP_BUILD MCUBOOT_BUILD_STRATEGY_FROM_SOURCE) - set_config_bool(${DEFAULT_IMAGE} CONFIG_${config} n) - endforeach() + set_config_bool(PM_SINGLE_IMAGE CONFIG_PM_SINGLE_IMAGE n) endif() foreach(image ${PRE_CMAKE_IMAGES}) diff --git a/tests/modules/mcuboot/direct_xip/child_image/mcuboot.conf b/tests/modules/mcuboot/direct_xip/child_image/mcuboot.conf deleted file mode 100644 index 6808e7be7168..000000000000 --- a/tests/modules/mcuboot/direct_xip/child_image/mcuboot.conf +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright (c) 2022 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -CONFIG_BOOT_DIRECT_XIP=y -CONFIG_PM_PARTITION_SIZE_MCUBOOT=0x10000 diff --git a/tests/modules/mcuboot/direct_xip/testcase.yaml b/tests/modules/mcuboot/direct_xip/testcase.yaml index b8d609be3507..8896626360ea 100644 --- a/tests/modules/mcuboot/direct_xip/testcase.yaml +++ b/tests/modules/mcuboot/direct_xip/testcase.yaml @@ -9,14 +9,3 @@ tests: - nrf52840dk/nrf52840 - nrf52dk/nrf52832 - nrf5340dk/nrf5340/cpuapp - # Deprecated child and parent build to ensure feature does not break until it is removed - mcuboot.direct_xip.child_parent: - sysbuild: false - tags: mcuboot direct_xip child_parent deprecated ci_tests_modules_mcuboot - platform_allow: nrf9160dk/nrf9160 nrf52840dk/nrf52840 nrf52dk/nrf52832 - nrf5340dk/nrf5340/cpuapp - integration_platforms: - - nrf9160dk/nrf9160 - - nrf52840dk/nrf52840 - - nrf52dk/nrf52832 - - nrf5340dk/nrf5340/cpuapp diff --git a/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf52840dk_nrf52840.overlay b/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf52840dk_nrf52840.overlay deleted file mode 100644 index fcc2e240fd9e..000000000000 --- a/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf52840dk_nrf52840.overlay +++ /dev/null @@ -1,5 +0,0 @@ -/ { - chosen { - nordic,pm-ext-flash = &mx25r64; - }; -}; diff --git a/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.conf b/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.conf deleted file mode 100644 index cf77dbe7f356..000000000000 --- a/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.conf +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (c) 2021 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - - -# The following configurations are required to support simultaneous multi image update -CONFIG_PCD_APP=y -CONFIG_UPDATEABLE_IMAGE_NUMBER=2 -CONFIG_FLASH_SIMULATOR=y -CONFIG_FLASH_SIMULATOR_DOUBLE_WRITES=y -CONFIG_FLASH_SIMULATOR_STATS=n -CONFIG_BOOT_UPGRADE_ONLY=y - -CONFIG_SIZE_OPTIMIZATIONS=y diff --git a/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.overlay b/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.overlay deleted file mode 100644 index fcc2e240fd9e..000000000000 --- a/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/nrf5340dk_nrf5340_cpuapp.overlay +++ /dev/null @@ -1,5 +0,0 @@ -/ { - chosen { - nordic,pm-ext-flash = &mx25r64; - }; -}; diff --git a/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/thingy53_nrf5340_cpuapp.conf b/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/thingy53_nrf5340_cpuapp.conf deleted file mode 100644 index 8e0b8baae3c4..000000000000 --- a/tests/modules/mcuboot/external_flash/child_image/mcuboot/boards/thingy53_nrf5340_cpuapp.conf +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2021 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -# MCUBoot serial -CONFIG_GPIO=y -CONFIG_BOOT_SERIAL_CDC_ACM=y - -# USB -CONFIG_USB_DEVICE_STACK=y -CONFIG_USB_DEVICE_REMOTE_WAKEUP=n -CONFIG_USB_DEVICE_MANUFACTURER="Nordic Semiconductor ASA" -CONFIG_USB_DEVICE_PRODUCT="Bootloader Thingy:53" -CONFIG_USB_DEVICE_VID=0x1915 -CONFIG_USB_DEVICE_PID=0x5300 -CONFIG_USB_CDC_ACM=y - -# Decrease memory footprint -CONFIG_SPI=n -CONFIG_I2C=n -CONFIG_UART_NRFX=n - -# The following configurations are required to support simultaneous multi image update -CONFIG_PCD_APP=y -CONFIG_UPDATEABLE_IMAGE_NUMBER=2 -CONFIG_FLASH_SIMULATOR=y -CONFIG_FLASH_SIMULATOR_DOUBLE_WRITES=y -CONFIG_FLASH_SIMULATOR_STATS=n -CONFIG_BOOT_UPGRADE_ONLY=y diff --git a/tests/modules/mcuboot/external_flash/child_image/mcuboot/prj.conf b/tests/modules/mcuboot/external_flash/child_image/mcuboot/prj.conf deleted file mode 100644 index 944f3c8b6f9d..000000000000 --- a/tests/modules/mcuboot/external_flash/child_image/mcuboot/prj.conf +++ /dev/null @@ -1,26 +0,0 @@ -# -# Copyright (c) 2021 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -# In order to provide board specific configurations to the MCUboot child image -# we also need to provide a base configuration for MCUboot. This file contains -# the basic configurations needed to successfully build and run MCUboot. - -# MCUboot requires a large stack size, otherwise an MPU fault will occur -CONFIG_MAIN_STACK_SIZE=10240 - -# Enable flash operations -CONFIG_FLASH=y - -# This must be increased to accommodate the bigger images. -CONFIG_BOOT_MAX_IMG_SECTORS=256 - -# Enable serial recovery -CONFIG_UART_CONSOLE=n -CONFIG_MCUBOOT_SERIAL=y -CONFIG_MCUBOOT_SERIAL_DIRECT_IMAGE_UPLOAD=y - -# Use minimal C library instead of the Picolib -CONFIG_MINIMAL_LIBC=y diff --git a/tests/modules/mcuboot/external_flash/testcase.yaml b/tests/modules/mcuboot/external_flash/testcase.yaml index a994e6666848..b56716e1efd1 100644 --- a/tests/modules/mcuboot/external_flash/testcase.yaml +++ b/tests/modules/mcuboot/external_flash/testcase.yaml @@ -7,12 +7,3 @@ tests: - nrf52840dk/nrf52840 - nrf5340dk/nrf5340/cpuapp - thingy53/nrf5340/cpuapp - # Deprecated child and parent build to ensure feature does not break until it is removed - mcuboot.external_flash.child_parent: - sysbuild: false - platform_allow: nrf52840dk/nrf52840 nrf5340dk/nrf5340/cpuapp thingy53/nrf5340/cpuapp - tags: mcuboot external_flash child_parent deprecated ci_tests_modules_mcuboot - integration_platforms: - - nrf52840dk/nrf52840 - - nrf5340dk/nrf5340/cpuapp - - thingy53/nrf5340/cpuapp diff --git a/tests/nrf5340_audio/sw_codec_lc3/prj.conf b/tests/nrf5340_audio/sw_codec_lc3/prj.conf index ce816fad9192..6b8ec822a804 100644 --- a/tests/nrf5340_audio/sw_codec_lc3/prj.conf +++ b/tests/nrf5340_audio/sw_codec_lc3/prj.conf @@ -5,7 +5,6 @@ CONFIG_NEWLIB_LIBC=y CONFIG_CMSIS_DSP=y CONFIG_SW_CODEC_LC3_T2_SOFTWARE=y -CONFIG_NCS_INCLUDE_RPMSG_CHILD_IMAGE=n CONFIG_BT=n # Added large stack sizes. Can be optimized. diff --git a/tests/subsys/bluetooth/mesh/metadata_extraction/CMakeLists.txt b/tests/subsys/bluetooth/mesh/metadata_extraction/CMakeLists.txt index 52b5368f0b65..0768a85c62ad 100644 --- a/tests/subsys/bluetooth/mesh/metadata_extraction/CMakeLists.txt +++ b/tests/subsys/bluetooth/mesh/metadata_extraction/CMakeLists.txt @@ -18,12 +18,3 @@ if(CONFIG_COMP_DATA_LAYOUT_SINGLE) else() list(PREPEND script_args --multiple) endif() - -list(APPEND script_args childparent) - -if(NOT SYSBUILD) - add_custom_target(verify_metadata ALL - ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/verify_metadata.py ${script_args} - DEPENDS parse_mesh_metadata - ) -endif() diff --git a/tests/subsys/bluetooth/mesh/metadata_extraction/prj.conf b/tests/subsys/bluetooth/mesh/metadata_extraction/prj.conf index e118e010754d..7f52173bd510 100644 --- a/tests/subsys/bluetooth/mesh/metadata_extraction/prj.conf +++ b/tests/subsys/bluetooth/mesh/metadata_extraction/prj.conf @@ -15,7 +15,6 @@ CONFIG_BT_PERIPHERAL=y # Bluetooth Mesh configuration CONFIG_BT_MESH=y -CONFIG_BT_MESH_DFU_METADATA_ON_BUILD=y # Set to something other than default to check that it is parsed correctly CONFIG_BT_MESH_CRPL=64 diff --git a/tests/subsys/bootloader/bl_crypto/child_image/mcuboot.conf b/tests/subsys/bootloader/bl_crypto/child_image/mcuboot.conf deleted file mode 100644 index 562f839c88c8..000000000000 --- a/tests/subsys/bootloader/bl_crypto/child_image/mcuboot.conf +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_EXT_API_PROVIDE_EXT_API_ATLEAST_OPTIONAL=y -CONFIG_REBOOT=y diff --git a/tests/subsys/bootloader/bl_crypto/testcase.yaml b/tests/subsys/bootloader/bl_crypto/testcase.yaml index a440aadd358f..cdd7749f5a07 100644 --- a/tests/subsys/bootloader/bl_crypto/testcase.yaml +++ b/tests/subsys/bootloader/bl_crypto/testcase.yaml @@ -18,23 +18,3 @@ tests: - nrf9160dk/nrf9160 - nrf9161dk/nrf9161 tags: b0 sysbuild ci_tests_subsys_bootloader - # Deprecated child and parent build to ensure feature does not break until it is removed - bootloader.bl_crypto.child_parent: - sysbuild: false - platform_allow: - - nrf52833dk/nrf52833 - - nrf52840dk/nrf52840 - - nrf52dk/nrf52832 - - nrf5340dk/nrf5340/cpuapp - - nrf9151dk/nrf9151 - - nrf9160dk/nrf9160 - - nrf9161dk/nrf9161 - integration_platforms: - - nrf52833dk/nrf52833 - - nrf52840dk/nrf52840 - - nrf52dk/nrf52832 - - nrf5340dk/nrf5340/cpuapp - - nrf9151dk/nrf9151 - - nrf9160dk/nrf9160 - - nrf9161dk/nrf9161 - tags: b0 child_parent deprecated ci_tests_subsys_bootloader diff --git a/tests/subsys/bootloader/bl_validation/prj.conf b/tests/subsys/bootloader/bl_validation/prj.conf index a1ca118cc254..8264dab9c928 100644 --- a/tests/subsys/bootloader/bl_validation/prj.conf +++ b/tests/subsys/bootloader/bl_validation/prj.conf @@ -17,4 +17,3 @@ CONFIG_SB_DEBUG_SIGNATURE_PUBLIC_KEY_LAST=y CONFIG_NRFX_NVMC=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_NULL_POINTER_EXCEPTION_DETECTION_NONE=y -CONFIG_BUILD_S1_VARIANT=y diff --git a/tests/subsys/bootloader/bl_validation_ff_key/Kconfig b/tests/subsys/bootloader/bl_validation_ff_key/Kconfig deleted file mode 100644 index 587f28fdd11d..000000000000 --- a/tests/subsys/bootloader/bl_validation_ff_key/Kconfig +++ /dev/null @@ -1,11 +0,0 @@ -# -# Copyright (c) 2021 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -config SB_DEBUG_NO_VERIFY_HASHES - bool - default y - -source "Kconfig.zephyr" diff --git a/tests/subsys/fw_info/prj.conf b/tests/subsys/fw_info/prj.conf index a20d061580e9..73aa4c810b43 100644 --- a/tests/subsys/fw_info/prj.conf +++ b/tests/subsys/fw_info/prj.conf @@ -13,4 +13,3 @@ CONFIG_FW_INFO=y CONFIG_REBOOT=y CONFIG_MPU_ALLOW_FLASH_WRITE=y CONFIG_FLASH=y -CONFIG_BUILD_S1_VARIANT=y diff --git a/tests/subsys/net/lib/nrf_cloud/fota_common/src/main.c b/tests/subsys/net/lib/nrf_cloud/fota_common/src/main.c index 50850c574e69..66543bb3244d 100644 --- a/tests/subsys/net/lib/nrf_cloud/fota_common/src/main.c +++ b/tests/subsys/net/lib/nrf_cloud/fota_common/src/main.c @@ -71,12 +71,10 @@ ZTEST(nrf_cloud_fota_common_test, test_nrf_cloud_fota_is_type_enabled) ret = nrf_cloud_fota_is_type_enabled(NRF_CLOUD_FOTA_BOOTLOADER); zassert_equal(IS_ENABLED(CONFIG_BOOTLOADER_MCUBOOT) && - IS_ENABLED(CONFIG_BUILD_S1_VARIANT) && - IS_ENABLED(CONFIG_SECURE_BOOT), + CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER != -1), ret, "BOOT FOTA enabled should correspond to the value of: " - "CONFIG_BOOTLOADER_MCUBOOT + CONFIG_BUILD_S1_VARIANT + " - "CONFIG_SECURE_BOOT"); + "CONFIG_BOOTLOADER_MCUBOOT + CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER != -1"); ret = nrf_cloud_fota_is_type_enabled(NRF_CLOUD_FOTA_MODEM_DELTA); zassert_equal(IS_ENABLED(CONFIG_NRF_MODEM), ret, diff --git a/tests/subsys/partition_manager/static_pm_file/testcase.yaml b/tests/subsys/partition_manager/static_pm_file/testcase.yaml index 254300f282d1..c05baf7ff7c8 100644 --- a/tests/subsys/partition_manager/static_pm_file/testcase.yaml +++ b/tests/subsys/partition_manager/static_pm_file/testcase.yaml @@ -9,9 +9,3 @@ tests: extra_args: - PM_STATIC_YML_FILE=test_file.yml tags: sysbuild - static_pm_file.child_parent: - platform_allow: nrf5340dk/nrf5340/cpuapp - integration_platforms: - - nrf5340dk/nrf5340/cpuapp - extra_args: - - PM_STATIC_YML_FILE=${CMAKE_CURRENT_SOURCE_DIR}/test_file.yml diff --git a/tests/subsys/pcd/child_image/hello_world.conf b/tests/subsys/pcd/child_image/hello_world.conf deleted file mode 100644 index 9059875e8efc..000000000000 --- a/tests/subsys/pcd/child_image/hello_world.conf +++ /dev/null @@ -1,8 +0,0 @@ -# -# Copyright (c) 2021 Nordic Semiconductor ASA -# -# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause -# - -# Enable B0N on the network core -CONFIG_SECURE_BOOT=y diff --git a/tests/subsys/pcd/testcase.yaml b/tests/subsys/pcd/testcase.yaml index 03728688ee7a..687ac46ddb42 100644 --- a/tests/subsys/pcd/testcase.yaml +++ b/tests/subsys/pcd/testcase.yaml @@ -5,10 +5,3 @@ tests: integration_platforms: - nrf5340dk/nrf5340/cpuapp tags: pcd sysbuild ci_tests_subsys_pcd - # Deprecated child and parent build to ensure feature does not break until it is removed - dfu.pcd.sysbuild.child_parent: - sysbuild: false - platform_allow: nrf5340dk/nrf5340/cpuapp - integration_platforms: - - nrf5340dk/nrf5340/cpuapp - tags: pcd child_parent deprecated ci_tests_subsys_pcd