| OUTPUT_ARCH( "riscv" ) |
| |
| ENTRY( bl702_start ) |
| |
| __EM_SIZE = DEFINED(ble_controller_init) ? 8K : 0K; |
| __CACHE_SIZE = DEFINED(__CACHE_SIZE) ? __CACHE_SIZE : 16K; |
| __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; |
| |
| MEMORY |
| { |
| flash (rxai!w) : ORIGIN = 0x23000000, LENGTH = (2M) |
| tcm_ocram (wxa) : ORIGIN = 0x42010000 + __CACHE_SIZE, LENGTH = (64K - __CACHE_SIZE + 64K - __EM_SIZE - __stack_size) |
| sys_stack (wxa) : ORIGIN = ORIGIN(tcm_ocram) + LENGTH(tcm_ocram), LENGTH = __stack_size |
| hbnram (wxa) : ORIGIN = 0x40010000, LENGTH = (4K) |
| psram (wxa) : ORIGIN = 0x26000000, LENGTH = (2M) |
| } |
| |
| SECTIONS |
| { |
| __stack_size = DEFINED(__stack_size) ? __stack_size : 2K; |
| BOOT2_PT_ADDR = 0x4202DC00; |
| |
| .init : |
| { |
| KEEP (*(SORT_NONE(.init))) |
| } >flash |
| |
| .text : |
| { |
| *(.text.unlikely .text.unlikely.*) |
| *(.text.startup .text.startup.*) |
| *(.text .text.*) |
| *(.gnu.linkonce.t.*) |
| } >flash |
| |
| .rodata : |
| { |
| *(.rdata) |
| *(.rodata .rodata.*) |
| *(.sdata2.*) |
| *(.gcc_except_table.*) |
| |
| /* camera driver */ |
| . = ALIGN(4); |
| _bl_driver_camera_start = .; |
| KEEP(*(.camera_desc)) |
| *(.camera_desc) |
| _bl_driver_camera_end = .; |
| |
| /* static cli cmds */ |
| . = ALIGN(4); |
| _bl_static_cli_cmds_start = .; |
| KEEP(*(.static_cli_cmds)) |
| *(.static_cli_cmds) |
| _bl_static_cli_cmds_end = .; |
| |
| /* static blog code1 */ |
| . = ALIGN(4); |
| _bl_static_blogcomponent_code_start = .; |
| KEEP(SORT(*)(.static_blogcomponent_code*)) |
| *(.static_blogcomponent_code*) |
| _bl_static_blogcomponent_code_end = .; |
| |
| /* static blog code2 */ |
| . = ALIGN(4); |
| _bl_static_blogfile_code_start = .; |
| KEEP(SORT(*)(.static_blogfile_code*)) |
| *(.static_blogfile_code*) |
| _bl_static_blogfile_code_end = .; |
| |
| /* static blog code3 */ |
| . = ALIGN(4); |
| _bl_static_blogpri_code_start = .; |
| KEEP(SORT(*)(.static_blogpri_code*)) |
| *(.static_blogpri_code*) |
| _bl_static_blogpri_code_end = .; |
| |
| *(.gnu.linkonce.r.*) |
| } >flash |
| |
| .init_array : |
| { |
| __init_array_start = .; |
| KEEP(*(.init_array)) |
| __init_array_end = .; |
| } >flash |
| |
| .bleromro : |
| { |
| KEEP(*(.bleromro)) |
| } >flash |
| |
| .bleromrw (NOLOAD) : |
| { |
| KEEP(*(.bleromrw)) |
| } >tcm_ocram |
| |
| .hbn : ALIGN(4) |
| { |
| PROVIDE( _hbn_load = LOADADDR(.hbn) ); |
| PROVIDE( _hbn_run = ADDR(.hbn) ); |
| PROVIDE( _hbn_run_end = ADDR(.hbn) + SIZEOF(.hbn)); |
| |
| /* put bl702_rf_private.o in hbnram to avoid ocram conflict during rf calibration */ |
| *libbl702_rf.a:bl702_rf_private.o(.retention .retention_noinit) |
| *libbl702_rf.a:bl702_rf_private.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON) |
| PROVIDE ( _rf_data_end = . ); |
| |
| /* tcm code that should be retentive after hbn wakeup */ |
| *libbl702_std.a:bl702_romapi.o(.tcm_code.* .sclock_rlt_code.*) |
| *libbl702_std.a:bl702_glb.o(.tcm_code.* .sclock_rlt_code.*) |
| PROVIDE ( _hbn_restore_tcm_run_end = . ); |
| |
| /* data that should be retentive after hbn wakeup */ |
| *liblmac154.a:*(.sdata.* .srodata.* .sbss.* .bss.* COMMON) |
| *libbl702_std.a:*(.sdata.* .srodata.* .sbss.* .bss.* COMMON) |
| *libhosal.a:bl_adc.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON) |
| *libhosal.a:bl_gpio.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON) |
| *libhosal.a:bl_sys.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON) |
| *libhosal.a:bl_timer.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON) |
| *libhosal.a:bl_uart.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON) |
| *libhosal.a:hosal_uart.o(.sdata.* .srodata.* .sbss.* .bss.* COMMON) |
| PROVIDE ( _hbn_restore_data_run_end = . ); |
| *(.hbn_code.*) |
| *(.hbn_data) |
| *(.retention) |
| } >hbnram AT > flash |
| |
| .hbn_noinit (NOLOAD) : |
| { |
| *(.hbn_noinit) |
| *(.retention_noinit) |
| |
| /* PDS backup address */ |
| . = ALIGN(4); |
| PROVIDE ( __ld_pds_bak_addr = . ); |
| . = . + 256; |
| } >hbnram |
| |
| .rsvd (NOLOAD) : |
| { |
| *(.rsvd_data) |
| *(.ble_rsvd_mem) |
| |
| KEEP(*AppTask.cpp.o(.bss.*appStack*)) |
| KEEP(*main.cpp.o(.bss.*IdleTaskStack*)) |
| KEEP(*main.cpp.o(.bss.*TimerTaskStack*)) |
| |
| /*KEEP(*MemMonitoring.cpp.o(.bss.*monitoringStack*))*/ |
| /*KEEP(*out.uart.c.o(.bss.chipUart_var*))*/ |
| |
| } >hbnram |
| |
| .tcmcode : ALIGN(4) |
| { |
| PROVIDE( _tcm_load = LOADADDR(.tcmcode) ); |
| PROVIDE( _tcm_run = ADDR(.tcmcode) ); |
| PROVIDE( _tcm_run_end = ADDR(.tcmcode) + SIZEOF(.tcmcode)); |
| |
| *(.tcm_code.*) |
| *(.tcm_const.*) |
| *(.sclock_rlt_code.*) |
| *(.sclock_rlt_const.*) |
| } >tcm_ocram AT > flash |
| |
| .data : ALIGN(4) |
| { |
| PROVIDE( _data_load = LOADADDR(.data) ); |
| PROVIDE( _data_run = ADDR(.data) ); |
| PROVIDE( _data_run_end = ADDR(.data) + SIZEOF(.data)); |
| |
| *(.pds_code.*) |
| *(.data .data.*) |
| *(.gnu.linkonce.d.*) |
| |
| . = ALIGN(8); |
| /*always put freetos under global_pointer with the following order. No change!*/ |
| PROVIDE( __global_pointer$ = . + 0x7F0 ); |
| KEEP(*libbl702_freertos.a:*(.sdata.*)) |
| KEEP(*libbl702_freertos.a:*(.sbss.*)) |
| KEEP(*libbl702_freertos.a:*(.bss.*)) |
| KEEP(*libbl702_freertos.a:*(COMMON)) |
| *(.sdata .sdata.*) |
| *(.gnu.linkonce.s.*) |
| |
| . = ALIGN(8); |
| *(.srodata.cst16) |
| *(.srodata.cst8) |
| *(.srodata.cst4) |
| *(.srodata.cst2) |
| *(.srodata .srodata.*) |
| |
| . = ALIGN(8); |
| *(._k_queue.static.*) |
| *(._k_sem.static.*) |
| *(._k_mutex.static.*) |
| _bt_gatt_service_static_list_start = .; |
| KEEP(*(SORT_BY_NAME("._bt_gatt_service_static.static.*"))) |
| _bt_gatt_service_static_list_end = .; |
| _bt_l2cap_fixed_chan_list_start = .; |
| KEEP(*(SORT_BY_NAME("._bt_l2cap_fixed_chan.static.*"))) |
| _bt_l2cap_fixed_chan_list_end = .; |
| } >tcm_ocram AT > flash |
| |
| .boot2 (NOLOAD) : |
| { |
| PROVIDE ( __boot2_pt_addr_start = . ); |
| *(.bss.boot2_partition_table) |
| PROVIDE ( __boot2_pt_addr_end = . ); |
| |
| PROVIDE ( __boot2_flashCfg_start = . ); |
| *(.bss.boot2_flashCfg) |
| PROVIDE ( __boot2_flashCfg_end = . ); |
| } >tcm_ocram |
| |
| .bss_psram (NOLOAD) : |
| { |
| PROVIDE( __bss_psram_start = ADDR(.bss_psram) ); |
| PROVIDE( __bss_psram_end = ADDR(.bss_psram) + SIZEOF(.bss_psram) ); |
| |
| PROVIDE ( __psram_bss_init_start = . ); |
| /** put the bss data in psram between __psram_bss_init_start and __psram_bss_init_end will bet reset to 0 after psram init*/ |
| . = ALIGN(8); |
| KEEP(*lighting-common.*.cpp.o(.bss.*ttributeData*)) |
| . = ALIGN(8); |
| KEEP(*lighting-common.*.cpp.o(.bss.*bindingTable*)) |
| . = ALIGN(8); |
| KEEP(*lighting-common.*.cpp.o(.bss.appResponseData*)) |
| . = ALIGN(8); |
| KEEP(*lighting-common.*.cpp.o(.bss.*NetworkCommissioning*)) |
| |
| . = ALIGN(8); |
| KEEP(*dnssd.Advertiser_ImplMinimalMdns.cpp.o(.bss.*gAdvertiser*)) |
| . = ALIGN(8); |
| KEEP(*dnssd.MinimalMdnsServer.cpp.o(.bss.*GlobalMinimalMdnsServer*_instance)) |
| . = ALIGN(8); |
| KEEP(*dnssd.Resolver_ImplMinimalMdns.cpp.o(.bss.*gResolver*)) |
| |
| /*. = ALIGN(8);*/ |
| /*KEEP(*libCHIPAppServer.Server.cpp.o(.bss.*sServer*))*/ |
| |
| . = ALIGN(8); |
| KEEP(*bridge-common.*.cpp.o(.bss.*)) |
| /* . = ALIGN(8); */ |
| /* # KEEP(*bridge-common.*.cpp.o(.bss.*bindingTable*)) */ |
| /* # . = ALIGN(8); */ |
| /* # KEEP(*bridge-common.*.cpp.o(.bss.appResponseData*)) */ |
| /* # . = ALIGN(8); */ |
| /* # KEEP(*bridge-common.*.cpp.o(.bss.*NetworkCommissioning*)) */ |
| |
| . = ALIGN(8); |
| KEEP(*libopenthread-cli-*.cli.cpp.o(.bss.*sInterpreterRaw*)) |
| |
| . = ALIGN(8); |
| KEEP(*libopenthread-cli-*.cli_dataset.cpp.o(.bss.*sDataset*)) |
| |
| . = ALIGN(8); |
| KEEP(*libopenthread-ftd.instance.cpp.o(.bss.*gInstanceRaw*)) |
| |
| . = ALIGN(8); |
| KEEP(*commands.Dns.cpp.o(.bss.*)) |
| |
| . = ALIGN(8); |
| KEEP(*commands.BLE.cpp.o(.bss.*)) |
| |
| . = ALIGN(8); |
| KEEP(*commands.Device.cpp.o(.bss.*)) |
| |
| . = ALIGN(8); |
| KEEP(*commands.Base64.cpp.o(.bss.*)) |
| |
| . = ALIGN(8); |
| KEEP(*commands.Base64.cpp.o(.bss.*)) |
| |
| . = ALIGN(8); |
| /* KEEP(*shell_common.cmd_*.cpp.o(.bss.*))*/ |
| |
| . = ALIGN(8); |
| KEEP(*shell_core.Engine.cpp.o(.bss.*theEngineRoot*)) |
| |
| . = ALIGN(8); |
| /* KEEP(*shell_common.globals.cpp.o(.bss.*)) */ |
| |
| PROVIDE ( __psram_bss_init_end = . ); |
| |
| . = ALIGN(8); |
| KEEP(*lwip.memp.c.o(.bss.lwip_PBUF_POOL)) |
| . = ALIGN(8); |
| KEEP(*sdk_lwip.dns.c.o(.bss.dns_table)) |
| |
| . = ALIGN(8); |
| KEEP(*virt_net_spi.c.o(.bss.tx_buffer)) |
| |
| *(.wifi_ram*) |
| . = ALIGN(16); |
| } >psram |
| |
| . = ALIGN(8); |
| PROVIDE( _heap3_start = .); |
| PROVIDE( _heap3_size = ORIGIN(psram) + LENGTH(psram) - _heap3_start ); |
| |
| .bss (NOLOAD) : |
| { |
| PROVIDE( __bss_start = ADDR(.bss) ); |
| PROVIDE( __bss_end = ADDR(.bss) + SIZEOF(.bss) ); |
| |
| *(.sbss*) |
| *(.gnu.linkonce.sb.*) |
| *(.bss .bss.*) |
| *(.gnu.linkonce.b.*) |
| *(COMMON) |
| } >tcm_ocram |
| |
| . = ALIGN(8); |
| PROVIDE( _heap_start = . ); |
| PROVIDE( _heap_size = ADDR(.stack) - _heap_start ); |
| |
| PROVIDE( _heap2_start = 0 ); |
| PROVIDE( _heap2_size = 0 ); |
| |
| .psram (NOLOAD) : |
| { |
| *(.wifi_ram*) |
| . = ALIGN(16); |
| } > psram |
| |
| . = ALIGN(8); |
| PROVIDE( _heap3_start = .); |
| PROVIDE( _heap3_size = ORIGIN(psram) + LENGTH(psram) - _heap3_start ); |
| |
| .stack (NOLOAD) : |
| { |
| PROVIDE ( _sp_base = . ); |
| . = . + __stack_size; |
| PROVIDE( _sp_main = . ); |
| __freertos_irq_stack_top = .; |
| } > sys_stack |
| |
| /* camera driver */ |
| PROVIDE( _ld_bl_driver_camera_start = _bl_driver_camera_start ); |
| PROVIDE( _ld_bl_driver_camera_end = _bl_driver_camera_end ); |
| |
| /* cli */ |
| PROVIDE( _ld_bl_static_cli_cmds_start = _bl_static_cli_cmds_start ); |
| PROVIDE( _ld_bl_static_cli_cmds_end = _bl_static_cli_cmds_end ); |
| |
| /* blog */ |
| PROVIDE( _ld_bl_static_blogcomponent_code_start = _bl_static_blogcomponent_code_start ); |
| PROVIDE( _ld_bl_static_blogcomponent_code_end = _bl_static_blogcomponent_code_end ); |
| PROVIDE( _ld_bl_static_blogfile_code_start = _bl_static_blogfile_code_start ); |
| PROVIDE( _ld_bl_static_blogfile_code_end = _bl_static_blogfile_code_end ); |
| PROVIDE( _ld_bl_static_blogpri_code_start = _bl_static_blogpri_code_start ); |
| PROVIDE( _ld_bl_static_blogpri_code_end = _bl_static_blogpri_code_end ); |
| |
| /* ram information */ |
| PROVIDE( _ld_ram_size0 = LENGTH(flash) ); |
| PROVIDE( _ld_ram_addr0 = ORIGIN(flash) ); |
| PROVIDE( _ld_ram_size1 = LENGTH(tcm_ocram) - SIZEOF(.stack) ); |
| PROVIDE( _ld_ram_addr1 = ORIGIN(tcm_ocram) ); |
| PROVIDE( _ld_ram_size2 = LENGTH(hbnram) ); |
| PROVIDE( _ld_ram_addr2 = ORIGIN(hbnram) ); |
| PROVIDE( _ld_ram_size3 = SIZEOF(.stack) ); |
| PROVIDE( _ld_ram_addr3 = ADDR(.stack) ); |
| |
| /* BOOT2 parameter */ |
| PROVIDE ( __boot2_pt_addr_src = BOOT2_PT_ADDR ); |
| |
| /* EM size */ |
| PROVIDE(__LD_CONFIG_EM_SEL = __EM_SIZE); |
| } |