1:定义某个section的属性
MEMORY
{
FUNC_ADDR (rwx): ORIGIN = 0x10000, LENGTH = 0x100
DATA_ADDR (rwx): ORIGIN = 0x20000, LENGTH = 0x100
DDR (rwx): ORIGIN = 0x20000000, LENGTH = 0x100000
}
2:定义func段,将文件file_a.c 、file_b.c、file_ c.c中的函数放到这个段
.func_text_section :
{
. = ALIGN(4);
*file_a.c.0 (.text*)
*file_b.c.0 (.text*)
*file_c.c.0 (.text*)
*.o (.func_text_section ) //使用attribute属性指向该段的函数
} > FUNC_ADDR AT > DDR
3:定义data段,将文件file_a.c 、file_b.c、file_ c.c中的数据放到这个段
.func_data_section :
{
= ALIGN(4);
*file_a.c.0 (.data* .rodata)
*file_b.c.0 (.data* .rodata)
*file_c.c.0 (..data* .rodata)
} > DATA_ADDR AT > DDR
注意需要初始化阶段对代码和数据进行重定向,从DDR的存储地址拷贝到实际的运行地址去。