工具链介绍
约定
我的博客
原文链接
注意: 除非另有指定,本文档假定:
- 以
ARM Cortex-M3处理器的小端模式 ARM EABI应用二进制接口GNU GCC工具链
工具链
一个完整的软件工具链包括如下程序: 将源代码转化为二进制机器码;将单独的汇编/编译的代码模块链接到一起;反汇编二进制代码;转换格式。
以汇编源码文件作为起始文件,.s 文件,经过汇编器汇编生成 .o 目标文件,目标文件与链接文件 .ld 文件进行链接,通过链接器生成可执行文件,并进一步生成 .bin 文件以及可反汇编的 .lst 文件。
一个典型的 GNU 汇编工具链包括上面的过程,以及下面的程序:
as作为汇编器,将高级编程语言转换为二进制机器码。它通常以.s作为输入,输出.o目标文件ld作为链接器,解析多个目标文件的外部符号引用并分配数据段,输出一个单个的可执行文件。它通常以.o目标文件以及.ld链接脚本作为输入,以.out可执行文件作为输出objcopy将.bin文件复制并转化为.bin文件objdump通常用来反汇编
以 C/C++ 作为源码
如果你希望写 C/C++ 文件或混合 汇编/C 代码,编译时,你需要编译器。GNU Compiler Collection (GCC) 包含所有的工具。C/C++ 编译器 (gcc/g++) 以 C/C++ 作为源码,以及预汇编的目标感i奥文件,以及预编译的二进制文件,以这些输入生成目标文件,输出可执行文件。
在这个过程中会用到如下的程序:
ar从文档中创建、调整、提取出实例nlmconv将目标代码转化为NLMnm从目标文件中列出符号ranlib从文档中生成一个内容索引readelf从ELF格式的目标文件中展示信息size展示目标或文档的段以及他们的大小strip忽略嵌入到目标文件中的符号
安装
开发新的硬件平台的软件,第一步是安装开发软件需要的工具链。包括确定安装汇编器、链接器、编译器、软件库、仿真器、程序以及其他目标架构支持的工具。在本例中,我们的目标是 ARM Cortex-M3 处理器,基于 ARMv7 架构。考虑到花费的代价以及可获取程度,我们这里使用 GNU GCC 编译链。GCC 是极受欢迎的开源工具链,可以用在诸如 Intel x86,ARM v4/5/6/7,TI MSP,Atmel AVR 等架构的设备上。因为大部分 GCC 工具是可以免费下载的,它们可以被任何人使用。注意: 当开发用的主机与目标架构不同时,会将工具链称为 交叉编译链 (即,如果你希望在基于 x86 的架构的 Linux 设备上开发 ARM 架构的软件,那么你需要这么一个交叉编译链)。
Unix 交叉编译器的名命传统可能会令人迷惑。如果你想要查找一个 ARM 编译器,那么你可能找到如下几个工具链: arm-none-linux-gnueabi,arm-none-eabi,arm-eabi,以及 arm-softfloat-linux-gnu。Unix 交叉编译器使用如下的名命方式: arch,[-vendor],[-os],-abi。其中:
arch为目标架构,在我们的示例情景下是ARMvendor为工具链提供者os为目标操作系统,如果有的话,用来决定链接以及系统调用应用的库 (比如:newlib,glibc,crt0等)abi指定使用应用程序二进制接口,确保不同的工具生成的二进制内容可以进行交互操作
下面的一些例子解释:
arm-none-eabi目标架构为ARM架构,没有提供者,目标不为操作系统(即,目标为裸机程序),并遵守ARM EABIarm-none-linux-gnueabi是可以安装到基于Debian的系统 (使用包管理工具apt,包名为gcc-arm-linux-gnueabi)。这个工具链目标为ARM架构,没有提供者,创建运行在Linux操作系统上的可执行程序,遵守GNU EABIarm-eabi安卓ARM编译器
没有 Linux Admin 权限
如果你没有访问 Linux 设备的管理员权限,或者你希望安装一个带有内置模拟器的套件,你可以下载预编译的二进制文件来安装 ARM GCC 工具链(仅限于工具行)。
打开 web 浏览器,访问如下站点(需要你懂的),尽情的探索吧:
https://sourcery.mentor.com/sgpp/lite/arm/portal/release1802