当前位置:首页 > > strongerHuang
[导读]关注、星标公众号,不错过精彩内容 素材来源:网络 编辑整理:strongerHuang ARM处理器在市面上到处都是ARM7、ARM9、Cortex-M、Cortex-R、Cortex-A包含的种类繁多,今天我们就来了解一下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.JTAG
JTAG仿真器也称为JTAG调试器,是通过ARM芯片的JTAG边界扫描口进行调试的设备。JTAG仿真器比较便宜,连接比较方便,通过现有的JTAG边界扫描口与 ARM CPU 核通信,属于完全非插入式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何端口,而这些是驻留监控软件所必需的。

另外,由于JTAG调试的目标程序是在目标板上执行,仿真更接近于目标硬件,因此,许多接口问题,如高频操作限制、AC和DC参数不匹配,电线长度的限制等被最小化了。使用集成开发环境配合JTAG仿真器进行开发是目前采用最多的一种调试方式。

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

推荐阅读:
#include使用“”和<>的区别?
手把手教你用铁丝做Arduino UNO板
为什么老编辑器Vim这么“难用”,却很受欢迎?

关注 微信公众号『strongerHuang』,后台回复“1024”查看更多内容,回复“加群”按规则加入技术交流群。


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

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

DBS Group 首席执行官 Tan Su Shan 蝉联榜首 科技行业共有 16 位女性入选 2026 年榜单,成为上榜人数最多的行业 榜单涵盖 14 个市场的 100 位女性,其中 24 位首次上榜...

关键字: AN GROUP ARM COM

智能体AI让CPU重新回到数据中心的核心位置,这一点产业已经形成共识。更值得关注的是:恰恰在这个转折点上,Arm在加速计算市场历史性地超越了x86。原因其实也不神秘。x86的架构是为通用计算打磨的,而AI智能体要的是编排...

关键字: ARM Neoverse AGI CPU 数据中心 AI X86

智能体需要持续感知、记忆、推理和行动,图形渲染需要在不增加功耗的前提下逼近桌面级画质,两个变化同时指向同一个问题:移动 AI 的计算平台应该具备什么,谁能提供一套被市场广泛采纳的标准答案,谁就掌握下一代移动体验的定义权。...

关键字: AGI ARM AI 原生 CPU 智能体 GPU 神经图形

·Arm 全面设计生态项目扩展至物理 AI 领域,汇聚覆盖整个技术栈的专业能力,降低集成复杂性并加速自主智能系统创新。 ·机器人能力分级框架是生态系统首批倡议之一,致力于构建机器人领域的通用语言,为定义和推动机器人系统...

关键字: ARM 物理 AI 机器人 具身智能

·Arm CSS for Mobile 2 是全新的 AI 原生计算平台,专为智能体 AI 和新一代电影级移动图形体验的系统级需求而打造。 ·全新 Arm Mali G2-Ultra NX 是业界最先进的移动 GPU,...

关键字: ARM AI 原生计算平台 智能体 AI 移动图形创新

从平台创新到生态协同,最新进展正推动 AI 计算持续演进,从云延伸至边缘,并迈向物理世界。

关键字: 智能体时代 ARM AGI Agent CPU

·Arm NeoverseCSSN4 是 Arm 迄今为止可配置性最高的 CSS,可帮助合作伙伴以最快速度完成从 CSS 到芯片产品的落地。 ·Arm AGI CPU 在AI生态系统中的发展势头持续增强,云服务提供商、...

关键字: ARM AGI CPU Neoverse AI基础设施

革命性设计将 Arm 原生应用引入 IBM 旗舰级主机和服务器,为企业计算提供更丰富的软件选择 北京2026年8月26日 /美通社/ -- 近日,在年度 Hot Chips...

关键字: IBM Linux 处理器 ARM

在ARM架构的嵌入式与服务器开发场景中,程序异常崩溃、随机跑飞是长期困扰开发者的核心痛点。传统调试模式下,开发者只能依赖仿真器单步复现、手动排查寄存器值,一旦程序部署到无调试器的生产环境,这类问题几乎无从定位。而Back...

关键字: ARM 寄存器

传统PLC硬件专机价格高、扩展性受限,而ARM+Linux平台成本低、生态丰富。将PLC的梯形图/ST逻辑解释为软件运行时,在ARM Linux上执行,既能保留PLC的可靠性思维,又能利用Linux的网络、存储和图形能力...

关键字: 软PLC 嵌入式Linux ARM
关闭