| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- /****************************************************************************************
- * @file flash.ld
- *
- * @brief This file is the link script file (gnuarm or armgcc).
- *
- * Copyright (C) BouffaloLab 2021
- *
- ****************************************************************************************
- */
- /* configure the CPU type */
- OUTPUT_ARCH( "riscv" )
- /* link with the standard c library */
- INPUT(-lc)
- /* link with the standard GCC library */
- INPUT(-lgcc)
- /* configure the entry point */
- ENTRY(__start)
- StackSize = 0x1000; /* 4KB */
- HeapMinSize = 0x1000; /* 4KB */
- __EM_SIZE = DEFINED(btble_controller_init) ? 32K : 0K;
- __RFTLV_SIZE_OFFSET = 1K;
- __RFTLV_SIZE_HOLE = 2K;
- __RFTLV_HEAD1_H = (0x46524C42); /* BLRF */
- __RFTLV_HEAD1_L = (0x41524150); /* PAPA */
- MEMORY
- {
- fw_header_memory (rx) : ORIGIN = 0xA0000000 - 0x1000, LENGTH = 4K
- xip_memory (rx) : ORIGIN = 0xA0000000, LENGTH = 4M
- ram_code (wxa) : ORIGIN = 0xA8000000, LENGTH = 4M
- itcm_memory (rx) : ORIGIN = 0x62FC0000, LENGTH = 20K
- dtcm_memory (rx) : ORIGIN = 0x62FC5000, LENGTH = 4K
- nocache_ram_memory (!rx) : ORIGIN = 0x22FC6000, LENGTH = 44K+60K
- ram_memory (!rx) : ORIGIN = 0x62FE0000, LENGTH = 320K-20K-4K-44K-60K
- ram_wifi (wxa) : ORIGIN = 0x23010000, LENGTH = 160K - __EM_SIZE
- }
- SECTIONS
- {
- BOOT2_PT_ADDR = 0x63027c00;
- .fw_header :
- {
- KEEP(*(.fw_header))
- } > fw_header_memory
- .init :
- {
- KEEP (*(SORT_NONE(.init)))
- KEEP (*(SORT_NONE(.vector)))
- } > xip_memory
- .rftlv.tool :
- {
- . = ORIGIN(xip_memory) + __RFTLV_SIZE_OFFSET;
- PROVIDE( _ld_symbol_rftlv_address = . );
- LONG(__RFTLV_HEAD1_H);
- LONG(__RFTLV_HEAD1_L);
- . = ORIGIN(xip_memory) + __RFTLV_SIZE_OFFSET + __RFTLV_SIZE_HOLE;
- } > xip_memory
- .text :
- {
- . = ALIGN(4);
- __text_code_start__ = .;
- *(.text)
- *(.text.*)
- /* section information for finsh shell */
- . = ALIGN(4);
- __fsymtab_start = .;
- KEEP(*(FSymTab))
- __fsymtab_end = .;
- . = ALIGN(4);
- __vsymtab_start = .;
- KEEP(*(VSymTab))
- __vsymtab_end = .;
- . = ALIGN(4);
- /* section information for modules */
- . = ALIGN(4);
- __rtmsymtab_start = .;
- KEEP(*(RTMSymTab))
- __rtmsymtab_end = .;
- /* section information for initialization */
- . = ALIGN(4);
- __rt_init_start = .;
- KEEP(*(SORT(.rti_fn*)))
- __rt_init_end = .;
- /* section information for usb usbh_class_info */
- . = ALIGN(4);
- __usbh_class_info_start__ = .;
- KEEP(*(.usbh_class_info))
- . = ALIGN(4);
- __usbh_class_info_end__ = .;
- /*put .rodata**/
- *(EXCLUDE_FILE( *bl616_glb*.o* \
- *bl616_pds*.o* \
- *bl616_common*.o* \
- *bl616_sf_cfg*.o* \
- *bl616_sf_ctrl*.o* \
- *bl616_sflash*.o* \
- *bl616_xip_sflash*.o* \
- *bl616_ef_ctrl*.o* \
- *bl616_romapi_patch*.o* ).rodata*)
- *(.srodata)
- *(.srodata.*)
- . = ALIGN(4);
- __text_code_end__ = .;
- } > xip_memory
- . = ALIGN(4);
- __itcm_load_addr = .;
- .itcm_region : AT (__itcm_load_addr)
- {
- . = ALIGN(4);
- __tcm_code_start__ = .;
- *(.tcm_code.*)
- *(.tcm_const.*)
- *(.sclock_rlt_code.*)
- *(.sclock_rlt_const.*)
- *bl616_glb*.o*(.rodata*)
- *bl616_pds*.o*(.rodata*)
- *bl616_common*.o*(.rodata*)
- *bl616_sf_cfg*.o*(.rodata*)
- *bl616_sf_ctrl*.o*(.rodata*)
- *bl616_sflash*.o*(.rodata*)
- *bl616_xip_sflash*.o*(.rodata*)
- *bl616_ef_ctrl*.o*(.rodata*)
- *bl616_romapi_patch*.o*(.rodata*)
- . = ALIGN(4);
- __tcm_code_end__ = .;
- } > itcm_memory
- __dtcm_load_addr = __itcm_load_addr + SIZEOF(.itcm_region);
- .dtcm_region : AT (__dtcm_load_addr)
- {
- . = ALIGN(4);
- __tcm_data_start__ = .;
- *(.tcm_data)
- /* *finger_print.o(.data*) */
- . = ALIGN(4);
- __tcm_data_end__ = .;
- } > dtcm_memory
- /*************************************************************************/
- /* .stack_dummy section doesn't contains any symbols. It is only
- * used for linker to calculate size of stack sections, and assign
- * values to stack symbols later */
- .stack_dummy (NOLOAD):
- {
- . = ALIGN(0x4);
- . = . + StackSize;
- . = ALIGN(0x4);
- } > dtcm_memory
- /* Set stack top to end of RAM, and stack limit move down by
- * size of stack_dummy section */
- __StackTop = ORIGIN(dtcm_memory) + LENGTH(dtcm_memory);
- PROVIDE( __freertos_irq_stack_top = __StackTop);
- PROVIDE( __rt_rvstack = . );
- __StackLimit = __StackTop - SIZEOF(.stack_dummy);
- /* Check if data + heap + stack exceeds RAM limit */
- ASSERT(__StackLimit >= __tcm_data_end__, "region RAM overflowed with stack")
- /*************************************************************************/
- __nocache_ram_load_addr = __dtcm_load_addr + SIZEOF(.dtcm_region);
- .nocache_ram_region : AT (__nocache_ram_load_addr)
- {
- . = ALIGN(4);
- __nocache_ram_data_start__ = .;
- *(.nocache_ram)
- . = ALIGN(4);
- __nocache_ram_data_end__ = .;
- } > nocache_ram_memory
- __ram_load_addr = __nocache_ram_load_addr + SIZEOF(.nocache_ram_region);
- /* Data section */
- RAM_DATA : AT (__ram_load_addr)
- {
- . = ALIGN(4);
- __ram_data_start__ = .;
- PROVIDE( __global_pointer$ = . + 0x800 );
- *(.data)
- *(.data.*)
- *(.sdata)
- *(.sdata.*)
- *(.sdata2)
- *(.sdata2.*)
- . = ALIGN(4);
- __bflog_tags_start__ = .;
- *(.bflog_tags_array)
- . = ALIGN(4);
- __bflog_tags_end__ = .;
- __ram_data_end__ = .;
- } > ram_memory
- __etext_final = (__ram_load_addr + SIZEOF (RAM_DATA));
- ASSERT(__etext_final <= ORIGIN(xip_memory) + LENGTH(xip_memory), "code memory overflow")
- .bss (NOLOAD) :
- {
- . = ALIGN(4);
- __bss_start__ = .;
- *(.bss*)
- *(.sbss*)
- *(COMMON)
- . = ALIGN(4);
- __bss_end__ = .;
- } > ram_memory
- .noinit_data (NOLOAD) :
- {
- . = ALIGN(4);
- __noinit_data_start__ = .;
- *(.noinit_data*)
- . = ALIGN(4);
- __noinit_data_end__ = .;
- } > ram_memory
- .nocache_noinit_ram_region (NOLOAD) :
- {
- . = ALIGN(4);
- __nocache_noinit_ram_data_start__ = .;
- *(.nocache_noinit_ram)
- *(.noncacheable)
- . = ALIGN(4);
- __nocache_noinit_ram_data_end__ = .;
- } > nocache_ram_memory
- .heap (NOLOAD):
- {
- . = ALIGN(4);
- __HeapBase = .;
- /*__end__ = .;*/
- /*end = __end__;*/
- KEEP(*(.heap*))
- . = ALIGN(4);
- __HeapLimit = .;
- } > ram_memory
- __HeapLimit = ORIGIN(ram_memory) + LENGTH(ram_memory);
- ASSERT(__HeapLimit - __HeapBase >= HeapMinSize, "heap region overflow")
- .psmram_data (NOLOAD):
- {
- . = ALIGN(4);
- __psram_data_start__ = .;
- /*__end__ = .;*/
- /*end = __end__;*/
- KEEP(*(.psram_data*))
- KEEP(*(.img_buf*))
- . = ALIGN(4);
- __psram_data_end__ = .;
- } > ram_code
- .wifibss (NOLOAD) :
- {
- PROVIDE( __wifi_bss_start = ADDR(.wifibss) );
- PROVIDE( __wifi_bss_end = ADDR(.wifibss) + SIZEOF(.wifibss) );
- _sshram = . ;
- *(SHAREDRAMIPC)
- *(SHAREDRAM)
- _eshram = . ;
- *ipc_shared.o(COMMON)
- *sdu_shared.o(COMMON)
- *hal_desc.o(COMMON)
- *txl_buffer_shared.o(COMMON)
- *txl_frame_shared.o(COMMON)
- *scan_shared.o(COMMON)
- *scanu_shared.o(COMMON)
- *mfp_bip.o(COMMON)
- *me_mic.o(COMMON)
- *(.wifi_ram*)
- . = ALIGN(16);
- } > ram_wifi
- PROVIDE( _heap_wifi_start = . );
- PROVIDE( _heap_wifi_size = ORIGIN(ram_wifi) + LENGTH(ram_wifi) - _heap_wifi_start );
- }
|