我是靠谱客的博主 威武奇异果,最近开发中收集的这篇文章主要介绍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

 

最后

以上就是威武奇异果为你收集整理的GNU的链接器描述(Linker Script,LD)的全部内容,希望文章能够帮你解决GNU的链接器描述(Linker Script,LD)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部