GNU的链接器描述(Linker Script,LD)

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值