Files
AC707N/loader/lcflash_ota_update/cpu/br35/output/ram_ld.c
T
2025-12-03 11:12:34 +08:00

174 lines
4.6 KiB
C

// *INDENT-OFF*
/*
#-------------------------------------------------------+
# br35 RAM mapping |
#-------------------------------------------0x137000 ---| _RAM_LIMIT_H
# |
# |
# ota-loader (194K:0x30A00) |
# |
# |
#-------------------------------------------0x106600 ---|
# |
# uboot (16K:0x4000) |
# |
#-------------------------------------------0x102600 ---|
# |
# | ---------> user_api.bin end (0x10054c + 32K)
#-------------------------------------------0x10054c ---| ---------> user_api.bin start(0x10054c)
# Maskrom_export_RAM (0x34c) |
#-------------------------------------------0x100200 ---|
# |
#-------------------------------------------0x100000 ---| _RAM_LIMIT_L
*/
#include "maskrom_stubs.ld"
//from mask export
ISR_BASE = _IRQ_MEM_ADDR;
UPDATA_SIZE = 0x200;
UPDATE_BEG = _RAM_LIMIT_H - UPDATA_SIZE;
UPDATA_BREDR_BASE_BEG = 0x137000 - 0x1000;
EX_CODE_BEGIN = 0x10054c; /*用户自定义UI代码的地址,根据不同CPU来配置*/
EX_CODE_SIZE = 0xc2b4;
#if defined(DEV_UPDATE_MINI) && DEV_UPDATE_MINI
SEC_OTA_CODE_BEGIN = 0x106600; /*第二级loader RAM地址*/
OTA_CODE_BEGIN = 0x137000 - 0x6000; /*注意不要和uboot重叠*/
/* OTA_CODE_BEGIN = 0x175000; #<{(|uart 测试盒串口升级开debug时修改|)}># */
OTA_CODE_SIZE = 24K;
#else
OTA_CODE_BEGIN = EX_CODE_BEGIN + EX_CODE_SIZE; /*注意不要和uboot重叠*/
OTA_CODE_SIZE = UPDATA_BREDR_BASE_BEG - OTA_CODE_BEGIN;
#endif
// EX_CODE_BEGIN = 0x104000; /*用户自定义UI代码的地址,根据不同CPU来配置*/
// EX_CODE_SIZE = 460K;
MEMORY
{
text_ram : ORIGIN = OTA_CODE_BEGIN, LENGTH = OTA_CODE_SIZE
#if !defined(DEV_UPDATE_MINI) || (!DEV_UPDATE_MINI)
bt_ram : ORIGIN = UPDATA_BREDR_BASE_BEG, LENGTH = 0x1000
/* ex_code : ORIGIN = EX_CODE_BEGIN, LENGTH = EX_CODE_SIZE */
reserved : ORIGIN = 0x0, LENGTH = 0x100
version_ram :ORIGIN = 0x8000000, LENGTH = 128
#endif
}
ENTRY(_start);
EXTERN(
lib_ota_loader_version
#if (EX_FLASH_UPDATE_SUPPORT_EN)
device_table
#endif
);
SECTIONS
{
. = ORIGIN(text_ram);
.text :
{
*(.start*)
*(.text*)
*(.*.text)
*(.data*)
*(.*.data)
*(.rodata*)
*(.*.text.const)
#if !defined(DEV_UPDATE_MINI) || (!DEV_UPDATE_MINI)
*(.bredr_irq_code)
*(.frame_irq_code)
*(.classic_irq_code)
*(.classic_irq_const)
*(.volatile_ram_code)
#endif
. = ALIGN(32);
#if (EX_FLASH_UPDATE_SUPPORT_EN)
_device_node_begin = .;
PROVIDE(device_node_begin = .);
*(.device)
_device_node_end = .;
PROVIDE(device_node_end = .);
. = ALIGN(32);
#endif
} > text_ram
.bss ALIGN(32) (NOLOAD):
{
_cpu0_sstack_begin = .;
*(.stack*)
_cpu0_sstack_end = .;
_cpu0_ustack_begin = .;
*(.ustack*)
_cpu0_ustack_end = .;
*(.bss)
*(.*.data.bss)
*(.usb_ep0)
*(.usb_config_var)
*(.update_buf)
*(.bredr_rxtx_bulk)
. = ALIGN(32);
} > text_ram
.bss_noinit ALIGN(32) (NOLOAD):
{
*(.bss_noinit)
. = ALIGN(32);
} > text_ram
#if !defined(DEV_UPDATE_MINI) || (!DEV_UPDATE_MINI)
. = ORIGIN(bt_ram);
.bt_bss (NOLOAD) :SUBALIGN(4)
{
*(.bd_base)
*(.comm_rf_para)
*(.bd_base1)
} > bt_ram
// . = ORIGIN(ex_code);
// .ex_code (NOLOAD) :SUBALIGN(4)
// {
// . = LENGTH(ex_code);
// } > ex_code
. = ORIGIN(reserved);
.ver_tag ALIGN(4):
{
KEEP(*(.version_tag1))
KEEP(*(.version_tag2))
KEEP(*(.version_tag3))
. = ALIGN(4);
} > reserved
. = ORIGIN(version_ram);
.version ALIGN(32):
{
*(.ota_loader.version)
. = ALIGN(32);
} > version_ram
bt_ram_begin = ADDR(.bt_bss);
bt_ram_size = SIZEOF(.bt_bss);
#endif
}
//================== Section Info Export ====================//
text_begin = ADDR(.text);
text_size = SIZEOF(.text);
text_end = text_begin + text_size;
bss_begin = ADDR(.bss);
bss_size = SIZEOF(.bss);