市场上到处都有ARM处理器。有许多类型的ARM7,ARM9,Cortex-M,Cortex-R和Cortex-A。今天,我们将学习ARM代码编译和链接的工作流程,以及过程中所需的相关概念。信息。编译过程编译过程是编译源代码以生成目标代码的过程。使用ARM compile命令,可以将源代码编译为ELF格式的目标文件。除了用于选择相应编译选项的编译命令外,源代码中的编译指示和特殊关键字还将对编译过程/结果产生一定的影响。 Makefile文件Makefile与脚本文件相似。该文件用于定义编译过程。它包含需要编译的文件,文件的顺序,要编译的宏定义,等等。可以将其视为完整编译所需的信息和过程的集合。 2. ELF格式文件ELF文件:(可执行和可链接格式)ELF文件包含编译的二进制代码和其他链接信息。 ELF格式提供了对应的代码/数据,对应的已编译地址信息,文件信息和其他内容。链接过程链接是将编译生成的目标文件和链接库处理为相应的ELF格式的图像文件(图像),最终文件可以写入嵌入式系统的ROM / FLASH中。图像文件包含:分组信息和定位信息,即输出段/域和地址定位信息。链接器还可以生成相应的域相关符号,以指示有关加载时间地址,运行时地址,加载时间长度限制和运行时长度限制的信息。同时,链接器还具有优化的功能,可以删除不必要的代码,段域等。1.图像文件的组成图像文件包含一个或多个字段。一个字段包含一个或多个输出节;一个输出节包含一个或多个输入节;输入部分包含目标文件的代码和数据。输入部分的内容:代码,初始化数据,未初始化数据和初始化0存储区。输出部分和域包括:RO,RW和ZI域。 2.映像文件的地址映射是加载时的地址与运行时的地址之间的差:加载时的地址是运行前的地址,只需了解FLASH中的固定存储就是加载时的地址,如果在运行时将代码加载到RAM中,则新地址为运行时地址;当程序在FLASH中运行时,加载时间地址和运行时地址相同。当地址映射很复杂时,可以通过分散配置文件进行设置。 3.初始入口点和普通入口点初始入口点:运行时的入口点,初始入口点必须位于映像文件的运行时入口点,并且其加载时间地址与运行时地址相同(称为固定域)。映像文件的初始入口点可以通过-entry指定。通用入口点:在程序中使用ENTRY伪操作定义,通常是中断服务程序的入口点。 4.分散文件中包含的信息是加载时域描述,运行时域描述,输入段描述,输入段选择器;加载时域包括:名称,起始地址,属性,最大大小和运行时域;运行时这些字段包括:名称,起始地址,属性,最大大小和一组输入节;输入节选择器描述了输入节名称或属性的匹配方法。输入节属性:RO-CODE / CODE,RO_DATA / CONST,RO / TEXT(包括前两项),RW_DATARW / DATA(RW_CODE + RW_DATA),BSS,ZI; FIRSTLAST指定运行时域的开始和结束,.ANY可以根据实际情况安排在适当的运行时域中。您可以使用FIXED属性将域放在ROM中的固定位置,并且加载时域和固定时域相同。扩展知识1.程序断点断点可以分为:软件断点和硬件断点。可以通过在相应的地址中插入相应的指令来实现软件断点,而硬件断点必须在相应的硬件支持下实现。 2.链接库的概念链接库分为:静态链接库和动态链接库,动态链接库分为加载时动态链接库和运行时动态链接库。区别:生成时包括使用静态链接库在加载时动态链接库的目标代码中,当程序加载到内存中时,