当前位置: 首页 > 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 交叉编译工具链

相关文章:

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

目录交叉编译器命名规则具体编译器举例crosstool-ng交叉编译工具样本arm交叉编译器举例几个概念ABI与EABIgnueabi与gnueabihf参考交叉编译器命名规则 交叉编译器的命名规则:arch [-vendor] [-os] [-(gnu)eabi] [-language] arch - 体系架构, 如arm&…...

随笔记录工作日志

工作中遇到的问题随笔记录 1、将map集合中的key/value数据按照一定的需求过滤出来,并将过滤出来的map的key值存到list集合中 首先想到的是stream流,但是我对stream流的用法基本不熟,记不住方法,如果坚持用stream流去实现这个需求…...

LinkedHashMap源码分析以及LRU的应用

LinkedHashMap源码分析以及LRU的应用 LinkedHashMap简介 LinkedHashMap我们都知道是在HashMap的基础上,保证了元素添加时的顺序;除此之外,它还支持LRU可以当做缓存中心使用 源码分析目的 分析保持元素有序性是如何实现的 LRU是如何实现的…...

【每日一题Day166】LC1053交换一次的先前排列 | 贪心

交换一次的先前排列【LC1053】 给你一个正整数数组 arr(可能存在重复的元素),请你返回可在 一次交换(交换两数字 arr[i] 和 arr[j] 的位置)后得到的、按字典序排列小于 arr 的最大排列。 如果无法这么操作,…...

Canal增量数据订阅和消费——原理详解

文章目录 简介工作原理MySQL主备复制原理canal 工作原理Canal-HA机制应用场景同步缓存 Redis /全文搜索 ES下发任务数据异构简介 canal 翻译为管道,主要用途是基于 MySQL 数据库的增量日志 Binlog 解析,提供增量数据订阅和消费。 早期阿里巴巴因为杭州和美国双机房部署,存…...

为什么要使用线程池

Java线程的创建非常昂贵,需要JVM和OS(操作系统)配合完成大量的工作: (1)必须为线程堆栈分配和初始化大量内存块,其中包含至少1MB的栈内存。 (2)需要进行系统调用,以便在OS(操作系统)…...

在云服务部署前后端以及上传数据库

1.上传数据库(sql文件) 首先建立一个目录,用于存放要部署的sql文件,然后在此目录中进入mysql 进入后建立一个数据库,create database 数据库名 完成后,通过select * from 表名可以查到数据说明导入成功。 2.部署Maven后端 将Ma…...

Onedrive for Business迁移方案 | 分享一

文章目录 前言 一、Onedrive for Business迁移方案应用范围? 1.准备目标平台 2.导出源平台数据 <...

pt01数据类型、语句选择

python01 pycharm常用快捷键 (1) 移动到本行开头&#xff1a;home键 (2) 移动到本行末尾&#xff1a;end键盘 (3) 注释代码&#xff1a;ctrl / (4) 复制行&#xff1a;ctrl d #光标放行上 (5) 删除行&#xff1a;shift delete (6) 选择列&#xff1a;shift alt 鼠标左键…...

ChatGPT 存在很大的隐私问题

当 OpenAI 发布时 2020 年 7 月的 GPT-3&#xff0c;它提供了用于训练大型语言模型的数据的一瞥。 根据一篇技术论文&#xff0c;从网络、帖子、书籍等中收集的数百万页被用于创建生成文本系统。 在此数据中收集的是您在网上分享的一些关于您自己的个人信息,这些数据现在让 O…...

图的迭代深度优先遍历

图的深度优先遍历(或搜索)类似于树的深度优先遍历(DFS)。这里唯一的问题是,与树不同,图可能包含循环,因此一个节点可能会被访问​​两次。为避免多次处理一个节点,请使用布尔访问数组。 例子: 输入: n = 4, e = 6 0 -> 1, 0 -> 2, 1 -> 2, 2 -> 0, …...

华为OD机试-开放日活动-2022Q4 A卷-Py/Java/JS

某部门开展Family Day开放日活动&#xff0c;其中有个从桶里取球的游戏&#xff0c;游戏规则如下:有N个容量一样的小桶等距排开&#xff0c;且每个小桶都默认装了数量不等的小球&#xff0c; 每个小桶装的小球数量记录在数组 bucketBallNums 中,游戏开始时&#xff0c;要求所有…...

两亲性聚合物:Lauric acid PEG Maleimide,Mal-PEG-Lauric acid,月桂酸PEG马来酰亚胺,试剂知识分享

Lauric acid PEG Maleimide&#xff0c;Lauric acid PEG Mal| 月桂酸PEG马来酰亚胺 | CAS&#xff1a;N/A | 端基取代率&#xff1a;95%一、试剂参数信息&#xff1a; 外观&#xff08;Appearance&#xff09;&#xff1a;灰白色/白色固体或粘性液体取决于分子量 溶解性&am…...

FB使用入口点函数例子

一、DLL的入口点 1.1 VFB的自带DLL模式入口 FB是把代码转成C&#xff08;GCC编译&#xff09;或者汇编&#xff08;GAS编译&#xff09;后编译的&#xff0c;本身就有一个main函数&#xff0c;所以在程序里其实不需要入口点&#xff0c;直接写就可以顺序执行&#xff0c;而有的…...

学习周报4/9

文章目录前言文献阅读摘要简介方法结论时间序列预测总结前言 本周阅读文献《Improving LSTM hydrological modeling with spatiotemporal deep learning and multi-task learning: A case study of three mountainous areas on the Tibetan Plateau》&#xff0c;文章主要基于…...

49天精通Java,第14天,Java泛型方法的定义和使用

目录一、基本介绍1、Java泛型的基本语法格式为&#xff1a;2、在使用泛型时&#xff0c;还需要注意以下几点&#xff1a;二、泛型的优点1、类型安全2、消除强制类型转换3、更高的效率4、潜在的性能收益三、常见泛型字母含义四、使用泛型时的注意事项五、泛型的使用1、泛型类2、…...

20230402英语学习

reasonable adj.合理的&#xff1b;通情达理的&#xff1b;明智的&#xff0c;理智的 abstract adj.抽象的&#xff0c;理论的 reflection n.反射; 映像, 倒影; 反映; 表达, 抒发; (长相等)酷似的人; 惟妙惟肖的事物; 深思; 考虑 instruction n.教授; 教导, 指导; 指示, 命令…...

Java知识复习(十七)SpringCloud

1、什么是微服务架构 微服务架构就是将单体的应用程序分成多个应用程序&#xff0c;这多个应用程序就成为微服务&#xff0c;每个微服务运行在自己的进程中&#xff0c;并使用轻量级的机制通信这些服务围绕业务能力来划分&#xff0c;并通过自动化部署机制来独立部署。这些服务…...

MySQL 数据库操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、关系模型二、数据库的操作 创建数据库查看数据库选择数据库删除数据库三、MySQL 数据库命名规范总结一、关系模型 关系数据库是建立在关系模型上的。而关系模…...

Cesium更换地球背景

设置背景图片 #cesiumContainer {width: 100%;height: 100%;background-image: url("/assets/image/背景.png"); }设置渲染, 用来去掉地球表面的大气效果的黑圈问题 this.viewer new Cesium.Viewer("cesiumContainer", {......// 设置渲染orderIndepe…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...