ARM 编译工具链详解

这篇具有很好参考价值的文章主要介绍了ARM 编译工具链详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ARM 编译工具链详解

GNU Arm Embedded Toolchain 是用于 C/C++ 和汇编编程的即用型开源工具套件。GNU Arm 嵌入式开发工具链适用于 32 位 Arm Cortex-A,Arm Cortex-R 和 Arm Cortex-M 处理器系列。GNU Arm 嵌入式工具链包括 GNU 编译器 (GCC),可直接从 Arm 官方免费获得,用于在 Windows,Linux 和 Mac OS X 操作系统上进行嵌入式软件开发。

官网: https://developer.arm.com/downloads/-/gnu-rm

1. 工具链命名规则

根据对操作系统的支持与否,工具链可分为支持和不支持操作系统。

例如 arm-none-eabi,arm-none-linux-eabi。下面我们来详细讲解工具链的命名规则与工具链之间的联系。

1.1 arm-none-eabi

即 ARM architecture,no vendor,not target an operaTIng system,complies with the ARM EABI 是不支持操作系统的,自然无法使用那些跟操作系统关系密切的函数,比如 fork(2)。该工具链使用的是 newlib 这个专用于嵌入式系统的 C 库。

主要用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot,kernel,不适用编译 Linux 应用 ApplicaTIon),一般适合 ARM7,Cortex-M 和 Cortex-R 内核架构的芯片开发使用,所以不支持与操作系统关系密切的函数。

1.2 arm-none-linux-gnueabi-gcc

即 ARM architecture, no vendor, creates binaries that run on the Linux operaTIng system, and uses the GNU EABI
主要用于编译基于 ARM 架构的 Linux 系统,可用于编译 ARM 架构的 u-boot,Linux 内核,Linux 应用等。arm-none-linux-gnueabi 基于 GCC,使用 Glibc 库,经过 Codesourcery 公司优化过推出的编译器。arm-none-linux-gnueabi-xxx 交叉编译工具的浮点运算非常优秀。一般 ARM9,ARM11,Cortex-A 内核架构芯片,支持 Linux 操作系统的会用到这个工具链。

1.3 arm-eabi-gcc

用于 Android ARM 的编译器。

1.4 armcc

ARM 公司推出的编译工具,功能和 arm-none-eabi 类似,可以编译裸机程序(u-boot,kernel),但是无法编译 Linux 应用程序。armcc 一般和 ARM 开发工具集成在一起(即打造成 IDE),例如 Keil MDK,ADS,RVDS 和 DS-5 中的编译器都是集成 armcc 工具链,所以集成 armcc 编译器都是收费的。

1.5 ABI 和 EABI

在编译工具链的命名中总能看到 eabi,这到底是什么意思呢。

ABI: 二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。

EABI: 嵌入式 ABI。嵌入式应用二进制接口指定了文件格式,数据类型,寄存器使用,堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用 EABI 作为与兼容的编译器生成的汇编语言的接口。

区别: ABI 应用于标准计算机,EABI 应用于是嵌入式计算机(如ARM,MIPS 等)。

2. 工具链包含工具集合

在 Windows 使用的是 gcc-arm-none-eabi,下载并安装好后,可以在它的安装目录 bin 文件夹下看到工具链包含 30 个工具,所以虽然 gcc-arm-none-eabi 名称开头是 gcc 但它不仅仅是一个 gcc 编译器,准确说是一套编译工具链,工具链包含的工具如下图。

ARM 编译工具链详解

接下来我们一起来看看我们频繁需要使用的部分工具以及这些工具的作用。

3. 工具链常用工具介绍

3.1 arm-none-eabi-gcc

这个工具为 C 语言编译器,可以将 .c 文件转化为 .o 的执行文件,编译命令如下。

arm-none-eabi-gcc -c hello.c

3.2 arm-none-eabi-g++

这个工具为 C++ 编译器,可以将 .cpp 文件转化为 .o 的执行文件,使用方式如下。

arm-none-eabi-g++ hello.cpp -o helloworld

3.3 arm-none-eabi-ld

这个工具为链接器即最后链接所有 .o 文件生成最终可执行文件的工具。一般我们不使用链接器的指令来调用链接器链接文件,而是通过使用 arm-none-eabi-gcc
来调用,因为我们自己执行命令调用链接对 C/C++ 文件混合型生成的 .o 文件的支持性不好,所以官方的说明书中也推荐使用 arm-none-eabi-gcc 指令来代替arm-none-eabi-ld 命令如下。

arm-none-eabi-gcc -o hello hello.o

3.4 arm-none-eabi-objcopy

此工具将链接器生成的文件转化为 .bin/.hex 等烧写的格式,用以下载进入单片机,命令如下。

arm-none-eabi-objcopy hello hello.bin

3.5 arm-none-eabi-gdb

工具链中的调试器,将它连接到调试器硬件产生的网络端口,就可以进行硬件和代码的调试了。GDB 是 GNU 下的调试软件,它具有很多自己的特性,可能无法想象使用命令行调试的景象。

4. 总结

ARM 交叉编译工具链由交叉编译器(例如 gcc,g++,ld),For ARM 的 C 库和二进制工具(例如 objcopy,objdump)这 3 个部分组成。

(1) 其中二进制工具由 GNU Binutils 提供。

(2) 其中 For ARM 的 C 库由 glibc/uclibc 提供。

(3) 交叉编译器由 GNU 组织提供。文章来源地址https://www.toymoban.com/news/detail-433944.html

到了这里,关于ARM 编译工具链详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ARM & Linux 基础学习 / 配置交叉编译工具链 / 编译 Linux 应用和驱动 / 编译内核

    编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程:在线视频与配套资料》里面可以下载到),还有参考 菜

    2024年02月04日
    浏览(16)
  • 交叉编译ARM64架构electron详解

    交叉编译ARM64架构electron详解

    本文主要参考Electron官方文档中 构建说明 和 构建步骤(Linux) 在amd64环境内构建arm64的electron包。 如果是arm64环境请查看文章arm64架构编译electron长征路 操作系统版本:统信1060 操作系统架构:amd64 内存:32G 如下图: electron版本:v25.9.8 chromium版本:114.0.5735.289 由于llvm编译需要

    2024年02月02日
    浏览(10)
  • 【ARM 嵌入式 编译系列 10.3 -- GNU elfutils 工具小结】

    请阅读 【ARM GCC 编译专栏导读】 上篇文章:【ARM 嵌入式 编译系列 10.2 – 符号表与可执行程序分离详细讲解】 下篇文章:【ARM 嵌入式 编译系列 11 – GCC attribute ((packed))详细介绍】 GNU elfutils是一个开源的工具集,用于处理 ELF (Executable and Linkable Format)格式的可执行文件、

    2024年02月13日
    浏览(15)
  • IAR Embedded Workbench for Arm, v. 9.40下载链接

    IAR—Registration Complete https://register.iar.com/confirm?lang=enkey=ab3bb175-d90b-452a-be84-0296348e00c7

    2024年01月19日
    浏览(7)
  • 【Linux下6818开发板(ARM)】SecureCRT串口和交叉编译工具(巨细版!)

    【Linux下6818开发板(ARM)】SecureCRT串口和交叉编译工具(巨细版!)

    (꒪ꇴ꒪ ),hello我是 祐言 博客主页:C语言基础,Linux基础,软件配置领域博主🌍 快上🚘,一起学习! 送给读者的一句鸡汤🤔: 集中起来的意志可以击穿顽石! 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏 1.串口工具          SecureCRT         SecureCRT是一款功

    2024年02月15日
    浏览(27)
  • Ubuntu嵌入式开发编译工具链安装教程之Arm GNU Toolchain

    Ubuntu嵌入式开发编译工具链安装教程之Arm GNU Toolchain

    下载路径: Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer 官方提供了可执行版本和源文件版本(后缀为*src_tar.bz2 ),通常情况我们直接下载可执行版本就足够了,当然致力于编译工具链原理学习的小伙伴对源文件版本是必不可少的,本文仅限可执行版本安装教程,若有

    2024年02月13日
    浏览(27)
  • arm-none-eabi-gcc编译、链接选项详解

    \\\"- mthumb ”的意义是:使用这个编译选项生成的目标文件是Thumb指令的,目前还没有发现GNU编译器中有哪一个选项可以指定生成的目标文件是thumb-2的。 相对应的,“-marm“的意义是,使用编译选项生成的目标文件是ARM指令的。 注意,不同编译器对该选项是否默认开启是不一样

    2024年02月11日
    浏览(30)
  • ARM架构Linux操作系统上C语言版本的CycloneDDS中HelloWorld的编译过程(交叉编译工具链)

    ARM架构Linux操作系统上C语言版本的 CycloneDDS 中 HelloWorld 的编译过程与源码编译过程中的 roundtrip 示例编译是一样的,因为实在ARM架构上,所以需要将 idlc_generat e注释掉,自己手动添加源代码和头文件,之后在进行 cmake 和 make 操作

    2024年02月15日
    浏览(10)
  • 交叉编译工具链arm-linux-gnueabihf的安装-ubuntu 20.04

    http://t.csdn.cn/ZbjFX 建议直接在.bashrc文件作修改 ,修改方式相同 ( vi :视自己的编辑器而定) 因为我在修改profile文件后,环境变量生效,但是命令行的用户名等颜色高亮显示会消失;并且重启终端后,又需要再source一下profile。 但是将环境变量添加至.bashrc则不会出现这两个问题

    2024年02月11日
    浏览(33)
  • 下载较老版本或最新版本的ARM Linux gcc 交叉编译工具链

    下载较老版本或最新版本的ARM Linux gcc 交叉编译工具链

    如果开发的 ARM 平台比较的多,需要多个版本的 arm gcc 交叉编译工具链,那么如何获取较新版本的 arm gcc 交叉编译工具链呢? 速度较快的,也比较新的,就到 ARM 官方网站下载 下载地址: https://developer.arm.com/downloads/-/gnu-a GNU-A Downloads 最新的下载地址: https://developer.arm.com/do

    2024年02月14日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包