历史上的今天
今天是:2024年11月19日(星期二)
2018年11月19日 | 带你梳理下ARM代码编译链接的工作流程
2018-11-19 来源:eefocus
梳理下下ARM代码编译链接的工作流程,以及过程中需要的相关概念信息,不具体关注编译链接的具体命令。
一、编译过程
编译过程就是把源代码编译生成目标代码的过程。而采用ARM编译命令,可以将源代码编译成带有ELF格式的目标文件。除了编译命令可以选择相应的编译选项之外,源代码中的pragmas以及特别的关键字也会对编译过程/结果产生一定影响。
1、makefile文件
Makefiile类似一个脚本文件,这个文件用来定义了编译过程,其中包含了需要编译的文件、文件顺序,编译的宏定义等等,可以看做完整编译需要的信息及过程的集合。
2、ELF格式文件
ELF文件:(Executable and Linkable Format) ELF文件出了包含编译出的二进制代码,还包含其他链接需要信息,ELF格式提供了相应代码/数据对应编译出的地址信息、文件信息等内容。
二、链接过程
链接就是把编译生成的目标文件和链接库处理成为相应ELF格式的映像文件(image),最终的文件可以写入嵌入式系统的ROM/FLASH中。映像文件中包含:分组信息和定位信息,亦即输出段/域及地址定位信息。链接器同时可以生成相应与域有关的符号来指示关于加载时地址、运行时地址、加载时长度限制、运行时长度限制等信息。同时链接器也具有优化的功能,删除不必要的代码、段域等。
1、映像文件的组成
一个映像文件包含一个或多个域;一个域包含一个或多个输出段;一个输出段包含一个或多个输入段;输入段中包含了目标文件的代码和数据。
输入段的内容:代码、已初始化的数据、未初始化的数据、初始化0的存储区域。
输出段和域中包含:RO、RW、ZI域。
2、映像文件的地址映射
加载时地址和运行时地址的区别:加载时地址是运行前的地址,简单理解在FLASH中固定存储即为加载时地址,而若代码载入RAM运行时,新的地址为运行时地址;而程序在FLASH中运行,加载时地址和运行时地址就一致了。当地址映射复杂时,可以通过scatter配置文件进行设置。
3、初始入口点和普通入口点
初始入口点:运行时的入口点,初始入口点必须位于映像文件运行时入口点,而它的加载时地址和运行时地址一致(称为固定域)。可以通过-entry指定映像文件的初始入口点。
普通入口点:用ENTRY伪操作定义在程序中,一般为中断服务程序的入口点。
4、scatter文件中包含的信息
加载时域描述、运行时域描述、输入段描述、输入段选择符;加载时域包括:名称、起始地址、属性、最大尺寸和一个运行时域;运行时域包括:名称、起始地址、属性、最大尺寸和一个输入段集合;输入段选择符描述了输入段名称或属性的匹配方式。
输入段属性:RO-CODE/CODE、RO_DATA/CONST、RO/TEXT包括前两项、RW_DATA、RW/DATA(RW_CODE+RW_DATA)、BSS、ZI;FIRST\LAST来指定运行时域的开头结尾,.ANY可以根据实际情况安排到合适的运行时域。
可以使用FIXED属性将域放置在ROM中固定位置,加载时域和固定时域即相同。
小知识:
1、程序断点
断点可以分为:软件断点和硬件断点,软件断点可以相应地址插入相应的指令实现,而硬件断点必须要需要相应硬件支持才能实现。
2、链接库的概念
链接库分为:静态链接库和动态链接库,而动态链接库又分为加载时动态链接库和运行时动态链接库;其差别:静态链接库的使用内容包含在生成的目标代码中,加载时动态链接库是程序载入内存时知道相应的动态链接库调用内容同时调入内存中,而运行时动态链接库只有在运行到需要调用时才调入使用。
3、JTAG
Joint Test Action Group?
上一篇:ARM处理器工作模式及寄存器结构
下一篇:STM32之启动文件详解
史海拾趣
|
这里面主要介绍了脑电图的基本知识,还有各种脑电图波形,正常脑电图的诊断标准, 异常脑电图的诊断标准,一些专有名词等。有兴趣的朋友可以下来看看!! [ 本帖最后由 charlie1982 于 2009-12-31 15:34 编辑 ]… 查看全部问答> |
|
放假啦,回到家了。上学期遗留了一些问题。 上学期做了一个基于mega8的简易循迹小车,循黑线行驶。车模是淘宝里购买的,控制电路是自己做的。做出来的效果很不好,虽然能沿黑线行驶,但是摇头晃脑的。 大概原理: 采用4对红外对管识别黑线,得到 ...… 查看全部问答> |
|
变压器是常用的一种器件,本软件可以帮助您快速的计算出变压器的各项参数。同时还附带大量的资料以便您在设计变压器时查询。 与同类软件相比具有许多优点: 1、支持初级绕组多种输入电压。 2、支持次级绕组多绕组、多种电压输出。 3、支持 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:20 编辑 一个bmp图片由3大部分组成:BITMAPFILEHEADER结构体,BITMAPINFO结构体,DIB数据区。 Private Type BITMAPFILEHEADER // 14 bytes bfType As Integer bfSize As Long bfReserved1 As I ...… 查看全部问答> |
|
Hi all 由于项目的需求,我想把telnet默认的shell替换成我们自己写的shell。 一般来说我们使用telnet连接目标板的时候,都会直接连接上 并出现shell的提示符-> 而我们现在需要在连接上之后出现: login: root password: ****** myshell-> my ...… 查看全部问答> |
|
我是照书上的例子定制系统的,以前能顺利编译过,后来重装了一次pb4.2,build就有 问题了,重装了几次还是不行,错误提示有: !!!!! Error building (K:\\WINCE420\\platform\\Emulator) Sysgening platform K:\\WINCE420\\platform\\Emulator !!!!! ...… 查看全部问答> |
|
招聘职位:渠道拓展 职位描述 工作职责1、负责院校渠道的拓展和建设,洽谈院校合作业务,最终实现教育产品(课程)的销售;2、维护渠道关系并根据情况进行需求分析达成更多合作计划;3、调查分析渠道市场状况,配合公司制定相应的渠道销售策略和 ...… 查看全部问答> |




