目录

  • 交叉编译器命名规则
  • 具体编译器举例
    • crosstool-ng交叉编译工具样本
    • arm交叉编译器举例
  • 几个概念
    • ABI与EABI
    • gnueabi与gnueabihf
  • 参考

交叉编译器命名规则

交叉编译器的命名规则:arch [-vendor] [-os] [-(gnu)eabi] [-language]

  • arch - 体系架构, 如arm(ARM-32bit)、aarch64(ARM-64bit)、x86等;
  • vendor -工具链提供商,经常省略,或用 none 替代;
  • os - 目标操作系统, 如linux,没针对具体 os 则 用 none 替代。同时没有 vendor 和os 使用一个 none 替代。
  • eabi - 嵌入式应用二进制接口(Embedded Application binary Interface)
  • language - 编译语言,如gcc,g++

具体编译器举例

crosstool-ng交叉编译工具样本

制作交叉编译工具链的 crosstool-ng 官网上就列出很多交叉编译工具样本,都是按以上命名规则命名的。

aarch64-ol7u9-linux-gnu
aarch64-ol8u6-linux-gnu
aarch64-ol8u7-linux-gnu
aarch64-rpi3-linux-gnu
aarch64-rpi4-linux-gnu
aarch64-unknown-linux-gnu
aarch64-unknown-linux-uclibc
arm-bare_newlib_cortex_m3_nommu-eabi
arm-cortex_a15-linux-gnueabihf
arm-cortexa5-linux-uclibcgnueabihf
arm-cortex_a8-linux-gnueabi
arm-cortexa9_neon-linux-gnueabihf
arm-multilib-linux-uclibcgnueabi
arm-nano-eabi
arm-none-eabi
arm-ol7u9-linux-gnueabi
arm-ol7u9-linux-gnueabihf
arm-picolibc-eabi
arm-unknown-eabi
arm-unknown-linux-gnueabi
arm-unknown-linux-musleabi
arm-unknown-linux-uclibcgnueabi
arm-unknown-linux-uclibcgnueabihf
x86_64-centos7-linux-gnu
x86_64-multilib-linux-gnu
x86_64-multilib-linux-musl
x86_64-multilib-linux-uclibc
x86_64-multilib-linux-uclibc,moxie-unknown-moxiebox
x86_64-multilib-linux-uclibc,powerpc-unknown-elf
x86_64-ol8u6-linux-gnu
x86_64-ol8u7-linux-gnu
x86_64-pc-linux-gnu,arm-picolibc-eabi
x86_64-ubuntu14.04-linux-gnu
x86_64-ubuntu16.04-linux-gnu
x86_64-unknown-linux-gnu
x86_64-unknown-linux-uclibc
x86_64-w64-mingw32
x86_64-w64-mingw32,arm-cortexa9_neon-linux-gnueabihf
x86_64-w64-mingw32,x86_64-pc-linux-gnu

arm交叉编译器举例

  • arm-none-eabi-gcc

ARM architecture,no vendor,not target an operating system,complies with the ARM EABI(ARM 程序接口)

用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),一般用于ARM MCU系列芯片,如 ARM7、Cortex-M 和 Cortex-R ,没有操作系统,不支持那些跟操作系统关系密切的函数,它使用的是newlib 这个专用于嵌入式系统的C库,安装方法:

sudo apt-get install gcc-arm-none-eabi
  • arm-linux-gnueabi-gcc

ARM architecture, creates binaries that run on the Linux operating system, and uses the GNU EABI (GUN 程序接口)

也叫 arm-none-linux-gnueabi-gcc,因为一开始是没有发行商的,目前由Linaro 公司发行,一般用于 ARM9、ARM11、Arm Cortex-A 系列芯片,带有 Linux 操作系统。前者针对 32 位芯片,后者针对 64 位芯片,使用的是glibc库。可用于交叉编译ARM系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序,安装方法:

sudo apt-get install gcc-arm-linux-gnueabi
  • arm-linux-gnueabihf-gcc

和 arm-linux-gnueabi-gcc 区别不过是 gcc 的选项 -mfloat-abi 的默认值不同,即浮点数处理上的不同,详见后文解答。
• aarch64-none-linux-gnu-gcc

是arm-linux-gnueabi-gcc和arm-linux-gnueabihf-gcc的ARM-64bit版本。

  • arm-eabi-gcc

Android ARM 编译器。

  • arm-none-uclinuxeabi-gcc

用于uCLinux,使用glibc。

  • arm-none-symbianelf-gcc

用于symbian。

几个概念

ABI与EABI

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

EABI:即嵌入式ABI,应用于嵌入式系统的二进制应用程序接口(Embeded Application Binary Interface)。

两者主要区别是,ABI是计算机上的,EABI是嵌入式平台上(如ARM,MIPS等)。

gnueabi与gnueabihf

gcc-arm-linux-gnueabi – The GNU C compiler for armel architecture
gcc-arm-linux-gnueabihf – The GNU C compiler for armhf architecture

这两个交叉编译器适用于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架构(对应的编译器为gcc-arm-linux-gnueabi)采用的默认值,用fpu计算,但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。

hard:armhf架构(对应的编译器gcc-arm-linux-gnueabihf)采用的默认值,用fpu计算,传参数也用fpu中的浮点寄存器传,省去了转换,性能最好,但是中断负荷高。

参考

  • ARM 交叉编译器命名规则
  • ARM 交叉编译工具链

arm系列交叉编译器各版本区别相关推荐

  1. W5300E01-ARM 交叉编译器(Cross Compiler)用户手册

    W5300E01-ARM是基于W5300的ARM功能测试评估板: 1      简介 当用户的开发环境与目标系统不同时就会用到交叉编译器. 例如,当开发基于ARM的嵌入式系统时,用户就需要在电脑上写出 ...

  2. Linux账户标识R=400是什么意思_带你阅读linux内核源码:通俗讲解编译器、交叉编译器和大小端...

    欢迎关注"技术简说",持续分享linux内核和驱动开发干货. 本文内容包括: 编译器和交叉编译器的介绍 交叉编译器的命名规则 如何交叉编译C代码 大端.小端的通俗讲解 如何判断你的 ...

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

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

  4. 基于ARM的GCC编译器,各版本arm-gcc区别与安装

    arm-linux-gcc.arm-none-eabi-gcc.arm-eabi-gcc.arm-none-linux-gnueabi-gcc区别 arm-none-eabi-gcc ==(ARM a ...

  5. arm交叉编译器gnueabi、none-eabi、arm-eabi等的区别

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

  6. 嵌入式ARM+Linux 多个不同版本的交叉编译器的切换方法

    工欲善其事,必先利其器!软件工具的选择与使用,是开发人员必须重视的事情. 我这里在VM虚拟机安装的CentOS 6.5,开发编译基于ARM的嵌入式Linux,安装了几个版本的交叉编译器,以下是如何切换 ...

  7. arm linux gnueabi编译,交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别

    本身以前一直没搞清楚这两个交叉编译器到底有什么问题,特地google一番,总结以下,但愿能帮到道上和我有一样困惑的兄弟-..linux 一. 什么是ABI和EABI 1) ABI: 二进制应用程序接口 ...

  8. arm 各种 gcc 编译器区别

    做嵌入式开发在以前经常需要下载交叉编译器,主要是因为那个时候的产品绝大多数位 arm架构的,而市面上基本上的 PC/服务器基本上 X86.即便现在 arm架构的笔记本和服务器慢慢推向市场,原由的那套嵌 ...

  9. 交叉编译器的命名规则及详细解释(arm/gnu/none/linux/eabi/eabihf/gcc/g++)

    在linux系统下搞嵌入式开发,交叉编译器那肯定是必备工具.用的场合多了,就会见到各种各样的编译工具,比如: arm-linux-gcc arm-linux-gnueabi-gcc arm-none- ...

最新文章

  1. ISO9000机房管理办法
  2. javascript转换金额格式
  3. 深入理解CSS3 Animation 帧动画
  4. 关于springboot-actuator监控的401无权限访问
  5. Java中父类的私有数据和静态数据在内存中是如何存储的?
  6. VC++ .net 2005运行库解析
  7. 95-242-040-源码-快照-Flink 分布式快照的设计-存储
  8. Golang并发:再也不愁选channel还是选锁
  9. 普通账户信息是SIEM的盲点
  10. 如何打开SAR 文件
  11. 动易sitefactory 3.0 模板标签系统
  12. python控制摄像头云台_python-onvif实现客户端控制相机云台
  13. Git error : bad signature 0x00000000 fatal: index file corrupt
  14. SpringBoot整合log4j2
  15. html5 侧滑菜单,侧滑菜单
  16. 记录ubuntu16.04使用kinectv2报错openni2_grabber.cpp @ 325 : No devices connected.找不到设备的解决过程
  17. 华为鸿蒙是诺基亚,诺基亚、三星前车之鉴,华为鸿蒙必须做好这两点
  18. jquery获取第一个子元素
  19. EXCEPTION_ACCESS_VIOLATION
  20. 合肥工业大学宣城校区大学生创新创业训练项目申报书:“基于 Spark 平台的人工智能知识的知识图谱构建”

热门文章

  1. Lombok不生效 报错Error: java:找不到符号
  2. 基于 Kafka 和 ElasticSearch,LinkedIn是如何构建实时日志分析系统的?
  3. 蓝牙 传输 socket
  4. 加密软件推荐PGP、TrueCrypt、GPG
  5. android usb读写,安卓(Android)下如何开发USB NFC读写器app
  6. 弘辽科技:拼多多怎么提升转化率?做到这五点!
  7. 分享66个ASP.NET学校班级源码,总有一款适合您
  8. 如何在matlab代码中加一层分隔?
  9. cad批量打印_CAD批量打印(分图大师)
  10. 日常工作中的几个excel小技巧