目录

  • 为什么要用到lds链接脚本?
  • lds文件语法结构
  • lds文件实例解析

好的朋友已经做过好多年的arm开发,却对底层的编译链接逻辑很少接触,主要原因在于现在大多数应用层的开发不需要从裸板开始,工程师只需要在应用层面开发即可,但是,如果牵涉到较多的硬件改造或系统重构,就需要对整个系统底层进行调整,lds文件的修改将在所难免。

为什么要用到lds链接脚本?

首先lds链接脚本的作用就是将许多源文件编译后生成的目标文件*.o,在各个段链接在一起,通过此文件,告诉链接器这些各个段存放的地址先后顺序,它定义了整个程序编译之后的连接过程,决定了一个可执行程序的各个段的存储位置。

lds文件语法结构

lds文件的的语法定义,详见GNU官方网站,文件类型为文本文件,

主要伪代码有:
OUTPUT_FORMAT :指定输出文件格式
OUTPUT_ARCH:指定输出可执行文件运行处理器平台
ENTRY:指定程序入口位置
ALIGN; 代码对齐方式
SENCTIONS:定义段,为主要单元,sections的形式为:

SECTIONS {

secname start BLOCK(align) (NOLOAD) : AT ( ldadr )
{ contents } >region :phdr =fill

}

其中secname和contents是必须的,其他都是可选的。说明如下:

1、secname:段名
2、contents:段内容,可以是整个目标文件,也可以是目标文件中的某些段(代码段、数据段等)
3、start:本段连接(运行)的地址,如果没有使用AT(ldadr),本段存储的地址也是start。
4、AT(ldadr):本段存储(加载)的地址。

lds文件实例解析

OUTPUT_FORMAT(“elf32-littlearm”, “elf32-littlearm”, “elf32-littlearm”)
;指定输出可执行文件是elf格式,32位ARM指令,小端
OUTPUT_ARCH(arm);指定输出可执行文件的平台为ARM处理器平台
ENTRY(_start);指定输出可执行文件的起始代码段为_start.

MEMORY
{
RAM (xrw) : ORIGIN = 0x00000000, LENGTH = 8M
SRAM (xrw) : ORIGIN = 0x30000000, LENGTH = 16K
}
SECTIONS
{
. = 0x00000000; //指定当前的链接地址=0x00000000

. = ALIGN(4);; 代码以4字节对齐
.text :
{./bsp/boot.o (.text*);//添加第一个目标文件./bsp/src/*.o(.text*);      //添加第二个目标文件./bsp/lib/*.o(.text*); //添加第三个目标文件             ./freertos/*.o(.text*); ./freertos/portable/hd996/*.o(.text*);      }. = ALIGN(4);
.rodata : ;指定只读数据段
{*(.rodata*);*(.rel*);
}. = ALIGN(4);
.data : ;指定读/写数据段
{ *(.data*); *(.fastcode);*(.fastcode.*);   }. = ALIGN(4);
__bss_start = .;//把__bss_start赋值为当前地址位置,即bss段的开始位置
.bss :
{*(.bss*);*(COMMON);//指定bss段,里面存放未被使用的变量
}
_end = .; //把_end赋值为当前地址位置,即bss段的结束位置

}

嵌入式C语言编程中经验教训总结(二)LDS链接文件解析相关推荐

  1. 【转】 嵌入式C语言编程中Inline函数的应用

    源地址:https://blog.csdn.net/vigour1000/article/details/9622037 有一段儿时间没写写经验笔记了,哎,也是自己这一段时间以来(其实最近一直是这个状 ...

  2. c语言中错误executing,C语言编程中常见问题解读.doc

    C语言编程中常见问题解读 为什么vc6打开的文件却不能编译1 为什么一个vc6工程中有两个main函数不能编译成功?我想写两个程序怎么办?2 为什么v6不能编译程序,生成信息说compile和link ...

  3. c语言在数学方面的应用编程,浅谈数学在C语言编程中的应用.doc

    浅谈数学在C语言编程中的应用 浅谈数学在C语言编程中的应用 [][]C语言对学习者的数学基础要求较高对一部分学生来说学好C语言有一定的困难.本文就本专业知识和自身对C语言的学习经验对数学在C语言编程中 ...

  4. 函数式编程中的战斗机(二) --运用elm语言MUV设计模式做一个简单的应用实例

    @函数式编程中的战斗机(二) -运用elm语言MUV设计模式做一个简单的应用实例 1 elm语言设计模式的特点 1.1 面向对象设计模式的特点 每种编程语言都有其独特的语法和优缺点,从而导致与众不同的 ...

  5. 《C语言解惑》—— 第一篇 C语言编程中的对与错

    本节书摘来自华章出版社<C语言解惑>一 书中的第1章,第1.1节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 C语言编程中的对 ...

  6. 请描述定时器初值的计算方式_单片机C语言编程中定时器初值计算的两种方法...

    单片机C语言编程中,定时器的初值对于初学者真的是比较不好计算,因此我总结了以下几种方法. 第1种方法: #define FOSC 11059200L //晶振的频率 #define TIMS (655 ...

  7. 关于C语言编程中include的用法

    关于C语言编程中include的用法 1 iostream与iostream.h的区别: #include <iostream.h> // 这个就是1998年标准化以后的标准头文件 #in ...

  8. c语言编译面板上总有个0,C语言编程中常见问题.doc

    C语言编程中常见问题 为什么vc6打开的文件却不能编译1 为什么一个vc6工程中有两个main函数不能编译成功?我想写两个程序怎么办?2 为什么v6不能编译程序,生成信息说compile和link都正 ...

  9. c语言中回显,C语言编程中实现输入密码回显星号

    C语言编程中实现输入密码回显星号 众所周知,一个良好的密码输入程序是在用户输入密码时不显示密码本身,只回显星号. 或者,在安全性要求更高的某些程序中,什么都不显示.那么,在C语言中如何实现它呢? ge ...

最新文章

  1. Google发布三大新品,Pixel手机价格直逼苹果
  2. 清华鲁继文团队提出DynamicViT:一种高效的动态稀疏化Token的ViT
  3. 【控制】《最优控制理论与系统》-胡寿松老师-第1章-导论
  4. 北京一公交车发生爆炸 疑为乘客携带药品起反应
  5. C# App.config学习
  6. 移位运算符 实现 二进制数的 高低位翻转(完整逻辑代码)
  7. github网页链接
  8. python写万年历_python万年历
  9. matlab condest,Matlab关于几个函数
  10. c字打头的语言英语单词,C字开头的励志的英文单词要C字开头的~例如Champion,Confidence,...-c英语开头名词-英语-柯拿拷同学...
  11. k8s学习笔记4--搭建dashboard
  12. floor()函数与round()函数
  13. 【Qt开发】QThread中的互斥、读写锁、信号量、条件变量
  14. MPDA:基于Domain Adaption的V2X协同感知(3D目标检测)
  15. Git生成密钥(ssh)
  16. excel表格末尾添加一行_这样输入Excel公式,也太快了吧......
  17. Ardupilot chibios IO固件,IO与FMU通信,固件下载(3)
  18. 何为全屋智能?华为用实力告诉你们:全屋智能是如此好用
  19. Boost ASIO proactor 浅析
  20. 尖叫吧!2015创新中国春季峰会 880元VIP门票免费送

热门文章

  1. JAVA开发离线语音识别
  2. 小学计算机教师教科研方面,小学信息技术教师先进事迹范文
  3. JavaScript自定义tirm方法
  4. 深入分析:代理游戏真的可以赚钱吗?
  5. Friends经典对白
  6. IT女孩特不烦恼---九月实习总结
  7. MySQL面试题和答案
  8. cmd怎么切换mysql目录_mysql 移除服务,并在cmd下切换目录
  9. 清华小学上册计算机教学案例,案例分析 清华小学 罗远琴
  10. html中div动态边框,[实践总结]纯css实现动态边框