Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs
This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Linker issues in the connectivity firmware

Hi,

I am trying to build the connectivity firmware for a custom dongle based on the nrf52832. I am getting a section overlap issue when I am trying to build the solution from SES.

Steps followed til now:

-> Downloaded the latest version of pc-ble-driver from the github page.

-> Ran the bootstrap_sd_api_v5 script.

-> Opened the ble_connectivity_s132v5_hci_pca10040 located at pc-ble-driver-master\sdk\nRF5_SDK_15.0.0_a53641a\examples\connectivity\ble_connectivity\pca10040\ser_s132v5_hci\ses\

-> Tried to build the solution but got the following error

1> Linking ble_connectivity_s132v5_hci_pca10040.elf
1> "C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 3.40/gcc/arm-none-eabi/bin/ld" -X --omagic -eReset_Handler --defsym=__vfprintf=__vfprintf_long --defsym=__vfscanf=__vfscanf_int -EL --gc-sections "-TG:/pc-ble-driver-master/pc-ble-driver-master/sdk/nRF5_SDK_15.0.0_a53641a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/Output/ble_connectivity_s132v5_hci_pca10040 Release/Obj/ble_connectivity_s132v5_hci_pca10040.ld" -Map Output/Release/Exe/ble_connectivity_s132v5_hci_pca10040.map -u_vectors -o Output/Release/Exe/ble_connectivity_s132v5_hci_pca10040.elf --emit-relocs "@G:/pc-ble-driver-master/pc-ble-driver-master/sdk/nRF5_SDK_15.0.0_a53641a/examples/connectivity/ble_connectivity/pca10040/ser_s132v5_hci/ses/Output/ble_connectivity_s132v5_hci_pca10040 Release/Obj/ble_connectivity_s132v5_hci_pca10040.ind"
1> C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 3.40/gcc/arm-none-eabi/bin/ld: section .connectivity_version_info LMA [0000000000030000,0000000000030017] overlaps section .rodata LMA [000000000002fd34,00000000000301b7]
Build failed

Chip : nRF52832 QFAA

IDE: Segger Embedded Studio

Thank you

  • I tried to build it using the flash_placement.xml you have provided but I got the following error

    1> "C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 3.34/gcc/arm-none-eabi/bin/ld" -X -eReset_Handler --omagic -defsym=__vfprintf=__vfprintf_long -defsym=__vfscanf=__vfscanf_int -EL --gc-sections "-TG:/pc-ble-driver-master-3.34/sdk/nRF5_SDK_15.0.0_a53641a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/Output/ble_connectivity_s132_hci_pca10040 Release/Obj/ble_connectivity_s132_hci_pca10040.ld" -Map Output/Release/Exe/ble_connectivity_s132_hci_pca10040.map -u_vectors -o Output/Release/Exe/ble_connectivity_s132_hci_pca10040.elf --emit-relocs "@G:/pc-ble-driver-master-3.34/sdk/nRF5_SDK_15.0.0_a53641a/examples/connectivity/ble_connectivity/pca10040/ser_s132_hci/ses/Output/ble_connectivity_s132_hci_pca10040 Release/Obj/ble_connectivity_s132_hci_pca10040.ind"
    1> C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 3.34/gcc/arm-none-eabi/bin/ld: error: section .sdh_state_observers overlaps absolute placed section .connectivity_version_info
    1> C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 3.34/gcc/arm-none-eabi/bin/ld: section .connectivity_version_info LMA [0000000000030000,0000000000030017] overlaps section .text LMA [00000000000262f4,0000000000033067]
    1> C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 3.34/gcc/arm-none-eabi/bin/ld: error: section .sdh_state_observers overlaps absolute placed section .connectivity_version_info
    Build failed

    Other than using the flash_placement.xml you have provided, do I need to change any other of the build options?

  • This is because you compiled ser_s132_hci, not ser_s132v5_hci as you said earlier. I did not test it with this project. You can move the section further up the file, to make it work with ser_s132_hci as well:

    <!DOCTYPE Linker_Placement_File>
    <Root name="Flash Section Placement">
      <MemorySegment name="FLASH" start="$(FLASH_PH_START)" size="$(FLASH_PH_SIZE)">
        <ProgramSection load="no" name=".reserved_flash" start="$(FLASH_PH_START)" size="$(FLASH_START)-$(FLASH_PH_START)" />
        <ProgramSection alignment="0x100" load="Yes" name=".vectors" start="$(FLASH_START)" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".connectivity_version_info" address_symbol="__start_connectivity_version_info" end_symbol="__stop_connectivity_version_info" start = "0x30000" size="0x18" />
        <ProgramSection alignment="4" load="Yes" name=".init" />
        <ProgramSection alignment="4" load="Yes" name=".init_rodata" />
        <ProgramSection alignment="4" load="Yes" name=".text" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".log_const_data" inputsections="*(SORT(.log_const_data*))" address_symbol="__start_log_const_data" end_symbol="__stop_log_const_data" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_ble_observers" inputsections="*(SORT(.sdh_ble_observers*))" address_symbol="__start_sdh_ble_observers" end_symbol="__stop_sdh_ble_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_soc_observers" inputsections="*(SORT(.sdh_soc_observers*))" address_symbol="__start_sdh_soc_observers" end_symbol="__stop_sdh_soc_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".nrf_queue" inputsections="*(.nrf_queue*)" address_symbol="__start_nrf_queue" end_symbol="__stop_nrf_queue" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".nrf_balloc" inputsections="*(.nrf_balloc*)" address_symbol="__start_nrf_balloc" end_symbol="__stop_nrf_balloc" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_stack_observers" inputsections="*(SORT(.sdh_stack_observers*))" address_symbol="__start_sdh_stack_observers" end_symbol="__stop_sdh_stack_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_req_observers" inputsections="*(SORT(.sdh_req_observers*))" address_symbol="__start_sdh_req_observers" end_symbol="__stop_sdh_req_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_state_observers" inputsections="*(SORT(.sdh_state_observers*))" address_symbol="__start_sdh_state_observers" end_symbol="__stop_sdh_state_observers" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_sections" address_symbol="__start_nrf_sections" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".log_dynamic_data"  inputsections="*(SORT(.log_dynamic_data*))" runin=".log_dynamic_data_run"/>
        <ProgramSection alignment="4" load="Yes" name=".dtors" />
        <ProgramSection alignment="4" load="Yes" name=".ctors" />
        <ProgramSection alignment="4" load="Yes" name=".rodata" />
        <ProgramSection alignment="4" load="Yes" name=".ARM.exidx" address_symbol="__exidx_start" end_symbol="__exidx_end" />
        <ProgramSection alignment="4" load="Yes" runin=".fast_run" name=".fast" />
        <ProgramSection alignment="4" load="Yes" runin=".data_run" name=".data" />
        <ProgramSection alignment="4" load="Yes" runin=".tdata_run" name=".tdata" />
      </MemorySegment>
      <MemorySegment name="RAM" start="$(RAM_PH_START)" size="$(RAM_PH_SIZE)">
        <ProgramSection load="no" name=".reserved_ram" start="$(RAM_PH_START)" size="$(RAM_START)-$(RAM_PH_START)" />
        <ProgramSection alignment="0x100" load="No" name=".vectors_ram" start="$(RAM_START)" address_symbol="__app_ram_start__"/>
        <ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_sections_run" address_symbol="__start_nrf_sections_run" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".log_dynamic_data_run" address_symbol="__start_log_dynamic_data" end_symbol="__stop_log_dynamic_data" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_sections_run_end" address_symbol="__end_nrf_sections_run" />
        <ProgramSection alignment="4" load="No" name=".fast_run" />
        <ProgramSection alignment="4" load="No" name=".data_run" />
        <ProgramSection alignment="4" load="No" name=".tdata_run" />
        <ProgramSection alignment="4" load="No" name=".bss" />
        <ProgramSection alignment="4" load="No" name=".tbss" />
        <ProgramSection alignment="4" load="No" name=".non_init" />
        <ProgramSection alignment="4" size="__HEAPSIZE__" load="No" name=".heap" />
        <ProgramSection alignment="8" size="__STACKSIZE__" load="No" place_from_segment_end="Yes" name=".stack"  address_symbol="__StackLimit" end_symbol="__StackTop"/>
        <ProgramSection alignment="8" size="__STACKSIZE_PROCESS__" load="No" name=".stack_process" />
      </MemorySegment>
    </Root>
    

  • Thank you for your help. I replaced the linker in ser_s132v5_hci  and it worked. Also, is there any nordic documentation on the flash_placement.xml other than the video in the SES tutorial playlist provided by nordic

Related