永州网,内容丰富有趣,生活中的好帮手!
永州网 > 推荐 > 正文

深入探讨ARM编译器的编译和链接操作流程

时间:2024-03-17 19:29:03

相关推荐

深入探讨ARM编译器的编译和链接操作流程

ARM编译器执行编译和链接操作主要分为两个阶段。首先,编译器会将源代码翻译成汇编语言,并对其进行优化,生成目标文件。然后,链接器将目标文件和库文件结合起来,解决符号引用,生成最终的可执行文件。在这个过程中,编译器通过词法分析、语法分析和语义分析等步骤,将高级语言转换成底层机器指令,同时进行优化以提高程序性能。链接器则负责连接各个模块,解决符号重定位,生成最终的可执行文件或库文件。 ARM编译器的执行过程遵循这一基本模式,从源代码到可执行文件的转换,是通过编译和链接的有机配合完成的。

关注、星标公众,不错过精彩内容

素材来源:网络

编辑整理:strongerHuang

ARM处理器在市面上到处都是ARM7、ARM9、Cortex-M、Cortex-R、Cortex-A包含的种类繁多,今天我们就来了解一下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_DATARW/DATA(RW_CODE+RW_DATA)、BSS、ZI;FIRST\LAST来指定运行时域的开头结尾,.ANY可以根据实际情况安排到合适的运行时域。可以使用FIXED属性将域放置在ROM中固定位置,加载时域和固定时域即相同。

三、拓展知识1.程序断点断点可以分为:软件断点和硬件断点,软件断点可以相应地址插入相应的指令实现,而硬件断点必须要需要相应硬件支持才能实现。2.链接库的概念链接库分为:静态链接库和动态链接库,而动态链接库又分为加载时动态链接库和运行时动态链接库;其差别:静态链接库的使用内容包含在生成的目标代码中,加载时动态链接库是程序载入内存时知道相应的动态链接库调用内容同时调入内存中,而运行时动态链接库只有在运行到需要调用时才调入使用。3.JTAGJTAG仿真器也称为JTAG调试器,是通过ARM芯片的JTAG边界扫描口进行调试的设备。JTAG仿真器比较便宜,连接比较方便,通过现有的JTAG边界扫描口与 ARM CPU 核通信,属于完全非插入式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何端口,而这些是驻留监控软件所必需的。另外,由于JTAG调试的目标程序是在目标板上执行,仿真更接近于目标硬件,因此,许多接口问题,如高频操作限制、AC和DC参数不匹配,电线长度的限制等被最小化了。使用集成开发环境配合JTAG仿真器进行开发是目前采用最多的一种调试方式。

免责声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

推荐阅读:#include使用“”和<>的区别?手把手教你用铁丝做Arduino UNO板为什么老编辑器Vim这么“难用”,却很受欢迎?关注微信公众号『strongerHuang』,后台回复“1024”查看更多内容,回复“加群”按规则加入技术交流群。

长按前往图中包含的公众号关注

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
显示评论内容(1)
  1. Amnesiac2024-03-24 11:29Amnesiac[贵州省网友]203.95.160.192
    对ARM编译器的编译和链接操作流程真的很感兴趣,希望能够找到更深入的资料去学习。
    顶3踩0
相关阅读
探索数控offset的本质:解密这个关键是什么?

探索数控offset的本质:解密这个关键是什么?

数控offset通常包括长度offset、半径offset和工具偏移等功能,通过对这些参数的调整,可以实现对零件加工过程中位置和尺寸的微调

2024-02-01

安装程序3.1:Windows Installer3+1

安装程序3.1:Windows Installer3+1

除了代码加密,Python 社区内的很多观点也认为,加密是徒劳的,任何加密都有可能被破解,有一个良好的法律约束条款可能是更好的选择

2024-01-24

如何查询网络贷款与银行卡网银

如何查询网络贷款与银行卡网银

然而,要查询银行卡的网络贷款信息并非易事

2024-02-28

嵌入式系统在教学中的应用:一次关于基于嵌入式系统的论文的深入探讨

嵌入式系统在教学中的应用:一次关于基于嵌入式系统的论文的深入探讨

1、嵌入式系统的概述1从技术的角度定义:嵌入式系统是以应用为中心,基础是计算机,能够适应应用系统对功能、可靠性、及功耗严格要求的专用计算机

2024-01-21

微信上能用钉钉开会了 链接分享给微信好友入会

微信上能用钉钉开会了 链接分享给微信好友入会

这一更新让微信用户也能无缝接入钉钉会议,无需额外下载和打开钉钉客户端,直接在微信内就能轻松加入钉钉会议,提高了打工人的工作效率

2024-03-04