美文网首页
嵌入式软件开发中的链接文件与crt0.s

嵌入式软件开发中的链接文件与crt0.s

作者: 阿甘数量化 | 来源:发表于2016-05-22 17:03 被阅读735次

嵌入式软件开发在源码project中打开文件视图树,会发现除了源码文件、makefile外,往往还有两类文件:链接文件(如.ld、.lds等)和crt*.s(常见的是crt0.s,在arch目录下)。

1 链接文件

1.1 基础知识

链接过程就是将源代码编译后的多个目标文件(.o,.obj)合并成一个二进制文件(*.elf)的过程,这个文件一般都会包括text、data和bss等section:

  • text:代码段,就是cpu要执行的指令
  • data:数据段,程序中使用的数据变量,全局变量、静态变量等
  • bss:未初始化段,记录了程序里要使用但未分配空间的变量
      可以这么认为,data段和bss段相比data段既有名字又有空间,bss则只给了名字,空间没分。section有两个属性:
  • 可加载(loadable):目标文件里包含的text段和data段,装载器只要把内容装载到相应的地址就能执行;
  • 可分配(allocatable):意味着需要给相应的bss段分配空间
      对于目标文件都有两个地址:
  • LMA:Load Memory Address,加载输出文件时section所在的地址
  • VMA:Virtual Memory Address,执行输出文件时section所在的地址
      一般而言,某section的VMA==LMA。但在嵌入式系统中,经常存在加载地址和执行地址不同的情况:比如将输出文件加载到开发板的flash中(由LMA指定), 而在运行时将位于flash中的输出文件复制到SDRAM中(由VMA指定)。
      因此,linker(链接器)的作用就是:把LMA写到输出的二进制目标文件中,扫描扫描解析输入文件中的符号转换到相应的运行地址上(VMA),而装载器作用是:读取linker输出的二进制文件中相应section信息,装载到LMA地址处,如果发现LMA与VMA不同,就要把data、text等从刚才的LMA处搬到VMA处,这样程序运行的时候才能在VMA处找到相应的变量,程序得以正确运行。

1.2 链接文件常见项

  • SECTIONS命令:告诉ld如何把输入文件的sections映射到输出文件的各个section: 如何将输入section合为输出section; 如何把输出section放入程序地址空间(VMA)和进程地址空间(LMA)
  • ENTRY(SYMBOL) : 将符号SYMBOL的值设置成入口地址,进程执行的第一条用户空间的指令在进程地址空间的地址
  • MEMORY命令:在默认情形下, 连接器可以为section分配任意位置的存储区域,需指定ORIGIN和LENGTH,一般为ram地址

2 crt0.s

首先这是一个c运行库源代码文件,汇编指令形式,需要编译器一块编译。在其中实现cpu初始化、把程序从flash搬移到ram、启动判断等。如果要实现固件更新等操作就一定会用到这个文件了。手边没现成的,先写到这里了就。

相关文章

  • 嵌入式软件开发中的链接文件与crt0.s

    嵌入式软件开发在源码project中打开文件视图树,会发现除了源码文件、makefile外,往往还有两类文件:链接...

  • 嵌入式软件开发知识图谱

    我整理的嵌入式软件开发知识图谱。

  • 硬链接和软链接

    硬链接(hard link):ln 源文件名 链接名 文件A是文件B的硬链接,则A的目录项中的inode节点号与B...

  • 嵌入式软件开发概述

    从事嵌入式软件开发相关工作至今有3年多了吧,总结一下自己理解的嵌入式软件开发吧,有些方面因为做的不多总结的也许不全...

  • 初探-嵌入式系统介绍

    嵌入式系统介绍 对于嵌入式初学者或者是专门做嵌入式软件开发工程师职位的猎头来说,刚入手的时候可能会对嵌入式一头雾水...

  • 21天(js高程)-第2天

    (续···) 与解析嵌入式JavaScript 代码一样,在解析外部JavaScript文件(包括下载文件)...

  • 11月1日

    今天继续学习shell指令 主要是链接文件创建 与文件的压缩与解压 理解什么是硬链接与软链接 重点是压缩文件与解压...

  • 嵌入式

    嵌入式Linux操作系统 ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1) 掌...

  • 【必学干货】别忽视!嵌入式代码可能存在的致命漏洞!

    随着互联网的发展,嵌入式设备正分布在一个充满可以被攻击者利用的源代码级安全漏洞的环境中。因此,嵌入式软件开发人员应...

  • 文件读取、删除与软链接、硬链接的关系

    自己粗略画的一张帮助自己理解Linux文件系统中软、硬链接的概念与差异以及删除文件与链接的关系的图。 打个形象点...

网友评论

      本文标题:嵌入式软件开发中的链接文件与crt0.s

      本文链接:https://www.haomeiwen.com/subject/ghpgrttx.html