ARM交叉编译器GNUEABI、NONE-EABI、ARM-EABI、GNUEABIHF等的区别

ARM交叉编译工具链 gcc-arm-none-eabi 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]arch– 体系架构,如ARM,MIPSvendor– 工具链提供商os– 目标操作系统eabi– 嵌入式应用二进制接口(Embedded Application Binary Interface)根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如arm-none-eabi:这个是没有操作系统的,自然不可能支持那些跟操作系统关系密切的函数,比如fork(2)。 阅读详情

命名规则:

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

  • arch - 体系架构,如ARM,MIPS
  • verdor - 工具链提供商
  • os - 目标操作系统
  • eabi - 嵌入式应用二进制接口

根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如

  • arm-none-eabi:这个是没有操作系统的,自然不可能支持那些跟操作系统关系密切的函数,比如fork(2)。他使用的是newlib这个专用于嵌

       入式系统的C库。

  • arm-none-linux-eabi:用于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接受,所以还是应该直

接用它的(而且他提供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中的浮点寄存器传,省去了转换,性能最

好,但是中断负荷高。

ubuntu搭建基于arm-none-eabi-gcc,jlink驱动的平台,并实现stm32f103c8t6程序的编译链接和烧写 arm-none-eabi-gcc是属于gcc编译工具链,可以理解为针对arm工程的一个编译器,这个编译器只能用来编译裸奔程序,说白了就是不能编译带操作系统的工程,我们可能马上想到是否有能够编译操作系统的工程的版本,由于本博客属于入门级别,所以博主在这不多说太多,感兴趣的可以多了解以下arm-none-eabi-gcc相关系列,这里主要就是基本应用的使用。如图,选择合适的版本下载即可(自己的Ubuntu是多少位的尽量就下多少位的,否则后面会有些麻烦,这里博主用的是64位的,32位的可以到。 阅读详情

相关推荐

Linux环境下嵌入式开发:使用gcc-arm-none-eabi工具链编译STM32

通过以上步骤,我们成功地在Linux环境下利用gcc-arm-none-eabi工具链编译和调试了一个简单的STM32应用程序。祝你在嵌入式开发的道路上取得成功!在Linux环境下,我们可以利用gcc-arm-none-eabi工具链来编译和调试STM32单片机的应用程序。在该文件中,我们将编写一个简单的LED闪烁程序,以演示如何使用gcc-arm-none-eabi工具链编译STM32应用程序。在上面的代码中,我们使用了STM32库提供的头文件,并在main函数中实现了一个简单的LED闪烁程序。

Orion_O的博客 1034

gnueabi和gnueabihf区别

一. 什么是ABI和EABI ABI: 二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture) 在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口. ABI涵盖了各种细节,如: 数据类型的大小、布局和对齐; 调用约定(控制着函数的参数如何传送以及如何接受返回值),例如,是所有的参数都通过栈传递,还是部分参数通过寄存器传递;哪个寄存器用于哪个函数参数;通过栈传递的第一个函数参数

曾经的你 1万+

告别手动维护!教你用SAP BAPI批量更新生产订单BOM组件(CO02工单)

本文详细介绍了如何利用SAP BAPI实现生产订单BOM组件的批量更新,解决传统手工操作(如CO02工单)效率低下的问题。通过核心函数解析和批量处理框架设计,帮助用户大幅提升工作效率,降低错误率,适用于物料主数据变更、季节性配方调整等场景。

weixin_30844577的博客 558

SolidWorks参数化建模实战:从规则定义到智能装配

本文深入探讨SolidWorks参数化建模的实战技巧,从规则定义到智能装配的全流程。通过实际案例展示如何提升设计效率300%,确保一致性,并加速系列化开发。重点解析草图阶段植入设计意图、装配体级参数化及高级技巧,帮助工程师掌握三维建模的核心竞争力。

weixin_29306317的博客 416

简单的图书管理系统---SpringBoot+mysql通过前后端分离实现增删查改

SpringBoot+mysql通过前后端分离实现增删查改 上篇文章介绍了如何写后端接口 SpringBoot连接MySQL获取数据写后端接口 这篇文章,我们就介绍一下怎么写前端 点击修改跳出修改界面,点击添加书籍跳出添加书籍界面 点击删除,直接删除一行数据 其他的也没什么解释了,直接上代码(看不懂的可以私聊我哟) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>

爱笑的博客 2014

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

arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别 知识经验 2年前 (2014-08-09) 27903浏览 5评论 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架构,如ARM,MIPSvendor - 工具链提供商os - 目标操作系统ea

凌风探梅的专栏 2535

从注册到投稿:一步步教你完成KBS期刊的在线投稿流程(最新版)

本文详细介绍了如何完成KBS期刊的在线投稿流程,从账号注册到最终提交的全过程。特别针对初次使用Elsevier投稿系统的研究者,提供最新版系统的操作指南,包括投稿要求、文件格式、作者信息管理等关键步骤,帮助研究者顺利投稿至这一人工智能领域的知名期刊。

egg99的博客 1588

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

原文地址:https://www.cnblogs.com/linuxbo/p/4297680.html 命名规则 1.交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] [-gcc] arch – 体系架构,如ARM,MIPS vendor – 工具链提供商 os – 目标操作系统 eabi – 嵌入式应用二进制接口(Embedded A

1524

基于卷积神经网络的人脸表情识别(JAFFE篇)

1.win10/11操作系统2.python3.7以上3.tensorflow2.4以上版本(2.0其它版本需要微调)4.内存12G,显卡4G以上(没有独显倒是也能跑...)(这个可爱的妹子就是JAFFE数据集中的图片)

小林同学的计算机学习 5913

基于 YOLOv26 的陶瓷产品缺陷检测系统:智能视觉质检方案

本文提出了一种基于YOLOv26深度学习模型的陶瓷产品智能缺陷检测系统。该系统针对陶瓷生产中的裂纹、气泡、釉面缺陷等8类常见质量问题,采用YOLOv26目标检测算法实现高精度自动化检测。系统架构包含数据采集、预处理、YOLOv26检测和后处理四个模块,具有多类别分类、实时推理和强鲁棒性等技术优势。文章详细介绍了数据预处理与增强方法,并提供了Python代码实现示例。该方案可显著提升陶瓷产品质量检测效率,替代传统人工检测方式,为陶瓷制造业提供智能化质检解决方案。

一键难忘的博客 786

[Arm]arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别

arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别命名规则交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi]* arch - 体系架构,如ARM,MIPS * vendor - 工具链提供商 * os - 目标操作系统 * eabi - 嵌入式应用二进制接口

wangyijieonline的博客 904

使用MATLAB/Simulink对一个简单的智能家居温湿度监测与控制系统进行建模和仿真

目录手把手教你学Simulink——基于Simulink的智能家居温湿度监测与控制仿真建模示例一、背景介绍二、所需工具和环境三、步骤详解步骤1:创建Simulink模型步骤2:构建传感器模块步骤3:添加控制器步骤4:构建执行器模块步骤5:连接各部分步骤6:设置仿真参数步骤7:添加观测器步骤8:运行仿真并分析结果四、总结 智能家居系统中的温湿度监测与控制系统是一个典型的物联网(IoT)应用场景,它通过传感器收集环境数据,并根据预设条件自动调节室内温度和湿度以提高居住舒适度。本指南将介绍如何使用MATLAB/S

xiaoheshang_123的博客 291
上一篇: socket--shutdown()
下一篇: Linux虚拟地址空间布局
evilcode
博客等级 码龄20年 307粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值