目录

1 命名规则

2 实例

2.1 arm-none-eabi-gcc

2.2 arm-none-linux-gnueabi-gcc

2.3 arm-eabi-gcc

2.4 armcc

2.5 arm-none-uclinuxeabi-gcc 和 arm-none-symbianelf-gcc

3 gnueabi和gnueabihf的区别(硬浮点、软浮点)

4 Linaro公司出品的交叉编译工具链

5 ARM公司出品的交叉编译工具链


1 命名规则

交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]

arch- 体系架构,

如ARM,MIPS等。

vendor- 工具链提供商,

可以是none、unknow或者直接省略。

os- 目标操作系统

这个字段一般是linux或者none,none表示没有操作系统的,不支持那些跟操作系统关系密切的函数,比如fork(2),他使用的是newlib这个专用于嵌入式系统的C库。如果这个字段是linux,表示编译出来的程序可以运行在linux上,使用Glibc库。

eabi- 嵌入式应用二进制接口(Embedded Application Binary Interface)

ABI:二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。EABI:嵌入式ABI。嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用 EABI 作为与兼容的编译器生成的汇编语言的接口。两者主要区别是,ABI是计算机上的,EABI是嵌入式平台上(如ARM,MIPS等)。

2 实例

2.1 arm-none-eabi-gcc

(ARM architecture,novendor,nottarget an operating system,complies with the ARM EABI)

用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),一般适合 ARM7、Cortex-M 和 Cortex-R 内核的芯片使用,所以不支持那些跟操作系统关系密切的函数,比如fork(2),他使用的是 newlib 这个专用于嵌入式系统的C库。

2.2 arm-none-linux-gnueabi-gcc

(ARM architecture,novendor,creates binaries that run on theLinuxoperating 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 操作系统的会用到。

2.3 arm-eabi-gcc

Android ARM 编译器。

2.4 armcc

ARM 公司推出的编译工具,功能和 arm-none-eabi 类似,可以编译裸机程序(u-boot、kernel),但是不能编译 Linux 应用程序。armcc一般和ARM开发工具一起,Keil MDK、ADS、RVDS和DS-5中的编译器都是armcc,所以 armcc 编译器都是收费的(爱国版除外,呵呵~~)。

2.5 arm-none-uclinuxeabi-gcc 和 arm-none-symbianelf-gcc

arm-none-uclinuxeabi 用于uCLinux,使用Glibc。

arm-none-symbianelf 用于symbian,没用过,不知道C库是什么。

3 gnueabi和gnueabihf的区别(硬浮点、软浮点)

gcc-arm-linux-gnueabi – The GNU C compiler for armel architecture
gcc-arm-linux-gnueabihf – The GNU C compiler for armhf architecture
可见这两个交叉编译器适用于arm-el和arm-hf两个不同的架构, 在对待浮点运算采取了不同的策略,
其实这两个交叉编译器只不过是gcc的选项-mfloat-abi的默认值不同. gcc的选项-mfloat-abi有三种值soft,softfp,hard
(其中后两者都要求arm里有fpu浮点运算单元,soft与后两者是兼容的,但softfp和hard两种模式互不兼容):
soft : 不用fpu进行浮点计算,即使有fpu浮点运算单元也不用,而是使用软件模式。
softfp : armel架构(对应的编译器为gcc-arm-linux-gnueabi)采用的默认值,用fpu计算,但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。
hard : armhf架构(对应的编译器为gcc-arm-linux-gnueabihf)采用的默认值,用fpu计算,传参数也用fpu中的浮点寄存器传,省去了转换, 性能最好,但是中断负荷高。

4 Linaro公司出品的交叉编译工具链

Linaro,一家非营利性质的开放源代码软件工程公司,主要的目标在于开发不同半导体公司系统单芯片(SoC)平台的共通软件,以促进消费者及厂商的福祉。针对于各个成员推出的 ARM系统单芯片(SoC),它开发了ARM开发工具、Linux内核以及Linux发行版(包括 Android 及 Ubuntu)的主要自动建构系统。由ARM、飞思卡尔、IBM、Samsung、ST-Ericsson 及德州仪器 (TI)等半导体厂商联合,在2010年3月成立。2010年6月在台北对外宣布这个消息。预计在2010年11月,推出第一版以ARM Cortex-A 为核心的 SoC 进行效能优化的软件工具。 [1]  2011年5月,推出LAVA (Linaro Automated Validation Architecture) 。

下载地址

Linaro Releases
Linaro Snapshots

Linaro Releases

举例说明

(1)、一般给ARMv8架构的处理器用:
ARM64、小端、裸机工程: aarch64-elf -
ARM64、小端、Linux工程: aarch64-linux-gnu -
ARM64、大端、裸机工程: aarch64_be-elf -
ARM64、大端、Linux工程: aarch64_be-linux-gnu -
特殊版本、ARMv8架构、Linux工程: armv8l-linux-gnueabihf -
(2)、一般给ARMv7架构的处理器用:
ARM32、小端、裸机工程: arm-eabi -
ARM32、小端、Linux工程: arm-linux-gnueabi -
ARM32、小端、Linux工程: arm-linux-gnueabihf -
ARM32、大端、裸机工程: armeb-eabi -
ARM32、大端、Linux工程: armeb-linux-gnueabi -
ARM32、大端、Linux工程: armeb-linux-gnueabihf -

5 ARM公司出品的交叉编译工具链

2022版本:
Arm GNU Toolchain Downloads – Arm Developer
2022之前的版本:
Downloads | GNU-A Downloads – Arm Developer

下面链接提供的是面向 Cortex-A 系列的交叉编译工具链:
Downloads | GNU-A Downloads – Arm Developer

下面链接提供的是面向 Cortex-R 和 Cortex-M 系列(主要就是单片机啦)的交叉编译工具链:

Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer

举例说明

ARM32、小端、裸机工程: arm-none-eabi
ARM32、小端、Linux工程: arm-none-linux-gnueabihf
ARM64、小端、裸机工程: aarch64-none-elf
ARM64、小端、Linux工程: aarch64-none-linux-gnu
ARM64、大端、Linux工程: aarch64_be-none-linux-gnu

参考文献

编译工具链和交叉编译工具链简易说明_Naisu Xu的博客-CSDN博客

https://www.cnblogs.com/solo666/p/16405064.html

arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别 - 简书

arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf aarch64-linux-gnu_Segment fault的博客-CSDN博客

https://www.cnblogs.com/xiaotlili/p/3306100.html

各种交叉编译工具链的区别相关推荐

  1. NXP IMX6ULL的官方文档、官方BSP、交叉编译工具链下载

    目录 1 官网下载BSP以及相关文档 1.1 文档下载 1.2 NXP 官方uboot和kernel源码下载 1.3 官方评估板硬件资料下载 1.4 官方BSP下载 2 官网SDK下载 3 交叉编译工 ...

  2. ARM交叉编译工具链gnueabi、none-eabi、arm-eabi等命名的区别

    命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPS vendor – 工具链提供商 os – 目标操作 ...

  3. linux centos7 使用 crosstool-ng 构建 交叉编译 工具链 即构建各cpu架构平台的gcc编译器

    简介 crosstool-ng,全称是crosstool Next Generation,即下一代crosstool.crosstool是个交叉编译器的制作工具,但是做的不够好,于是有人(Yann E ...

  4. 树莓派 交叉编译工具链的安装

    1.交叉编译是什么: 2.为什么要交叉编译? 3.交叉编译需要用到什么工具? 4..交叉编译工具链的安装 4.1临时有效 4.2永久有效 安装流程: 1.用file Zilla将tools-maste ...

  5. ARM交叉编译工具链分类说明

    为什么要用交叉编译器? 交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程 ...

  6. 交叉编译工具链的设置和命名规则

    一. 交叉编译工具的命名规则 arch [-vendor] [-os] [-(gnu)eabi] [-gcc] arch:体系架构,比如ARM.X86 vendor:工具链供应商 OS:目标操作系统, ...

  7. 【linux系统如何安装arm交叉编译工具链】

    文章目录 前言 一.arm交叉编译器介绍 命名规则 具体编译器 二.Arm GNU Toolchain安装 总结 前言 本文简要介绍arm交叉编译器及工具链的安装方法 一.arm交叉编译器介绍 命名规 ...

  8. 自己动手安装ARM交叉编译工具链

    一,首先说一下在linux中安装软件的特点: 相比windows下安装要稍显复杂,linux中安装一般有以下几种方法: 1.在线安装,譬如ubuntu中使用apt-get install vim 来安 ...

  9. arm-linux交叉编译工具链的制作(基于S3C2440)【转】

    本文转载自:http://eric-gao.iteye.com/blog/2160622 制作arm-linux交叉编译工具链一般通过crosstool工具或者crosstool-NG,前者使用方便, ...

最新文章

  1. OpenCV 之 Mat 类
  2. Struts2学习笔记——Struts2与Spring整合
  3. UVA227-Puzzle
  4. 音视频技术开发周刊 | 189
  5. 【分析】1021 Deepest Root (25 分)【DFS解法】
  6. [摘]全文检索引擎Solr系列—–全文检索基本原理
  7. linux中磁盘的iused,Linux 磁盘与文件系统管理
  8. DevExpress v18.1新版亮点——ASP.NET Bootstrap篇(二)
  9. SQL 时间截按月分组查询
  10. iis p访问php密码,访问IIS网站需要输入用户名密码(非匿名登录)问题汇总
  11. Ubuntu Linux 15.04安装 nginx + passenger
  12. 语音合成——闽南语合成(1)
  13. 开源 微商分销系统 php,[PHP程序] 微商新零售分销平台源码Thinkphp内核 产品营销推广神器...
  14. 同济大学计算机专业录取分数线,同济大学2017年各省录取分数线
  15. VLC media player ActiveX控件制作
  16. Transformer中引用iqd作为数据源导入报错TR1907与TR3312
  17. python三大器,Python 入门之 Python三大器 之 生成器
  18. 勒索病毒 最新消息整理
  19. babylon.js 学习
  20. 蓝桥试题 算法提高 珠心算测验 JAVA

热门文章

  1. Apple Watch必备? 高逼格精品周边配件盘点
  2. 网络基础之为了安全而诞生的NAT(网络地址转换)
  3. 基于MATLAB的智能交通信号灯控制系统的实现
  4. 简单的禁止应用被双开的方法
  5. 快速计算CRC校验(异或)的方法
  6. 微信 checkbox修改样式
  7. 区块链底层平台FISCO BCOS的网络压缩功能如何?
  8. 卸下皮肤和排位,亲近自然,别让游戏成瘾_数字体验_新浪博客
  9. 基于Lora实现的屋内火灾报警系统
  10. html中写meta会乱码,网页html代码不可缺少的5个meta标签属性