#! armclang --target=arm-arm-none-eabi -march=armv7-m -E -x c #include "linker_conf.h" #include "zephyr/include/generated/autoconf.h" #include "zephyr/include/generated/offsets.h" #define ROM_ADDR (CONFIG_FLASH_BASE_ADDRESS + CONFIG_FLASH_LOAD_OFFSET) #define ROM_SIZE (CONFIG_FLASH_SIZE * 1024) #define SRAM_DATA_SIZE AlignExpr(ImageLength(ER_SRAM_DATA),1024) #define RAM_SIZE (CONFIG_SRAM_SIZE * 1024 - SENSOR_IMAGE_SIZE - SRAM_DATA_SIZE) #define SRAM_DATA_ADDR (CONFIG_SRAM_BASE_ADDRESS + SENSOR_IMAGE_SIZE) #define RAM_ADDR (SRAM_DATA_ADDR + SRAM_DATA_SIZE) #define SHARE_RAM_ADDR 0x2FF1AE00 #define SHARE_RAM_SIZE 0x51FF #define PSRAM_SIZE (CONFIG_PSRAM_SIZE * 1024) #define PSRAM_ADDR CONFIG_PSRAM_BASE_ADDRESS #define INIT_STATUS_SIZE (((((ImageLimit(ER_DEVICE_SMPX) - ImageBase(ER_DEVICE_PRE_KERNEL_1)) / _DEVICE_STRUCT_SIZEOF) + 31) / 32) * 4) #define DEVICE_BUSY_SIZE (((((ImageLimit(ER_DEVICE_SMPX) - ImageBase(ER_DEVICE_PRE_KERNEL_1)) / _DEVICE_STRUCT_SIZEOF) + 31) / 32) * 4) LR1 ROM_ADDR ROM_SIZE { ; load region 1 ER_HEADER ROM_ADDR EMPTY CONFIG_ROM_START_OFFSET { } ER_VECTOR ROM_ADDR+CONFIG_ROM_START_OFFSET FIXED { * (.exc_vector_table) * (.exc_vector_table.*) * (.gnu.linkonce.irq_vector_table) * (.vectors) } ER_APP_ENTRY +0 { * (.app_entry) } ER_SRV_ENTRY +0 { * (.service_entry) } ER_VIEW_ENTRY +0 { * (.view_entry) } #include ER_TEXT AlignExpr(ImageLimit(ER_VIEW_ENTRY)+SENSOR_LOAD_SIZE,8) { * (.text) * (.text.*) * (.gnu.linkonce.t.*) * (.glue_7t) * (.glue_7) * (.vfp11_veneer) * (.v4_bx) .ANY (+RO-CODE) } ER_ARM_EXTAB +0 { *(.ARM.extab*) *(gnu.linkonce.armextab.*) } ER_ARM_EXIDX +0 { *(.ARM.exidx*) *(gnu.linkonce.armexidx.*) } ER_INIT_PRE_KERNEL_1 +0 SORTTYPE Lexical { * (.z_init_PRE_KERNEL_1?_ ) } ER_INIT_PRE_KERNEL_1X +0 SORTTYPE Lexical { * (.z_init_PRE_KERNEL_1??_ ) } ER_INIT_PRE_KERNEL_2 +0 SORTTYPE Lexical { * (.z_init_PRE_KERNEL_2?_ ) } ER_INIT_PRE_KERNEL_2X +0 SORTTYPE Lexical { * (.z_init_PRE_KERNEL_2??_ ) } ER_INIT_POST_KERNEL +0 SORTTYPE Lexical { * (.z_init_POST_KERNEL?_ ) } ER_INIT_POST_KERNELX +0 SORTTYPE Lexical { * (.z_init_POST_KERNEL??_ ) } ER_INIT_APPLICATION +0 SORTTYPE Lexical { * (.z_init_APPLICATION?_ ) } ER_INIT_APPLICATIONX +0 SORTTYPE Lexical { * (.z_init_APPLICATION??_ ) } ER_INIT_SMP +0 SORTTYPE Lexical { * (.z_init_SMP?_ ) } ER_INIT_SMPX +0 SORTTYPE Lexical { * (.z_init_SMP??_ ) } ER_INIT_POWER_MAX +0 SORTTYPE Lexical { * (.z_init_POWER_MAX?_ ) } ER_INIT_POWER_MAXX +0 SORTTYPE Lexical { * (.z_init_POWER_MAX??_ ) } ER_INIT_ERROR +0 SORTTYPE Lexical { * (.z_init_?*) } ER_DEVICE_PRE_KERNEL_1 +0 SORTTYPE Lexical { * (.z_device_PRE_KERNEL_1?_ ) } ER_DEVICE_PRE_KERNEL_1X +0 SORTTYPE Lexical { * (.z_device_PRE_KERNEL_1??_ ) } ER_DEVICE_PRE_KERNEL_2 +0 SORTTYPE Lexical { * (.z_device_PRE_KERNEL_2?_ ) } ER_DEVICE_PRE_KERNEL_2X +0 SORTTYPE Lexical { * (.z_device_PRE_KERNEL_2??_ ) } ER_DEVICE_POST_KERNEL +0 SORTTYPE Lexical { * (.z_device_POST_KERNEL?_ ) } ER_DEVICE_POST_KERNELX +0 SORTTYPE Lexical { * (.z_device_POST_KERNEL??_ ) } ER_DEVICE_APPLICATION +0 SORTTYPE Lexical { * (.z_device_APPLICATION?_ ) } ER_DEVICE_APPLICATIONX +0 SORTTYPE Lexical { * (.z_device_APPLICATION??_ ) } ER_DEVICE_SMP +0 SORTTYPE Lexical { * (.z_device_SMP? ) } ER_DEVICE_SMPX +0 SORTTYPE Lexical { * (.z_device_SMP?? ) } ER_DEVICE_POWER_MAX +0 SORTTYPE Lexical { * (.z_device_POWER_MAX? ) } ER_DEVICE_POWER_MAXX +0 SORTTYPE Lexical { * (.z_device_POWER_MAX?? ) } ER_APP_SHMEM +0 SORTTYPE Lexical { * (.app_regions.*) } ER_NET_12 +0 SORTTYPE Lexical { * (.net_l2.init) * (.net_l2.init*) } ER_BT_CHANNELS +0 SORTTYPE Lexical ALIGNALL 4 { * (._bt_l2cap_fixed_chan.static.*) } ER_BT_BR_CHANNELS +0 SORTTYPE Lexical ALIGNALL 4 { * (._bt_l2cap_br_fixed_chan.static.*) } ER_BT_SERVICES +0 SORTTYPE Lexical ALIGNALL 4 { * (._bt_gatt_service_static.static.*) } ER_LOG_CONST +0 SORTTYPE Lexical { * (.log_const_*) } ER_LOG_BACKENDS +0 SORTTYPE Lexical { * (._log_backend.*) } ER_SHELL +0 SORTTYPE Lexical { * (._shell.static.*) } ER_SHELL_ROOT_CMDS +0 SORTTYPE Lexical { * (.shell_root_cmd_*) } ER_FONT_ENTRY +0 SORTTYPE Lexical { * (._cfb_font.*) } ER_TRACING_BACKENDS +0 { * (._tracing_backend.*) } ER_RODATA +0 ALIGN 4 { * (.rodata) * (.rodata.*) * (.gnu.linkonce.r.*) .ANY (+RO-DATA) } ER_SRAM_DATA SRAM_DATA_ADDR ALIGN 8 { * (.sleepfunc) * (.sleepfunc.*) * (.defunc) * (.lvglfunc) * (.sleep.data*) } ER_ATTDATA PSRAM_ADDR { * (.attruntimedata) } ER_RAMFUNC +0 { * (.ramfunc) * (.ramfunc.*) } ER_DATAS +0 ALIGN 8 { * (.data) * (.data.*) * (.kernel.*) } ER_AAC_P_OVERLAY_DATA +0 ALIGN 4 OVERLAY { aac_a_1.o(+RW) aac_a_2.o(+RW) aac_a_3.o(+RW) aac_s_1.o(+RW) } ER_MP3_P_OVERLAY_DATA +0 ALIGN 4 OVERLAY{ m1.o(+RW) m2.o(+RW) } ER_WAV_P_OVERLAY_DATA +0 ALIGN 4 OVERLAY { wav_s_1.o(+RW) wav_w_1.o(+RW) wav_w_2.o(+RW) wav_w_3.o(+RW) } ER_APE_P_OVERLAY_DATA +0 ALIGN 4 OVERLAY { ape_c_1.o(+RW) ape_d_1.o(+RW) ape_e_1.o(+RW) ape_i_1.o(+RW) ape_p_1.o(+RW) ape_s_1.o(+RW) ape_test.o(+RW) } ER_FLAC_P_OVERLAY_DATA +0 ALIGN 4 OVERLAY { fla_p_1.o(+RW) fla_s_1.o(+RW) fla_s_2.o(+RW) } ER_WMA_P_OVERLAY_DATA +0 ALIGN 4 OVERLAY { w13_i_1.o(+RW) w13_s_1.o(+RW) w13_a_1.o(+RW) } ER_DEVICE_STATE +0 SORTTYPE Lexical { * (.z_devstate* ) } ER_PM_DEVICE_SLOTS +0 SORTTYPE Lexical { * (.z_pm_device_slots* ) } ER_DEVICE_INIT_STATUS +0 FILL 0 INIT_STATUS_SIZE { } ER_DEVICE_BUSY +0 FILL 0 DEVICE_BUSY_SIZE { } ER_INITSHELL +0 { * (.shell_module_*) * (.shell_cmd_*) } ER_LOG_DYNAMIC +0 SORTTYPE Lexical { * (.log_dynamic_*) } ER_STATIC_THREAD +0 SORTTYPE Lexical ALIGNALL 4 { * (.__static_thread_data.static.*) } ER_K_TIMER +0 ALIGNALL 4 { * (._k_timer.static.*) } ER_K_MEM_SLAB +0 ALIGNALL 4 { * (._k_mem_slab.static.*) } ER_K_MEM_POOL +0 ALIGNALL 4 { * (._k_mem_pool.static.*) } ER_K_HEAP +0 ALIGNALL 4 { * (._k_heap.static.*) } ER_K_SEM +0 ALIGNALL 4 { * (._k_sem.static.*) * (._sys_sem.static.*) } ER_K_MUTEX +0 ALIGNALL 4 { * (._k_mutex.static.*) } ER_K_QUEUE +0 ALIGNALL 4 { * (._k_queue.static.*) * (._k_fifo.static.*) * (._k_lifo.static.*) } ER_K_STACK +0 ALIGNALL 4 { * (._k_stack.static.*) } ER_K_MSGQ +0 ALIGNALL 4 { * (._k_msgq.static.*) } ER_K_MBOX +0 ALIGNALL 4 { * (._k_mbox.static.*) } ER_K_PIPE +0 ALIGNALL 4 { * (._k_pipe.static.*) } ER_NET_BUF_POOL +0 SORTTYPE Lexical ALIGNALL 4 { * (._net_buf_pool.static.*) } ER_NET_IF +0 SORTTYPE Lexical ALIGNALL 4 { * (.net_if.*) } ER_NET_IF_DEV +0 SORTTYPE Lexical ALIGNALL 4 { * (.net_if_dev.*) } ER_NET_L2_DATA +0 SORTTYPE Lexical ALIGNALL 4 { * (.net_l2.data) * (.net_l2.data*) } } LR2 AlignExpr(ImageLimit(ER_NET_L2_DATA), 512) { ; load region 2 ER_SW_ISR_TABLE +0 ALIGN 4 FIXED { * (.gnu.linkonce.sw_isr_table) } ER_WAV_P_OVERLAY_BSS +0 ALIGN 4 OVERLAY FIXED{ wav_s_1.o(+ZI) wav_w_1.o(+ZI) wav_w_2.o(+ZI) wav_w_3.o(+ZI) } ER_FLAC_P_OVERLAY_BSS +0 ALIGN 4 OVERLAY FIXED{ fla_p_1.o(+ZI) fla_s_1.o(+ZI) fla_s_2.o(+ZI) } ER_MP3_P_OVERLAY_BSS +0 ALIGN 4 OVERLAY FIXED{ m1.o(+ZI) m2.o(+ZI) } ER_WMA_P_OVERLAY_BSS +0 ALIGN 4 OVERLAY FIXED{ w13_i_1.o(+ZI) w13_s_1.o(+ZI) w13_a_1.o(+ZI) } ER_APE_P_OVERLAY_BSS +0 ALIGN 4 OVERLAY FIXED{ ape_c_1.o(+ZI) ape_d_1.o(+ZI) ape_e_1.o(+ZI) ape_i_1.o(+ZI) ape_p_1.o(+ZI) ape_s_1.o(+ZI) ape_test.o(+ZI) } ER_AAC_P_OVERLAY_BSS +0 ALIGN 4 OVERLAY FIXED{ aac_a_1.o(+ZI) aac_a_2.o(+ZI) aac_a_3.o(+ZI) aac_s_1.o(+ZI) } ER_BSS +0 ALIGN 4 FIXED { * (.bss) * (.bss.*) * (COMMON) * (.kernel_bss.*) * (.bthost_bss*) * (.btsrv_bss*) .ANY (+ZI) } ER_NOINIT +0 ALIGN 4 FIXED { * (.noinit) * (.noinit.*) * (.kernel_noinit.*) } ER_PSRAM_NOINIT +0 ALIGN 64 FIXED{ * (.lvgl.noinit.malloc*) * (.vglite.noinit.mem_pool*) * (.vglite.noinit.malloc*) #ifdef CONFIG_VIDEO_PLAYER * (.VIDEO_PSRAM_REGION*) #endif } ER_PSRAM_NOSAVE +0 ALIGN 64 FIXED{ * (.UI_PSRAM_REGION*) * (.RES_PSRAM_REGION*) * (.BMPFONT_PSRAM_REGION*) * (.font.bss.cache*) * (.tile.bss.cache*) } ER_RAM_END (PSRAM_ADDR+PSRAM_SIZE) EMPTY 0 { } } LR3 SHARE_RAM_ADDR SHARE_RAM_SIZE { ; load region 3 ER_SHARE_RAM_BSS +0 ALIGN 4 FIXED { * (.DSP_SHARE_RAM*) } } LR4 RAM_ADDR RAM_SIZE { ; load region 4 ER_SRAM_BSS +0 ALIGN 4 { } ER_SRAM_NOINIT +0 ALIGN 0x200 FIXED{ #ifdef CONFIG_IRQ_VECTOR_IN_SRAM * (.srm_irq_vector*, +FIRST) #endif *(.interrupt.noinit.stack*) *(.main.noinit.stack*) *(.uisrv.noinit.stack*) *(.lvgl.noinit.gpu*) *(.spinand.bss.BLK_ARRAY*) *(.spinand.bss.PAGE_CACHE_BUF*) *(.system.bss.sdfs_cache*) *(.diskio.cache.pool*) *(.jpeg.bss.temp_buffer*) *(.ram.noinit*) *(.decompress.bss.cache*) *(.lvgl.noinit.vdb*) *(.ram.noinit.stack*) *(.audio.bss.ouput_pcm*) *(.audio.bss.input_pcm*) *(.act_s2_not_save_mem*) } ER_SRAM_SLEEP_SHUTDOWN +0 ALIGN 0x200 FIXED{ * (.sram.noinit.sufacebuffer*) } ER_SIM_SRAM_NOINIT +0 ALIGN 4 { * (.sram.noinit.actlog*) } ER_SRAM_END (RAM_ADDR+RAM_SIZE) EMPTY 0 { } }