Hi everyone,
I have a fairly mature project that I am now required to add MCUboot to so that remote firmware updates can be possible. I am building for a custom board based upon the NRF9160.
I have verified the following things so far:
- My project builds with CONFIG_MCUBOOT=n without issue
- I can build a simple sample (hello world) with CONFIG_MCUBOOT=y on my custom board
I get the following output message from the build process:
Building SG-Firmware
west build --build-dir /home/cmabon/Documents/Projects/SG-Firmware/build_primary /home/cmabon/Documents/Projects/SG-Firmware --pristine --board crm_nrf9160_primary_ns --no-sysbuild -- -DNCS_TOOLCHAIN_VERSION=NONE -DBOARD_ROOT=/home/cmabon/ncs/v2.4.1/zephyr;/home/cmabon/Documents/Projects/SG-Firmware -Db0_OVERLAY_CONFIG=/home/cmabon/ncs/v2.5.0/nrf/subsys/partition_manager/partition_manager_enabled.conf -Dmcuboot_OVERLAY_CONFIG=/home/cmabon/Documents/Projects/SG-Firmware/child_image/mcuboot.conf;/home/cmabon/ncs/v2.5.0/nrf/subsys/partition_manager/partition_manager_enabled.conf -DCACHED_CONF_FILE=/home/cmabon/Documents/Projects/SG-Firmware/prj.conf -DDTC_OVERLAY_FILE=/home/cmabon/Documents/Projects/SG-Firmware/boards/crm_nrf9160_primary_ns.overlay
-- west build: generating a build system
Loading Zephyr default modules (Zephyr base).
-- Application: /home/cmabon/Documents/Projects/SG-Firmware
-- CMake version: 3.20.5
-- Found Python3: /home/cmabon/ncs/toolchains/7795df4459/usr/local/bin/python3.8 (found suitable version "3.8.2", minimum required is "3.8") found components: Interpreter
-- Cache files will be written to: /home/cmabon/.cache/zephyr
-- Zephyr version: 3.4.99 (/home/cmabon/ncs/v2.5.0/zephyr)
-- Found west (found suitable version "1.1.0", minimum required is "0.14.0")
CMake Warning at /home/cmabon/ncs/v2.5.0/zephyr/cmake/modules/boards.cmake:92 (message):
BOARD_ROOT element without a 'boards' subdirectory:
/home/cmabon/ncs/v2.4.1/zephyr
Hints:
- if your board directory is '/foo/bar/boards/<ARCH>/my_board' then add '/foo/bar' to BOARD_ROOT, not the entire board directory
- if in doubt, use absolute paths
Call Stack (most recent call first):
/home/cmabon/ncs/v2.5.0/zephyr/cmake/modules/zephyr_default.cmake:129 (include)
/home/cmabon/ncs/v2.5.0/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:66 (include)
/home/cmabon/ncs/v2.5.0/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:92 (include_boilerplate)
CMakeLists.txt:5 (find_package)
-- Board: crm_nrf9160_primary_ns
-- Found host-tools: zephyr 0.16.1 (/home/cmabon/ncs/toolchains/7795df4459/opt/zephyr-sdk)
-- Found toolchain: zephyr 0.16.1 (/home/cmabon/ncs/toolchains/7795df4459/opt/zephyr-sdk)
-- Found Dtc: /home/cmabon/ncs/toolchains/7795df4459/usr/bin/dtc (found suitable version "1.4.7", minimum required is "1.4.6")
-- Found BOARD.dts: /home/cmabon/ncs/v2.5.0/zephyr/boards/arm/crm_nrf9160_primary/crm_nrf9160_primary_ns.dts
-- Found devicetree overlay: /home/cmabon/Documents/Projects/SG-Firmware/boards/crm_nrf9160_primary_ns.overlay
-- Generated zephyr.dts: /home/cmabon/Documents/Projects/SG-Firmware/build_primary/zephyr/zephyr.dts
-- Generated devicetree_generated.h: /home/cmabon/Documents/Projects/SG-Firmware/build_primary/zephyr/include/generated/devicetree_generated.h
-- Including generated dts.cmake file: /home/cmabon/Documents/Projects/SG-Firmware/build_primary/zephyr/dts.cmake
warning: FILE_SYSTEM_SHELL (defined at subsys/fs/Kconfig:46) was assigned the value 'y' but got the
value 'n'. Check these unsatisfied dependencies: FILE_SYSTEM (=n). See
http://docs.zephyrproject.org/latest/kconfig.html#CONFIG_FILE_SYSTEM_SHELL and/or look up
FILE_SYSTEM_SHELL in the menuconfig/guiconfig interface. The Application Development Primer, Setting
Configuration Values, and Kconfig - Tips and Best Practices sections of the manual might be helpful
too.
warning: Experimental symbol AZURE_IOT_HUB is enabled.
warning: Experimental symbol HTTP_CLIENT is enabled.
warning: Experimental symbol NET_CONNECTION_MANAGER is enabled.
Parsing /home/cmabon/ncs/v2.5.0/zephyr/Kconfig
Loaded configuration '/home/cmabon/ncs/v2.5.0/zephyr/boards/arm/crm_nrf9160_primary/crm_nrf9160_primary_ns_defconfig'
Merged configuration '/home/cmabon/Documents/Projects/SG-Firmware/prj.conf'
Configuration saved to '/home/cmabon/Documents/Projects/SG-Firmware/build_primary/zephyr/.config'
Kconfig header saved to '/home/cmabon/Documents/Projects/SG-Firmware/build_primary/zephyr/include/generated/autoconf.h'
-- Found GnuLd: /home/cmabon/ncs/toolchains/7795df4459/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd (found version "2.38")
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- The ASM compiler identification is GNU
-- Found assembler: /home/cmabon/ncs/toolchains/7795df4459/opt/zephyr-sdk/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc
-- Found Python3: /home/cmabon/ncs/toolchains/7795df4459/usr/local/bin/python3.8 (found version "3.8.2") found components: Interpreter
Changed board to secure crm_nrf9160_primary (NOT NS)
=== child image mcuboot - begin ===
loading initial cache file /home/cmabon/Documents/Projects/SG-Firmware/build_primary/mcuboot/child_image_preload.cmake
Loading Zephyr default modules (Zephyr base).
-- Application: /home/cmabon/ncs/v2.5.0/bootloader/mcuboot/boot/zephyr
-- CMake version: 3.20.5
-- Found Python3: /home/cmabon/ncs/toolchains/7795df4459/usr/local/bin/python3.8 (found suitable version "3.8.2", minimum required is "3.8") found components: Interpreter
-- Cache files will be written to: /home/cmabon/.cache/zephyr
-- Zephyr version: 3.4.99 (/home/cmabon/ncs/v2.5.0/zephyr)
-- Found west (found suitable version "1.1.0", minimum required is "0.14.0")
-- Board: crm_nrf9160_primary
-- Found host-tools: zephyr 0.16.1 (/home/cmabon/ncs/toolchains/7795df4459/opt/zephyr-sdk)
-- Found toolchain: zephyr 0.16.1 (/home/cmabon/ncs/toolchains/7795df4459/opt/zephyr-sdk)
-- Found Dtc: /home/cmabon/ncs/toolchains/7795df4459/usr/bin/dtc (found suitable version "1.4.7", minimum required is "1.4.6")
-- Found BOARD.dts: /home/cmabon/ncs/v2.5.0/zephyr/boards/arm/crm_nrf9160_primary/crm_nrf9160_primary.dts
-- Found devicetree overlay: /home/cmabon/ncs/v2.5.0/bootloader/mcuboot/boot/zephyr/app.overlay
-- Generated zephyr.dts: /home/cmabon/Documents/Projects/SG-Firmware/build_primary/mcuboot/zephyr/zephyr.dts
-- Generated devicetree_generated.h: /home/cmabon/Documents/Projects/SG-Firmware/build_primary/mcuboot/zephyr/include/generated/devicetree_generated.h
-- Including generated dts.cmake file: /home/cmabon/Documents/Projects/SG-Firmware/build_primary/mcuboot/zephyr/dts.cmake
Parsing /home/cmabon/ncs/v2.5.0/bootloader/mcuboot/boot/zephyr/Kconfig
Loaded configuration '/home/cmabon/ncs/v2.5.0/zephyr/boards/arm/crm_nrf9160_primary/crm_nrf9160_primary_defconfig'
Merged configuration '/home/cmabon/ncs/v2.5.0/bootloader/mcuboot/boot/zephyr/prj.conf'
Merged configuration '/home/cmabon/Documents/Projects/SG-Firmware/child_image/mcuboot.conf'
Merged configuration '/home/cmabon/Documents/Projects/SG-Firmware/build_primary/mcuboot/zephyr/misc/generated/extra_kconfig_options.conf'
Configuration saved to '/home/cmabon/Documents/Projects/SG-Firmware/build_primary/mcuboot/zephyr/.config'
Kconfig header saved to '/home/cmabon/Documents/Projects/SG-Firmware/build_primary/mcuboot/zephyr/include/generated/autoconf.h'
warning: UART_CONSOLE (defined at drivers/console/Kconfig:43) was assigned the value 'y' but got the
value 'n'. Check these unsatisfied dependencies: SERIAL (=n), SERIAL_HAS_DRIVER (=n). See
http://docs.zephyrproject.org/latest/kconfig.html#CONFIG_UART_CONSOLE and/or look up UART_CONSOLE in
the menuconfig/guiconfig interface. The Application Development Primer, Setting Configuration
Values, and Kconfig - Tips and Best Practices sections of the manual might be helpful too.
-- Found GnuLd: /home/cmabon/ncs/toolchains/7795df4459/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd (found version "2.38")
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- The ASM compiler identification is GNU
-- Found assembler: /home/cmabon/ncs/toolchains/7795df4459/opt/zephyr-sdk/arm-zephyr-eabi/bin/arm-zephyr-eabi-gcc
CMake Warning at /home/cmabon/ncs/v2.5.0/zephyr/CMakeLists.txt:893 (message):
No SOURCES given to Zephyr library: drivers__console
Excluding target from build.
MCUBoot bootloader key file: /home/cmabon/ncs/v2.5.0/bootloader/mcuboot/root-ec-p256.pem
-- Configuring done
-- Generating done
-- Build files have been written to: /home/cmabon/Documents/Projects/SG-Firmware/build_primary/mcuboot
=== child image mcuboot - end ===
CMake Warning at /home/cmabon/ncs/v2.5.0/nrf/modules/mcuboot/CMakeLists.txt:320 (message):
---------------------------------------------------------
--- WARNING: Using default MCUBoot key, it should not ---
--- be used for production. ---
---------------------------------------------------------
CMake Warning at /home/cmabon/ncs/v2.5.0/nrf/cmake/partition_manager.cmake:79 (message):
---------------------------------------------------------------------
--- 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. ---
---------------------------------------------------------------------
Call Stack (most recent call first):
/home/cmabon/ncs/v2.5.0/zephyr/cmake/modules/kernel.cmake:247 (include)
/home/cmabon/ncs/v2.5.0/zephyr/cmake/modules/zephyr_default.cmake:138 (include)
/home/cmabon/ncs/v2.5.0/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:66 (include)
/home/cmabon/ncs/v2.5.0/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:92 (include_boilerplate)
CMakeLists.txt:5 (find_package)
Dropping partition 'nrf_modem_lib_trace' since its size is 0.
Dropping partition 'nonsecure_storage' since it is empty.
CMake Error at /home/cmabon/ncs/v2.5.0/nrf/cmake/partition_manager.cmake:630 (math):
math cannot parse the expression: " + - ": syntax error, unexpected end of
file (18).
Call Stack (most recent call first):
/home/cmabon/ncs/v2.5.0/zephyr/cmake/modules/kernel.cmake:247 (include)
/home/cmabon/ncs/v2.5.0/zephyr/cmake/modules/zephyr_default.cmake:138 (include)
/home/cmabon/ncs/v2.5.0/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:66 (include)
/home/cmabon/ncs/v2.5.0/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:92 (include_boilerplate)
CMakeLists.txt:5 (find_package)
Traceback (most recent call last):
File "/home/cmabon/ncs/v2.5.0/nrf/scripts/partition_manager_output.py", line 251, in <module>
main()
File "/home/cmabon/ncs/v2.5.0/nrf/scripts/partition_manager_output.py", line 247, in main
write_gpm_config(gpm_config, greg_config, name, header_file)
File "/home/cmabon/ncs/v2.5.0/nrf/scripts/partition_manager_output.py", line 142, in write_gpm_config
if any('span' in x for x in gpm_config[domain][image]):
KeyError: 'mcuboot'
CMake Error at /home/cmabon/ncs/v2.5.0/nrf/cmake/partition_manager.cmake:665 (message):
Partition Manager GLOBAL output generation failed,
aborting. Command: /home/cmabon/ncs/toolchains/7795df4459/usr/local/bin/python3.8;/home/cmabon/ncs/v2.5.0/nrf/scripts/partition_manager_output.py;--input-partitions;/home/cmabon/Documents/Projects/SG-Firmware/build_primary/partitions.yml;--input-regions;/home/cmabon/Documents/Projects/SG-Firmware/build_primary/regions.yml;--header-files;/home/cmabon/Documents/Projects/SG-Firmware/build_primary/mcuboot/zephyr/include/generated/pm_config.h;/home/cmabon/Documents/Projects/SG-Firmware/build_primary/zephyr/include/generated/pm_config.h;--images;:mcuboot;:app
Call Stack (most recent call first):
/home/cmabon/ncs/v2.5.0/zephyr/cmake/modules/kernel.cmake:247 (include)
/home/cmabon/ncs/v2.5.0/zephyr/cmake/modules/zephyr_default.cmake:138 (include)
/home/cmabon/ncs/v2.5.0/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:66 (include)
/home/cmabon/ncs/v2.5.0/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:92 (include_boilerplate)
CMakeLists.txt:5 (find_package)
-- Configuring incomplete, errors occurred!
See also "/home/cmabon/Documents/Projects/SG-Firmware/build_primary/CMakeFiles/CMakeOutput.log".
See also "/home/cmabon/Documents/Projects/SG-Firmware/build_primary/CMakeFiles/CMakeError.log".
FATAL ERROR: command exited with status 1: /home/cmabon/ncs/toolchains/7795df4459/usr/local/bin/cmake -DWEST_PYTHON=/home/cmabon/ncs/toolchains/7795df4459/usr/local/bin/python3.8 -B/home/cmabon/Documents/Projects/SG-Firmware/build_primary -GNinja -DBOARD=crm_nrf9160_primary_ns -DNCS_TOOLCHAIN_VERSION=NONE '-DBOARD_ROOT=/home/cmabon/ncs/v2.4.1/zephyr;/home/cmabon/Documents/Projects/SG-Firmware' -Db0_OVERLAY_CONFIG=/home/cmabon/ncs/v2.5.0/nrf/subsys/partition_manager/partition_manager_enabled.conf '-Dmcuboot_OVERLAY_CONFIG=/home/cmabon/Documents/Projects/SG-Firmware/child_image/mcuboot.conf;/home/cmabon/ncs/v2.5.0/nrf/subsys/partition_manager/partition_manager_enabled.conf' -DCACHED_CONF_FILE=/home/cmabon/Documents/Projects/SG-Firmware/prj.conf -DDTC_OVERLAY_FILE=/home/cmabon/Documents/Projects/SG-Firmware/boards/crm_nrf9160_primary_ns.overlay -S/home/cmabon/Documents/Projects/SG-Firmware
My project configuration looks like this:
#MCUBootloader Stuff CONFIG_BOOTLOADER_MCUBOOT=y CONFIG_PARTITION_MANAGER_ENABLED=y #C library stuff CONFIG_NEWLIB_LIBC_NANO=n CONFIG_NEWLIB_LIBC=y CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y CONFIG_CBPRINTF_FP_SUPPORT=y CONFIG_CJSON_LIB=y #General Stuff CONFIG_COMMON_LIBC_MALLOC=y CONFIG_MAIN_STACK_SIZE=4096 CONFIG_HEAP_MEM_POOL_SIZE=32768 CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=1024 #Other Stuff so far CONFIG_PM_DEVICE=y CONFIG_POSIX_API=y #Shell Stuff CONFIG_SHELL=y CONFIG_FILE_SYSTEM_SHELL=y CONFIG_SHELL_BACKEND_SERIAL=y #I2C Stuff CONFIG_I2C=y CONFIG_RTC=y CONFIG_RTC_ALARM=y CONFIG_RTC_PCF8523=y #SPI Stuff CONFIG_SPI=y CONFIG_SPI_NOR=y CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y #Flash Stuff CONFIG_FLASH=y CONFIG_FLASH_PAGE_LAYOUT=y CONFIG_FLASH_MAP=y CONFIG_STREAM_FLASH=y CONFIG_MPU_ALLOW_FLASH_WRITE=y #LittleFS #CONFIG_FILE_SYSTEM=y #CONFIG_FILE_SYSTEM_LITTLEFS=y #Settings #ONFIG_SETTINGS=y #CONFIG_SETTINGS_SHELL=y #CONFIG_SETTINGS_FILE=y #CONFIG_SETTINGS_FILE_PATH="/lfs/settings" #CONFIG_SETTINGS_LOG_LEVEL_INF=y #Logging CONFIG_LOG=y CONFIG_LOG_BACKEND_UART=n CONFIG_NRF_MODEM_LOG=y #Networking CONFIG_NETWORKING=y CONFIG_NET_SOCKETS=y CONFIG_DNS_RESOLVER=y CONFIG_NET_SHELL=n CONFIG_NET_IPV4=y CONFIG_NET_IPV6=y CONFIG_NRF_MODEM_LIB=y CONFIG_NET_CONNECTION_MANAGER=y CONFIG_NET_CONNECTION_MANAGER_MONITOR_STACK_SIZE=1024 CONFIG_LTE_LINK_CONTROL=y CONFIG_MODEM_INFO=y CONFIG_SNTP=y CONFIG_NET_IPV6_NBR_CACHE=n CONFIG_NET_IPV6_MLD=n CONFIG_REST_CLIENT=y #Azure IOT HUB CONFIG_AZURE_IOT_HUB=y CONFIG_AZURE_IOT_HUB_DEVICE_ID="sg01" CONFIG_AZURE_IOT_HUB_HOSTNAME="NRC-DataIngest-Hub.azure-devices.net" CONFIG_AZURE_IOT_HUB_LOG_LEVEL_DBG=y CONFIG_AZURE_IOT_HUB_AUTO_DEVICE_TWIN_REQUEST=n CONFIG_MQTT_KEEPALIVE=1767 CONFIG_MQTT_HELPER_SEC_TAG=10 CONFIG_MQTT_HELPER_STACK_SIZE=8192 #These should be adjusted they are taken from somewhere else! # PSM & eDRX enable CONFIG_LTE_EDRX_REQ=y CONFIG_LTE_PSM_REQ=y CONFIG_LTE_PSM_REQ_RPTAU="00000001" # 10 Minutes checkin interval #CONFIG_LTE_PSM_REQ_RPTAU="00000110" # 60 Minutes checkin interval CONFIG_LTE_PSM_REQ_RAT="00000011" # 6 sec active time #CONFIG_LTE_PSM_REQ_RAT="00000101" # 10 sec active time CONFIG_LTE_LC_TAU_PRE_WARNING_NOTIFICATIONS=y CONFIG_LTE_LC_TAU_PRE_WARNING_THRESHOLD_MS=60000 CONFIG_LTE_LC_MODEM_SLEEP_NOTIFICATIONS=y CONFIG_LTE_LC_MODEM_SLEEP_NOTIFICATIONS_THRESHOLD_MS=60000 # Increased sysworkq size, due to LTE connectivity CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048 #Debug CONFIG_DEBUG=y CONFIG_DEBUG_INFO=y CONFIG_DEBUG_COREDUMP=y CONFIG_AT_SHELL=y
and my MCUBoot configuration is this:
CONFIG_MULTITHREADING=y CONFIG_SERIAL=n
I am unsure as to how to proceed with debugging my project further and any help would be very very appreciated!
Thank you,


