arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf的区别
转自 https://www.cnblogs.com/linuxbo/p/4297680.html
命名规则
交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] [-gcc]
- arch – 体系架构,如ARM,MIPS
- vendor – 工具链提供商
- os – 目标操作系统
- eabi – 嵌入式应用二进制接口(Embedded Application Binary Interface)
注意
- 没有vendor时,用none代替;
- 没有os支持时,也用none代替
- 同进没有vendor和os支持时,只用一个none代替,比如arm-none-eabi中的none表示既没有vendor也没有os支持。
根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如
- arm-none-eabi:这个是没有操作系统的,自然不可能支持那些跟操作系统关系密切的函数,比如fork(2)。他使用的是newlib这个专用于嵌入式系统的C库。
- arm-none-linux-eabi:没有vendor的、用于Linux的,使用Glibc
实例
1、arm-none-eabi-gcc
(ARM architecture,no vendor,not target 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、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 操作系统的会用到。
3、arm-eabi-gcc
Android ARM 编译器。
4、armcc
ARM 公司推出的编译工具,功能和 arm-none-eabi 类似,可以编译裸机程序(u-boot、kernel),但是不能编译 Linux 应用程序。armcc一般和ARM开发工具一起,Keil MDK、ADS、RVDS和DS-5中的编译器都是armcc,所以 armcc 编译器都是收费的(爱国版除外,呵呵~~)。
5、arm-none-uclinuxeabi-gcc 和 arm-none-symbianelf-gcc
arm-none-uclinuxeabi 用于uCLinux,使用Glibc。
arm-none-symbianelf 用于symbian,没用过,不知道C库是什么 。
Codesourcery
Codesourcery推出的产品叫Sourcery G++ Lite Edition,其中基于command-line的编译器是免费的,在官网上可以下载,而其中包含的IDE和debug 工具是收费的,当然也有30天试用版本的。
目前CodeSourcery已经由明导国际(Mentor Graphics)收购,所以原本的网站风格已经全部变为 Mentor 样式,但是 Sourcery G++ Lite Edition 同样可以注册后免费下载。
Codesourcery一直是在做ARM目标 GCC 的开发和优化,它的ARM GCC在目前在市场上非常优秀,很多 patch 可能还没被gcc接受,所以还是应该直接用它的gcc就好,而且它提供了Windows下[mingw交叉编译的]和Linux下的二进制版本,比较方便;如果不是很有时间和兴趣,不建议下载 src 源码包自己编译,很麻烦。Codesourcery给的shell脚本很多时候根本没办法直接用,得自行提取关键的部分手工执行,又费精力又费时间,如果想知道细节,其实不用自己编译一遍,看看他是用什么步骤构建的即可,如果你对交叉编译器感兴趣的话。
ABI 和 EABI
ABI:二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。
EABI:嵌入式ABI。嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用 EABI 作为与兼容的编译器生成的汇编语言的接口。
两者主要区别是,ABI是计算机上的,EABI是嵌入式平台上(如ARM,MIPS等)。
arm-linux-gnueabi-gcc 和 arm-linux-gnueabihf-gcc
两个交叉编译器分别适用于 armel 和 armhf 两个不同的架构,armel 和 armhf 这两种架构在对待浮点运算采取了不同的策略(有 fpu 的 arm 才能支持这两种浮点运算策略)。
其实这两个交叉编译器只不过是 gcc 的选项 -mfloat-abi 的默认值不同。gcc 的选项 -mfloat-abi 有三种值 soft、softfp、hard(其中后两者都要求 arm 里有 fpu 浮点运算单元,soft 与后两者是兼容的,但 softfp 和 hard 两种模式互不兼容):
soft: 不用fpu进行浮点计算,即使有fpu浮点运算单元也不用,而是使用软件模式。
softfp: armel架构(对应的编译器为 arm-linux-gnueabi-gcc )采用的默认值,用fpu计算,但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。
hard: armhf架构(对应的编译器 arm-linux-gnueabihf-gcc )采用的默认值,用fpu计算,传参数也用fpu中的浮点寄存器传,省去了转换,性能最好,但是中断负荷高。
把以下测试使用的C文件内容保存成 mfloat.c:
#include <stdio.h>
int main(void)
{
double a,b,c;
a = 23.543;
b = 323.234;
c = b/a;
printf(“the 13/2 = %f\n”, c);
printf(“hello world !\n”);
return 0;
}
1、使用 arm-linux-gnueabihf-gcc 编译,使用“-v”选项以获取更详细的信息:
# arm-linux-gnueabihf-gcc -v mfloat.c
COLLECT_GCC_OPTIONS=’-v’ ‘-march=armv7-a’ ‘-mfloat-abi=hard’ ‘-mfpu=vfpv3-d16′ ‘-mthumb’
-mfloat-abi=hard
可看出使用hard硬件浮点模式。
2、使用 arm-linux-gnueabi-gcc 编译:
# arm-linux-gnueabi-gcc -v mfloat.c
COLLECT_GCC_OPTIONS=’-v’ ‘-march=armv7-a’ ‘-mfloat-abi=softfp’ ‘-mfpu=vfpv3-d16′ ‘-mthumb’
-mfloat-abi=softfp
可看出使用softfp模式。

交叉编译工具
参考资料
- 交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别:http://www.cnblogs.com/xiaotlili/p/3306100.html
- arm-none-linux-gnueabi,arm-none-eabi 与arm-eabi 区别:http://blog.csdn.net/mantis_1984/article/details/21049273
- What’s the difference between arm-linux- / arm-none-linux-gnueabi- / arm-fsl-linux-gnueabi- in LTIB?https://community.freescale.com/thread/313490
- https://wiki.debian.org/ArmEabiPort
eabi是arm新的二进制文件接口的标准,elf是二进制目标文件的格式,而名称为arm-elf的编译器一般是老的OABI接口,裸奔程序到影响不大,在嵌入式linux中,要注意系统的接口,是老的oabi还是eabi,新的内核一般是eabi接口,但编译内核时会有兼用oabi接口的选项,默认是没选择的,需要的话编译时需要手动选上
那个none指的是没有操作系统的意思
arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf的区别的更多相关文章
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPSvendor – 工具链提供商os – 目标操作系统 ...
- 【转】arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
原文网址:http://www.veryarm.com/296.html 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架 ...
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf等的区别【转】
转自:https://www.cnblogs.com/deng-tao/p/6432578.html 博客来之于: http://www.veryarm.com/296.html 交叉编译工具链的命 ...
- arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf等的区别
博客来之于: http://www.veryarm.com/296.html 命名规则: 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - ...
- 安装ARM交叉编译器
1.开发平台 虚拟机:VMware 12 操作系统:Ubuntu 14.04 64bit 2.准备ARM交叉编译工具包 编译uboot和linux kernel都需要ARM交叉工具链支持,这里使用Li ...
- Ubuntu上Xilinx ARM交叉编译器安装
1,Windows中下载交叉编译器 2,在ubuntu中创建zedboard目录,并将交叉编译器复制进来 3,将该交叉编译器设置成可执行程序 chmod a+x xilinx-2011.09-50 ...
- arm交叉编译器科普
交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架构,如ARM,MIPS vendor - 工具链提供商 os - 目标操作系统 ea ...
- ubuntu 10.04 安装arm交叉编译器
家里有一台cotext-A9(armv7-a) 的盒子,现在不用了, 一直想着废物利用.于是想怎么为这盒子编译程序. 目标机器: root@routon-h1:/# uname -a Linux ro ...
- 交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别 自己之前一直没搞清楚这两个交叉编译器到底有什么问题,特意google一番,总结如下,希望能帮到道上和 ...
随机推荐
- Python-入门必备
·Python入门必备 @ 交互式编程 交互式编程不需要创建脚本文件,而是直接通过Python解释器的交互模式进来编写代码.下面我们来打开python自带的交互式编程客户端,打印一个hello,wor ...
- mysql自动提交
MySQL的autocommit(自动提交)默认是开启,其对mysql的性能有一定影响,举个例子来说,如果你插入了1000条数据,mysql会commit1000次的,如果我们把autocommit关 ...
- 使用JAX-WS(JWS)发布WebService(一)
JAX-WS概述: 通过Main发布一个简单WebService: JAX-WS(Java API for XML Web Services)规范是一组XML web services的JAVA AP ...
- BZOJ1968_COMMON约数研究_KEY
题目传送门 BZOJ水题,for i=1~N,答案加上N/i即可 ANS=∑N/i(i∈{1~N}) code: /****************************************** ...
- PHP中strtotime()的使用
strtotime是一个非常强大的函数. 传入的参数,详见官网的介绍 本月最后一个周日 echo date('Y-m-d',strtotime('last sunday of this month') ...
- DSP5509的GPIO学习-第5篇
1. 使用CCS V6.1版本,目前已经不局限于仅仅把实验搞清楚了,要深入去探究内部的原理,本章看下GPIO实验 2. 在CCS启动的时候,提示,这个问题是什么,XDAIS是什么?XDAIS (eXp ...
- 数据库c3p0配置文件
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-con ...
- python3 爬虫爬取深圳公租房轮候库(深圳房网)
深圳公租房轮候库已经朝着几十万人的规模前进了,这是截至16年10月之前的数据了,贴上来大家体会下 所以17年已更新妥妥的10W+ 今天就拿这个作为爬虫的练手项目 1.环境准备: 操作系统:win10 ...
- leetcode-组合总数III(回溯)
组合总和 III 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的组合. 示例 ...
- netty in action 笔记 二
netty的数据容器 网络数据的基本单位大多为字节,Java NIO 提供了ByteBuffer 作为它的字节容器,但使用起来过于复杂和繁琐.在Netty中, ByteBuffer 替代品是ByteB ...