This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

How to adjust linker section placement for DFU secure bootloader hex size to prevent overlap with setting.hex

Hi,

I notice my dfu bootloader oversized after I merge softblink led feature into the example code. How can I modify the linker_section_placement_macros and the linker_section_placements_segments without breaking the requirement for Memory layout - Memory range nRF52840 

HW: PCA10056

SW: nRF5_SDK_15.2.0_9412b96

example code: \dfu\secure_bootloader\pca10056_ble + softblink led feature

Bootloader project file:

<!DOCTYPE CrossStudio_Project_File>
<solution Name="secure_bootloader_ble_s140_pca10056" target="8" version="2">
  <project Name="secure_bootloader_ble_s140_pca10056">
    <configuration
      Name="Common"
      arm_architecture="v7EM"
      arm_core_type="Cortex-M4"
      arm_endian="Little"
      arm_fp_abi="Hard"
      arm_fpu_type="FPv4-SP-D16"
      arm_linker_heap_size="0"
      arm_linker_process_stack_size="0"
      arm_linker_stack_size="2048"
      arm_linker_treat_warnings_as_errors="No"
      arm_simulator_memory_simulation_parameter="RWX 00000000,00100000,FFFFFFFF;RWX 20000000,00010000,CDCDCDCD"
      arm_target_device_name="nRF52840_xxAA"
      arm_target_interface_type="SWD"
      c_preprocessor_definitions="APP_TIMER_V2;APP_TIMER_V2_RTC1_ENABLED;BLE_STACK_SUPPORT_REQD;BOARD_PCA10056;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_DFU_SETTINGS_VERSION=1;NRF_DFU_SVCI_ENABLED;NRF_SD_BLE_API_VERSION=6;S140;SOFTDEVICE_PRESENT;SVC_INTERFACE_CALL_AS_NORMAL_FUNCTION;"
      c_user_include_directories="../../config;../../../../../components/ble/common;../../../../../components/boards;../../../../../components/libraries/atomic;../../../../../components/libraries/atomic_fifo;../../../../../components/libraries/balloc;../../../../../components/libraries/bootloader;../../../../../components/libraries/bootloader/ble_dfu;../../../../../components/libraries/bootloader/dfu;../../../../../components/libraries/crc32;../../../../../components/libraries/crypto;../../../../../components/libraries/crypto/backend/cc310;../../../../../components/libraries/crypto/backend/cc310_bl;../../../../../components/libraries/crypto/backend/cifra;../../../../../components/libraries/crypto/backend/mbedtls;../../../../../components/libraries/crypto/backend/micro_ecc;../../../../../components/libraries/crypto/backend/nrf_hw;../../../../../components/libraries/crypto/backend/nrf_sw;../../../../../components/libraries/crypto/backend/oberon;../../../../../components/libraries/delay;../../../../../components/libraries/experimental_section_vars;../../../../../components/libraries/fstorage;../../../../../components/libraries/led_softblink;../../../../../components/libraries/log;../../../../../components/libraries/log/src;../../../../../components/libraries/low_power_pwm;../../../../../components/libraries/mem_manager;../../../../../components/libraries/memobj;../../../../../components/libraries/mutex;../../../../../components/libraries/queue;../../../../../components/libraries/ringbuf;../../../../../components/libraries/scheduler;../../../../../components/libraries/stack_info;../../../../../components/libraries/strerror;../../../../../components/libraries/svc;../../../../../components/libraries/timer;../../../../../components/libraries/sortlist;../../../../../components/libraries/util;../../../../../components/softdevice/common;../../../../../components/softdevice/s140/headers;../../../../../components/softdevice/s140/headers/nrf52;../../../../../components/toolchain/cmsis/include;../..;../../../../../external/fprintf;../../../../../external/nano-pb;../../../../../external/nrf_cc310/include;../../../../../external/nrf_cc310_bl/include;../../../../../external/nrf_oberon;../../../../../external/nrf_oberon/include;../../../../../integration/nrfx;../../../../../modules/nrfx;../../../../../modules/nrfx/hal;../../../../../modules/nrfx/mdk;../../../../../components/libraries/timer/experimental;../config;"
      debug_additional_load_file="../../../../../components/softdevice/s140/hex/s140_nrf52_6.1.0_softdevice.hex"
      debug_register_definition_file="../../../../../modules/nrfx/mdk/nrf52840.svd"
      debug_start_from_entry_point_symbol="No"
      debug_target_connection="J-Link"
      gcc_debugging_level="Level 3"
      gcc_entry_point="Reset_Handler"
      linker_output_format="hex"
      linker_printf_fmt_level="long"
      linker_printf_width_precision_supported="Yes"
      linker_section_placement_file="flash_placement.xml"
      linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0xf8000;FLASH_SIZE=0x6000;RAM_START=0x200057b8;RAM_SIZE=0x3a848"
      linker_section_placements_segments="FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000;mbr_params_page RX 0x000FE000 0x1000;bootloader_settings_page RX 0x000FF000 0x1000;uicr_mbr_params_page RX 0x10001018 0x4;uicr_bootloader_start_address RX 0x10001014 0x4"
      macros="CMSIS_CONFIG_TOOL=../../../../../external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar"
      project_directory=""
      project_type="Executable" />
    <folder Name="Segger Startup Files">
      <file file_name="$(StudioDir)/source/thumb_crt0.s" />
    </folder>
    <folder Name="nRF_Log">
      <file file_name="../../../../../components/libraries/log/src/nrf_log_frontend.c" />
      <file file_name="../../../../../components/libraries/log/src/nrf_log_str_formatter.c" />
    </folder>
    <folder Name="nRF_Libraries">
      <file file_name="../../../../../components/libraries/util/app_error_weak.c" />
      <file file_name="../../../../../components/libraries/scheduler/app_scheduler.c" />
      <file file_name="../../../../../components/libraries/timer/experimental/app_timer2.c" />
      <file file_name="../../../../../components/libraries/util/app_util_platform.c" />
      <file file_name="../../../../../components/libraries/crc32/crc32.c" />
      <file file_name="../../../../../components/libraries/timer/experimental/drv_rtc.c" />
      <file file_name="../../../../../components/libraries/led_softblink/led_softblink.c" />
      <file file_name="../../../../../components/libraries/low_power_pwm/low_power_pwm.c" />
      <file file_name="../../../../../components/libraries/mem_manager/mem_manager.c" />
      <file file_name="../../../../../components/libraries/util/nrf_assert.c" />
      <file file_name="../../../../../components/libraries/atomic_fifo/nrf_atfifo.c" />
      <file file_name="../../../../../components/libraries/atomic/nrf_atomic.c" />
      <file file_name="../../../../../components/libraries/balloc/nrf_balloc.c" />
      <file file_name="../../../../../external/fprintf/nrf_fprintf.c" />
      <file file_name="../../../../../external/fprintf/nrf_fprintf_format.c" />
      <file file_name="../../../../../components/libraries/fstorage/nrf_fstorage.c" />
      <file file_name="../../../../../components/libraries/fstorage/nrf_fstorage_nvmc.c" />
      <file file_name="../../../../../components/libraries/fstorage/nrf_fstorage_sd.c" />
      <file file_name="../../../../../components/libraries/memobj/nrf_memobj.c" />
      <file file_name="../../../../../components/libraries/queue/nrf_queue.c" />
      <file file_name="../../../../../components/libraries/ringbuf/nrf_ringbuf.c" />
      <file file_name="../../../../../components/libraries/sortlist/nrf_sortlist.c" />
      <file file_name="../../../../../components/libraries/experimental_section_vars/nrf_section_iter.c" />
      <file file_name="../../../../../components/libraries/strerror/nrf_strerror.c" />
    </folder>
    <folder Name="nano-pb">
      <file file_name="../../../../../external/nano-pb/pb_common.c" />
      <file file_name="../../../../../external/nano-pb/pb_decode.c" />
    </folder>
    <folder Name="nRF_Crypto backend CC310_BL">
      <file file_name="../../../../../components/libraries/crypto/backend/cc310_bl/cc310_bl_backend_ecc.c" />
      <file file_name="../../../../../components/libraries/crypto/backend/cc310_bl/cc310_bl_backend_ecdsa.c" />
      <file file_name="../../../../../components/libraries/crypto/backend/cc310_bl/cc310_bl_backend_hash.c" />
      <file file_name="../../../../../components/libraries/crypto/backend/cc310_bl/cc310_bl_backend_init.c" />
      <file file_name="../../../../../components/libraries/crypto/backend/cc310_bl/cc310_bl_backend_shared.c" />
    </folder>
    <folder Name="nRF_Oberon_Crypto">
      <file file_name="../../../../../external/nrf_oberon/lib/nrf52/liboberon_2.0.5.a" />
    </folder>
    <folder Name="nRF_SoftDevice">
      <file file_name="../../../../../components/softdevice/common/nrf_sdh.c" />
      <file file_name="../../../../../components/softdevice/common/nrf_sdh_ble.c" />
      <file file_name="../../../../../components/softdevice/common/nrf_sdh_soc.c" />
    </folder>
    <folder Name="nRF_Drivers">
      <file file_name="../../../../../modules/nrfx/hal/nrf_nvmc.c" />
    </folder>
    <folder Name="nRF_Crypto">
      <file file_name="../../../../../components/libraries/crypto/nrf_crypto_ecc.c" />
      <file file_name="../../../../../components/libraries/crypto/nrf_crypto_ecdsa.c" />
      <file file_name="../../../../../components/libraries/crypto/nrf_crypto_hash.c" />
      <file file_name="../../../../../components/libraries/crypto/nrf_crypto_init.c" />
      <file file_name="../../../../../components/libraries/crypto/nrf_crypto_shared.c" />
    </folder>
    <folder Name="Application">
      <file file_name="../../../dfu_public_key.c" />
      <file file_name="../../main.c" />
      <file file_name="../config/sdk_config.h" />
    </folder>
    <folder Name="nRF_SVC">
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu_svci_handler.c" />
      <file file_name="../../../../../components/libraries/svc/nrf_svc_handler.c" />
    </folder>
    <folder Name="nRF_BLE">
      <file file_name="../../../../../components/ble/common/ble_srv_common.c" />
    </folder>
    <folder Name="nRF_Bootloader">
      <file file_name="../../../../../components/libraries/bootloader/nrf_bootloader.c" />
      <file file_name="../../../../../components/libraries/bootloader/nrf_bootloader_app_start.c" />
      <file file_name="../../../../../components/libraries/bootloader/nrf_bootloader_app_start_final.c" />
      <file file_name="../../../../../components/libraries/bootloader/nrf_bootloader_dfu_timers.c" />
      <file file_name="../../../../../components/libraries/bootloader/nrf_bootloader_fw_activation.c" />
      <file file_name="../../../../../components/libraries/bootloader/nrf_bootloader_info.c" />
      <file file_name="../../../../../components/libraries/bootloader/nrf_bootloader_wdt.c" />
    </folder>
    <folder Name="None">
      <file file_name="../../../../../modules/nrfx/mdk/ses_startup_nrf52840.s" />
      <file file_name="../../../../../modules/nrfx/mdk/ses_startup_nrf_common.s" />
      <file file_name="../../../../../modules/nrfx/mdk/system_nrf52840.c" />
    </folder>
    <folder Name="nRF_DFU">
      <file file_name="../../../../../components/libraries/bootloader/dfu/dfu-cc.pb.c" />
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu.c" />
      <file file_name="../../../../../components/libraries/bootloader/ble_dfu/nrf_dfu_ble.c" />
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu_flash.c" />
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu_handling_error.c" />
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu_mbr.c" />
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu_req_handler.c" />
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu_settings.c" />
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu_settings_svci.c" />
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu_transport.c" />
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu_utils.c" />
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu_validation.c" />
      <file file_name="../../../../../components/libraries/bootloader/dfu/nrf_dfu_ver_validation.c" />
    </folder>
    <folder Name="nrf_cc310_bl">
      <file file_name="../../../../../external/nrf_cc310_bl/lib/libnrf_cc310_bl_0.9.10.a" />
    </folder>
    <folder Name="nRF_Crypto backend Oberon">
      <file file_name="../../../../../components/libraries/crypto/backend/oberon/oberon_backend_chacha_poly_aead.c" />
      <file file_name="../../../../../components/libraries/crypto/backend/oberon/oberon_backend_ecc.c" />
      <file file_name="../../../../../components/libraries/crypto/backend/oberon/oberon_backend_ecdh.c" />
      <file file_name="../../../../../components/libraries/crypto/backend/oberon/oberon_backend_ecdsa.c" />
      <file file_name="../../../../../components/libraries/crypto/backend/oberon/oberon_backend_eddsa.c" />
      <file file_name="../../../../../components/libraries/crypto/backend/oberon/oberon_backend_hash.c" />
      <file file_name="../../../../../components/libraries/crypto/backend/oberon/oberon_backend_hmac.c" />
    </folder>
  </project>
  <configuration
    Name="Release"
    c_preprocessor_definitions="NDEBUG"
    gcc_debugging_level="None"
    gcc_optimization_level="Optimize For Size" />
</solution>

Error code from mergehex:

C:S\project\nrfutil_tool>nrfutil settings generate --family NRF52840 --application blinky_rtc_FreeRTOS_pca10056.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 settings.hex

Note: Generating a DFU settings page with backup page included.
This is only required for bootloaders from nRF5 SDK 15.1 and newer.
If you want to skip backup page generation, use --no-backup option.

Generated Bootloader DFU settings .hex file and stored it in: settings.hex

Bootloader DFU Settings:
* File:                     settings.hex
* Family:                   NRF52840
* Start Address:            0x000FF000
* CRC:                      0x745E67EE
* Settings Version:         0x00000001 (1)
* App Version:              0x00000001 (1)
* Bootloader Version:       0x00000001 (1)
* Bank Layout:              0x00000000
* Current Bank:             0x00000000
* Application Size:         0x000135E8 (79336 bytes)
* Application CRC:          0x412BC0D9
* Bank0 Bank Code:          0x00000001
* Softdevice Size:          0x00000000 (0 bytes)
* Boot Validation CRC:      0x00000000
* SD Boot Validation Type:  0x00000000 (0)
* App Boot Validation Type: 0x00000000 (0)


C:\project\nrfutil_tool>mergehex.exe --merge settings.hex secure_bootloader_ble_s140_pca10056.hex --output my_bootloader.hex
Parsing input hex files.
Merging files.
ERROR: The hex files cannot be merged since there are conflicts.

Here is the setting.hex and bootloader.hex

secure_bootloader_ble_s140_pca10056.hexsettings.hex

Related