Build error: undefined reference to `__device_dts_ord_144'

sdk: 2.4.2

Controller: nrf5340

Hello,

I want to add the simultaneous update feature to our application.

This means that we want to transfer the app-core-image and the net core-image simultaneous

via BLE into the external flash memory of our product.

I found the follwing example:

samples_for_nrf_connect_sdk/bootloader_samples/nrf5340/mcuboot_smp_ble_simultaneous at main · hellesvik-nordic/samples_for_nrf_connect_sdk · GitHub

This example is quite good. I only want  to change to the flash memory. In this example the QSPI flash memory mx25r64 is used.

I want use the simple SPI (no QSPI) flash memory mx25l16 which ist connected to SPI2.

So I modified the following files:

  • app. overlay 
  • mcuboot.overlay
  • mcuboot.conf

app. overlay

/ {
	chosen {
		nordic,pm-ext-flash = &mx25l16;
	};
};

&qspi {
	status = "disabled";
};

&spi2 {
	compatible = "nordic,nrf-spim";
	status = "okay";
	cs-gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
	pinctrl-0 = <&spi2_default>;
	pinctrl-1 = <&spi2_sleep>;
	pinctrl-names = "default", "sleep";

	mx25l16: mx25l16test@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <8000000>;
		label = "MX25L16TEST";
		jedec-id = [c2 20 15];
		sfdp-bfp = [
			e5 20 81 ff  ff ff 3f 00  00 ff 00 ff  08 3b 00 ff
			ee ff ff ff  ff ff 00 ff  ff ff 00 ff  0c 20 10 d8
			00 ff 00 ff
		];
		size = <16777216>;
		has-dpd;
		t-enter-dpd = <10000>;
		t-exit-dpd = <8800>;
	};
};


&pinctrl {
	spi2_default: spi2_default {
		group1 {
			psels = <NRF_PSEL(SPIM_SCK, 1, 12)>,
				<NRF_PSEL(SPIM_MISO, 1, 14)>,
				<NRF_PSEL(SPIM_MOSI, 1, 13)>;
		};
	};

	spi2_sleep: spi2_sleep {
		group1 {
			psels = <NRF_PSEL(SPIM_SCK, 1, 12)>,
				<NRF_PSEL(SPIM_MISO, 1, 14)>,
				<NRF_PSEL(SPIM_MOSI, 1, 13)>;
			low-power-enable;
		};
	};
};
&spi4_default {
	group1 {
		psels = <NRF_PSEL(SPIM_SCK, 1, 8)>,
		  <NRF_PSEL(SPIM_MISO, 1, 10)>,
		  <NRF_PSEL(SPIM_MOSI, 1, 9)>;
	};
};

&spi4_sleep {
	group1 {
		psels = <NRF_PSEL(SPIM_SCK, 1, 8)>,
		  <NRF_PSEL(SPIM_MISO, 1, 10)>,
		  <NRF_PSEL(SPIM_MOSI, 1, 9)>;
	};
};

&spi4 {
	cs-gpios = <&gpio1 11 0>;
};

mcuboot.overlay

/ {
	chosen {
		nordic,pm-ext-flash = &mx25l16;
	};
};

&qspi {
	status = "disabled";
};

&spi2 {
	compatible = "nordic,nrf-spim";
	status = "okay";
	cs-gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
	pinctrl-0 = <&spi2_default>;
	pinctrl-1 = <&spi2_sleep>;
	pinctrl-names = "default", "sleep";

	mx25l16: mx25l16test@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <8000000>;
		label = "MX25L16TEST";
		jedec-id = [c2 20 15];
		sfdp-bfp = [
			e5 20 81 ff  ff ff 3f 00  00 ff 00 ff  08 3b 00 ff
			ee ff ff ff  ff ff 00 ff  ff ff 00 ff  0c 20 10 d8
			00 ff 00 ff
		];
		size = <16777216>;
		has-dpd;
		t-enter-dpd = <10000>;
		t-exit-dpd = <8800>;
	};
};

&spi4 {
	compatible = "nordic,nrf-spim";
	status = "okay";
	cs-gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;
	pinctrl-0 = <&spi4_default>;
	pinctrl-1 = <&spi4_sleep>;
	pinctrl-names = "default", "sleep";
};

&pinctrl {
	spi2_default: spi2_default {
		group1 {
			psels = <NRF_PSEL(SPIM_SCK, 1, 12)>,
				<NRF_PSEL(SPIM_MISO, 1, 14)>,
				<NRF_PSEL(SPIM_MOSI, 1, 13)>;
		};
	};

	spi2_sleep: spi2_sleep {
		group1 {
			psels = <NRF_PSEL(SPIM_SCK, 1, 12)>,
				<NRF_PSEL(SPIM_MISO, 1, 14)>,
				<NRF_PSEL(SPIM_MOSI, 1, 13)>;
			low-power-enable;
		};
	};
};

mcuboot.conf:

# Enable flash simulator
CONFIG_FLASH=y
CONFIG_FPROTECT=y
CONFIG_PCD_APP=y
CONFIG_FLASH_SIMULATOR=y
CONFIG_FLASH_SIMULATOR_DOUBLE_WRITES=y
CONFIG_FLASH_SIMULATOR_STATS=n


# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# GS CONFIG_NORDIC_QSPI_NOR=y
# GS CONFIG_NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
# GS CONFIG_NORDIC_QSPI_NOR_STACK_WRITE_BUFFER_SIZE=16

CONFIG_NORDIC_QSPI_NOR=n 
CONFIG_SPI=y 
CONFIG_SPI_NOR=y 
CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

CONFIG_MAIN_STACK_SIZE=10240
CONFIG_BOOT_MAX_IMG_SECTORS=256


CONFIG_NRF53_MULTI_IMAGE_UPDATE=y
CONFIG_UPDATEABLE_IMAGE_NUMBER=2

CONFIG_BOOT_UPGRADE_ONLY=y
CONFIG_BOOT_IMAGE_ACCESS_HOOK_NRF5340=y
CONFIG_BOOT_IMAGE_ACCESS_HOOKS=y

CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=4

CONFIG_FLASH=y
CONFIG_FPROTECT=y
CONFIG_PM=n

CONFIG_BOOT_ENCRYPT_EC256=n
CONFIG_BOOT_ENCRYPT_RSA=n
CONFIG_BOOT_ENCRYPT_X25519=n
CONFIG_BOOT_SWAP_SAVE_ENCTLV=n

CONFIG_BOOT_BOOTSTRAP=n

CONFIG_ASSERT=n
CONFIG_BOOT_BANNER=n
CONFIG_CONSOLE=y
CONFIG_CONSOLE_HANDLER=n
CONFIG_GPIO=n
CONFIG_I2C=n
CONFIG_SPI=n
CONFIG_KERNEL_MEM_POOL=n
CONFIG_MINIMAL_LIBC_CALLOC=n
CONFIG_MINIMAL_LIBC_MALLOC=n
CONFIG_MINIMAL_LIBC_REALLOCARRAY=n
CONFIG_NCS_SAMPLES_DEFAULTS=y
CONFIG_NO_RUNTIME_CHECKS=y
CONFIG_NRF_RTC_TIMER=y
CONFIG_PRINTK=y
CONFIG_REBOOT=y
CONFIG_RESET_ON_FATAL_ERROR=y
CONFIG_SECURE_BOOT_DEBUG=n
CONFIG_SERIAL=y
CONFIG_SIZE_OPTIMIZATIONS=y
CONFIG_UART_CONSOLE=y

After building the modified example I got the following errors:

* Executing task: nRF Connect: Build: mcuboot_smp_ble_simultaneous/build (active)

Building mcuboot_smp_ble_simultaneous
C:\WINDOWS\system32\cmd.exe /d /s /c "west build --build-dir c:/Projekte/mcuboot_smp_ble_simultaneous/build c:/Projekte/mcuboot_smp_ble_simultaneous"

[0/13] Performing build step for 'mcuboot_subimage'
[1/11] Linking C executable zephyr\zephyr_pre0.elf
FAILED: zephyr/zephyr_pre0.elf zephyr/zephyr_pre0.map
cmd.exe /C "cd . && C:\DevTools\ncs\toolchains\31f4403e35\opt\zephyr-sdk\arm-zephyr-eabi\bin\arm-zephyr-eabi-gcc.exe -gdwarf-4 zephyr/CMakeFiles/zephyr_pre0.dir/misc/empty_file.c.obj -o zephyr\zephyr_pre0.elf -fuse-ld=bfd -T zephyr/linker_zephyr_pre0.cmd -Wl,-Map=C:/Projekte/mcuboot_smp_ble_simultaneous/build/mcuboot/zephyr/zephyr_pre0.map -Wl,--whole-archive app/libapp.a zephyr/libzephyr.a zephyr/arch/common/libarch__common.a zephyr/arch/arch/arm/core/aarch32/libarch__arm__core__aarch32.a zephyr/arch/arch/arm/core/aarch32/cortex_m/libarch__arm__core__aarch32__cortex_m.a zephyr/arch/arch/arm/core/aarch32/cortex_m/cmse/libarch__arm__core__aarch32__cortex_m__cmse.a zephyr/arch/arch/arm/core/aarch32/mpu/libarch__arm__core__aarch32__mpu.a zephyr/lib/libc/minimal/liblib__libc__minimal.a zephyr/soc/arm/common/cortex_m/libsoc__arm__common__cortex_m.a zephyr/drivers/clock_control/libdrivers__clock_control.a zephyr/drivers/console/libdrivers__console.a zephyr/drivers/flash/libdrivers__flash.a zephyr/drivers/pinctrl/libdrivers__pinctrl.a zephyr/drivers/serial/libdrivers__serial.a zephyr/drivers/timer/libdrivers__timer.a modules/nrf/lib/fprotect/lib..__nrf__lib__fprotect.a modules/nrf/lib/fatal_error/lib..__nrf__lib__fatal_error.a modules/nrf/subsys/pcd/lib..__nrf__subsys__pcd.a modules/nrf/modules/mcuboot/hooks/lib..__nrf__modules__mcuboot__hooks.a modules/nrf/drivers/hw_cc310/lib..__nrf__drivers__hw_cc310.a modules/mcuboot/boot/bootutil/zephyr/libmcuboot_util.a modules/mbedtls/libmodules__mbedtls.a modules/hal_nordic/nrfx/libmodules__hal_nordic__nrfx.a -Wl,--no-whole-archive zephyr/kernel/libkernel.a zephyr/CMakeFiles/offsets.dir/./arch/arm/core/offsets/offsets.c.obj -L"c:/devtools/ncs/toolchains/31f4403e35/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/thumb/v8-m.main/nofp" -LC:/Projekte/mcuboot_smp_ble_simultaneous/build/mcuboot/zephyr -lgcc zephyr/arch/common/libisr_tables.a -mcpu=cortex-m33 -mthumb -mabi=aapcs -Wl,--gc-sections -Wl,--build-id=none -Wl,--sort-common=descending -Wl,--sort-section=alignment -Wl,-u,_OffsetAbsSyms -Wl,-u,_ConfigAbsSyms -nostdlib -static -Wl,-X -Wl,-N -Wl,--orphan-handling=warn -Wl,-no-pie C:/DevTools/ncs/v2.4.2/nrfxlib/crypto/nrf_cc312_platform/lib/cortex-m33/soft-float/no-interrupts/libnrf_cc312_platform_0.9.17.a && cmd.exe /C "cd /D C:\Projekte\mcuboot_smp_ble_simultaneous\build\mcuboot\zephyr && C:\DevTools\ncs\toolchains\31f4403e35\opt\bin\cmake.exe -E echo ""
c:/devtools/ncs/toolchains/31f4403e35/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd.exe: zephyr/drivers/flash/libdrivers__flash.a(spi_nor.c.obj):(.rodata.spi_nor_config_0+0x0): undefined reference to `__device_dts_ord_144'
c:/devtools/ncs/toolchains/31f4403e35/opt/zephyr-sdk/arm-zephyr-eabi/bin/../lib/gcc/arm-zephyr-eabi/12.2.0/../../../../arm-zephyr-eabi/bin/ld.bfd.exe: zephyr/drivers/flash/libdrivers__flash.a(spi_nor.c.obj):(.data.__compound_literal.0+0x0): undefined reference to `__device_dts_ord_30'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
FAILED: modules/mcuboot/mcuboot_subimage-prefix/src/mcuboot_subimage-stamp/mcuboot_subimage-build mcuboot/zephyr/zephyr.hex mcuboot/zephyr/zephyr.elf
cmd.exe /C "cd /D C:\Projekte\mcuboot_smp_ble_simultaneous\build\mcuboot && C:\DevTools\ncs\toolchains\31f4403e35\opt\bin\cmake.exe --build . --"
ninja: build stopped: subcommand failed.
FATAL ERROR: command exited with status 1: 'C:\DevTools\ncs\toolchains\31f4403e35\opt\bin\cmake.EXE' --build 'c:\Projekte\mcuboot_smp_ble_simultaneous\build'

* The terminal process terminated with exit code: 1.
* Terminal will be reused by tasks, press any key to close it.

I spent a lot of time to find the problem but without success.

How can I solve the problem ?

Best regards,

Georg 

Related