概述
1、链接器是将一个或多个由编译器生产的目标文件(.o)外加库链接到一起生成一个可执行文件(.elf)的程序。
2、对于嵌入式系统而言,通常有多种存储设备.
RAM:易丢失存储,允许代码执行或数据存储
ROM:非易丢失存储,允许代码执行和只读数据访问
ROM2:非易丢失存储,允许只读数据访问,不允许代码执行。
3、源代码一般包括四个部分:
.text:程序代码
.rodata:只读数据
.data:初始化的读写数据
.bss:未初始化的读写数据
4、基本的链接器描述如下:(程序代码放在ROM中,只读数据放在ROM2中,读写数据放在RAM中)
MEMORY
{
ROM : ORIGIN = 0, LENGTH = 2M
ROM2 : ORIGIN = 0x10000000, LENGTH = 1M
RAM : ORIGIN = 0x20000000, LENGTH = 1M
}
ENTRY(_vector_table)
SECTIONS
{
.text :
{
*(.text)
} > ROM
.rodata :
{
*(.rodata)
rodata_end = .;
} > ROM2
.data : AT (rodata_end)
{
data_start = .;
*(.data)
} > RAM
data_size = SIZEOF(.data);
data_load_start = LOADADDR(.data);
.bss :
{
*(.bss)
} > RAM
_end = .;
}
在系统初始化期间需将ROM2的读写数据复制到RAM中
void copy_data(void)
{
if ( data_start != data_load_start )
{
memcpy(data_start, data_load_start, data_size);
}
}
参考文件GNU Linker
最后
以上就是威武奇异果为你收集整理的GNU的链接器描述(Linker Script,LD)的全部内容,希望文章能够帮你解决GNU的链接器描述(Linker Script,LD)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复