当前位置: 首页 > news >正文

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

目录

  • 交叉编译器命名规则
  • 具体编译器举例
    • 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 交叉编译工具链
http://www.lryc.cn/news/56257.html

相关文章:

  • 随笔记录工作日志
  • LinkedHashMap源码分析以及LRU的应用
  • 【每日一题Day166】LC1053交换一次的先前排列 | 贪心
  • Canal增量数据订阅和消费——原理详解
  • 为什么要使用线程池
  • 在云服务部署前后端以及上传数据库
  • Onedrive for Business迁移方案 | 分享一
  • pt01数据类型、语句选择
  • ChatGPT 存在很大的隐私问题
  • 图的迭代深度优先遍历
  • 华为OD机试-开放日活动-2022Q4 A卷-Py/Java/JS
  • 两亲性聚合物:Lauric acid PEG Maleimide,Mal-PEG-Lauric acid,月桂酸PEG马来酰亚胺,试剂知识分享
  • FB使用入口点函数例子
  • 学习周报4/9
  • 49天精通Java,第14天,Java泛型方法的定义和使用
  • 20230402英语学习
  • Java知识复习(十七)SpringCloud
  • MySQL 数据库操作
  • Cesium更换地球背景
  • 测试人员的瓶颈期
  • HTML5 <form> 标签
  • 编译技术-词法理论
  • 【20】核心易中期刊推荐——计算机科学电子通信(EI索引)
  • Vue 3.0 风格指南 2
  • ChatGPT遭多国调查,OpenAI凌晨就安全问题发文,GPT-5要暂缓?
  • 网络安全书籍推荐
  • 【独家】华为OD机试 - 狼羊过河 or 羊、狼、农夫过河(C 语言解题)
  • 东八区的 springboot 如何配置序列化
  • 论文阅读_LLaMA
  • 腾讯空降测试工程师,绩效次次拿S,真是砂纸擦屁股,给我露了一手啊