arm系列交叉编译器各版本区别

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

交叉编译器命名规则

交叉编译器的命名规则: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中的浮点寄存器传,省去了转换,性能最好,但是中断负荷高。文章来源地址https://www.toymoban.com/news/detail-788799.html

参考

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

到了这里,关于arm系列交叉编译器各版本区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • [linux]Ubuntu 18.04安装arm-linux-gcc交叉编译器的两种方法

    第一种:apt安装法: Ctrl+Alt+T弹出终端,使用如下命令进行arm-linux-gcc的安装:   使用如下命令进行arm-linux-g++的安装:   如果要卸载时使用如下命令进行移除,arm-linux-gcc的卸载:   arm-linux-g++的卸载:  第二种源码安装: 目前网上搜索发现,最多人安装的是4.4.3版本的

    2024年02月05日
    浏览(58)
  • ARM 编译器 Arm Compiler for Embedded 6 相关工具链简介

    目录 1, Introduction to Arm® Compiler 6 1.1 armclang 1.2 armasm 1.3 armlink 1.4 armar 1.5 fromelf 1.6 Arm C++ libraries 1.7 Arm C libraries 1,8 Application development ,ARM程序开发流程 2,ARM 编译器 5和ARM 编译器 6的兼容性 3,ARM编译器相关链接 Arm Compiler 6 是 Arm 中用于 Arm Cortex® 和 Arm Neoverse™ 处理器的最先

    2023年04月12日
    浏览(45)
  • 交叉编译器介绍

    简介 ​ 要在 X86 的电脑上编译出能够在 Arm 上运行的程序,我们必须明确告诉编译器,编译生成的可执行文件需要以 Arm 指令集的标准编码。开发者们为不同的芯片开发了不同的编译器,比如针对 Arm 平台的 arm-linux-gcc,针对 mips 平台的 mips-linux-gnu-gcc,这些编译器都是基于 G

    2024年02月06日
    浏览(63)
  • [笔记]ARMv7/ARMv8 交叉编译器下载

    开发 Cortex-A7、Cortex-A72 或其他 ARM 架构 profile 芯片时,经常需要下载对应架构的交叉编译器,所以写这篇笔记,用于记录一下交叉编译器下载流程,免得搞忘。 编译环境:ubuntu 虚拟机 下载地址 我们可以从 ARM 官网的 Arm Developer下载交叉编译器,这个网站也包含几乎所有的 A

    2024年02月02日
    浏览(51)
  • riscv-gnu-toolchain 交叉编译器如何构建?

    这个指令在编译完成后会自动安装到“/opt/riscv/gcc”目录,由于要操作“/opt/riscv/gcc”目录需要超级管理员权限,所以我们要记得加上 sudo 切换到“/opt/riscv/gcc/bin”目录下,执行如下指令 看是否有riscv64-unknown-elf-gcc版本信息

    2024年04月22日
    浏览(42)
  • ARM嵌入式编译器编译优化选项 -O

    Arm嵌入式编译器可以执行一些优化来减少代码量并提高应用程序的性能。不同的优化级别有不同的优化目标,不仅如此,针对某个目标进行优化会对其他目标产生影响。比如想减小生成的代码量,势必会影响到该代码的性能。所以优化级别总是这些不同目标(代码量,程序性

    2024年02月16日
    浏览(65)
  • ARM编译器5.06下载安装

    进入官方网站ARM Complier v5.06官网下载页面 进入后的界面为 往下翻,找到如图位置的5.06 for windows的文件,点击下载,下载时需要登录账号 先解压下载的压缩文件,在installer文件夹里面有一个 setup.exe 文件,双击它, 同意协议,在安装位置选择 keil 安装位置的 ARM 文件夹下,在

    2024年02月22日
    浏览(47)
  • KEIL MDK arm编译器 添加教程

    1.下载编译器安装文件 arm编译器6.16(适用于windows 64位)安装文件可在如下网址免费下载: arm编译器6.16(适用于Windows64位)-嵌入式文档类资源-CSDN文库 https://download.csdn.net/download/WG_IECAS/87342708 如需其他版本编译器,可到KEIL官网查找下载,快速网址: Arm Compiler downloads index h

    2023年04月08日
    浏览(58)
  • 物联网|ARM|Keil同时安装Keil的C51、C251和MDK|增加V5编译器|物联网开发系列课程之零基础玩转Cortex-M系列CPU-学习笔记(1)

    1.物联网的定义 利用局部网络或互联网等通信技术把传感器、控制器、机器、人员和物等通过新的方式联在一起,形成人与物、物与物相联,实现信息化、远程管理控制和智能化的网络。 2.物联网的组成 3.物联网应用举例智能家居 1物联网的数据源头 2物联的局域网络源头 1

    2024年02月05日
    浏览(71)
  • C++输出编译器名称和版本以及编译器位数、C/C++常见编译器

    常见的C/C++编译器主要包括以下几种: GCC (GNU Compiler Collection):GCC是一个广泛使用的编译器套件,支持多种编程语言,包括C、C++、Objective-C等。它具有强大的优化能力和跨平台支持,并且被广泛应用于各种操作系统和开发环境。 Clang :Clang是基于LLVM的编译器前端,支持C、

    2024年02月13日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包