在 ARM Linux 的开发中,人们趋向于使用 Linaro(http://www.linaro.org/)工具链团队维护的 ARM 工具链,它以每月一次的形式发布新的版本,编译好的可执行文件可以网站下载。Linaro 是 ARM Linux 领域中最著名最具技术成就的开源组织。

命名含义解释

  • gcc-linaro-*x86_64_arm-linux-gnueabihf.tar.xz

    • Linux 64-bit binaries for the ARMv7 Linux hard float cross-toolchain

    gcc-linaro-*i686-mingw32_arm-linux-gnueabihf.tar.xz

    • Windows 32-bit binaries for the ARMv7 Linux hard float cross-toolchain

其他工具链提供方:

ARM官方:https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads

  命名习惯:gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2

工具链包含很多工具,比如 gcc、strip、objdump、ld、gprof、nm、readelf、addr2line等。

strip:可以删除可执行文件中的符号表和调试信息等来实现缩减程序体积的目的。

gprof:在编译过程中在函数入口处插入计数器以收集每个函数的被调用情况和被调用次数,检查程序计数器并在分析时找出与程序计数器对应的函数来统计函数占用的时间。

objdump:反汇编工具。

交叉工具链名字解析:

arm-linux-gnueabihf-gcc

arm 表示此工具作用于 arm 架构;

linux 表示目标文件的执行依赖 linux 操作系统,也就是产生的目标文件需要在 linux 操作系统下才能正常运行;

gnu 即 GNU,表示此工具遵循 GNU 的规定;

eabi 即嵌入式应用二进制接口。它指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的徽标语言也可以使用 EABI 作为与兼容的编译器生成的汇编语言的接口

hf 完全硬浮点,工具链的选项 -mfloat-abi=hard。首先,需要目标文件所执行的 arm 具有浮点处理单元(FPU),生成的目标文件对待浮点运算的策略(hard)是:用 FPU 计算,函数传参数也用 FPU 中的浮点寄存器传,省去了转换,速度最快,但是中断负荷高。还有两种对待浮点运算的测量 softpt 和 soft,工具链中不带 hf 默认 -mfloat-abi=softpt,策略是用 FPU 计算,函数传参数使用整型寄存器传递,中断时只需要保存整型寄存器,中断负荷小,但是参数需要转换为浮点型再计算。soft则完全采用软浮点(linux支持完全软浮点)。

命名规则:

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

  • arch – 体系架构,如ARM,MIPS
  • vendor – 工具链提供商
  • os – 目标操作系统
  • eabi – 嵌入式应用二进制接口(Embedded Application Binary Interface)

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

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

arm-linux-gneabihf-gcc 和 arm-none-linux-gnueabi-gcc

linaro 的 arm-linux-gneabihf-gcc 与 CodeSourcery 的 arm-none-linux-gnueabi-gcc 类似,都可以用来编译基于ARM平台所有环节代码。CodeSourcery 的交叉编译工具发布较早,从2005年开始一直到现在。Linaro 则是由ARM、飞思卡尔、IBM、Samsung、ST-Ericsson和TI等厂商联合,为开发不同半导体公司系统单芯片(SoC)平台的共通软件的一个非盈利公司。Linaro于2010年成立,并于当年11月发布第一版ARM Cortex-A 为核心的 SoC 进行效能优化的软件工具。

linux driver ------ 交叉工具链(cross toolchain)的更多相关文章

  1. LFS(Linux From Scratch)构建过程全记录(五):交叉工具链的构建

    写在前面 本文将详细讲述如何构建工具链 前置知识 在LFS-BOOK中,我们需要学习一些关于"交叉编译"的内容,详见书本 安装Binutils-2.39 我们cd到sources文 ...

  2. Linux交叉工具链安装

    这篇博文http://blog.csdn.net/u010957054/article/details/58056863 提到了一个好的百度网盘,里面有各个版本的交叉工具链. http://www.3 ...

  3. Linux ARM交叉编译工具链制作过程【转】

    本文转载自:http://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/02/21/2920999.html 一.下载源文件 源代码文件及其版本与下载 ...

  4. X86上搭建交叉工具链,来给龙芯笔记本编译本地工具链(未完待续)

    故事的背景是,我买了一台龙芯2F的笔记本来装B. 为什么说是装B呢?因为不但操作系统是Linux,而且CPU还是龙芯的. 一般人有这么酷的装备吗?简直是装B大圣啊. 这里一定要申明一点,本人不是IT技 ...

  5. 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远 ...

  6. Ubuntu16.04交叉工具链安装

    前言: 开发环境是64位的ubuntu16.04,交叉工具链是通过sudo apt-get install ....安装的,移植uboot2014.10,但是很奇怪,按照网上的介绍在start.s里面 ...

  7. ARM裸机开发之交叉工具链和MakeFile工程管理

    一.交叉工具链 嵌入式Linux开发采用交叉开发,简单来说就是在宿主机(PC机)上面编译出能够在其他硬件平台上面运行的程序.在这个过程中,需要用到许多的交叉工具,这些交叉工具的集合就叫做交叉工具链.下 ...

  8. FriendlyARM交叉工具链以及编译第一个arm9应用

    不记录什么都会忘光!!!这两天又要用到开发板来做项目,可是好久没有碰了,最近一直在搞上层的东东,对rails和前端感兴趣,我这是不要毕业的节奏了吗?好吧,既然什么都忘光掉了,那就干脆来个痛快,重新装机 ...

  9. 交叉工具链和makefile

    交叉工具链: arm-linux-gcc:交叉编译器 arm-linux-ld:交叉连接器 arm-linux-readelf:交叉ELF文件工具 arm-linux-objdump:交叉反汇编器 a ...

随机推荐

  1. python 原生态调用server服务————SimpleHTTPServer

    python 原生态调用server服务,接收http传递的参数并且处理返回结果 很多blog中都是抄了官网的,没有说明参数如何接收 1.代码中提供了post与get两种方式来发起请求,但是传递参数时 ...

  2. 转载 intellij IDEA 使用体验 (本人感觉它的使用是一种趋势)

    从去年开始转java以来,一直在寻找一款趁手的兵器,eclipse虽然是很多java程序员的首选,但是我发现一旦安装了一些插件,workspace中的项目达到数10个以后,经常崩溃,实在影响编程的心情 ...

  3. excel表格如何限制单元格输入内容

    一天一天实在太快,周六了~~~ 测试任务不太紧的时候就可以着手开始整理本月的测试项目,选择的是excel,清晰明了. 原来excel的功能远比我们想象的强大与好用,今天先介绍如何限制单元格内容: 如下 ...

  4. 11th 单元测试工具JUnit的学习

    1.写好一个简易的四则运算的程序 UnitTest类文件: public class UnitTest { int a; int b; int answer;//正确答案 public int plu ...

  5. CentOS7 修改 启动级别

    1. centos7 之前应该使用init 的启动脚本 不支持并行 速度比较慢, centos7 开始使用systemd 的模式 提高了开机的性能 所以之前的init 脚本修改 启动级别应该就无效了 ...

  6. Read N Characters Given Read4

    The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is the actu ...

  7. ACM数论之旅4---扩展欧几里德算法(欧几里德(・∀・)?是谁?)

    为什么老是碰上 扩展欧几里德算法 ( •̀∀•́ )最讨厌数论了 看来是时候学一学了 度娘百科说: 首先, ax+by = gcd(a, b) 这个公式肯定有解 (( •̀∀•́ )她说根据数论中的相 ...

  8. Dubbo学习(一) Dubbo原理浅析

    一.初入Dubbo Dubbo学习文档: http://dubbo.incubator.apache.org/books/dubbo-user-book/ http://dubbo.incubator ...

  9. Jquery 中 $.getJSON的用法

    之前类似的方法用过 $.post, $.get,$.ajax,还是第一次用这个 $.getJSON. 前三个都是用作异步请求的,那么最后一个呢?其实也是异步请求的,和 $.get 最类似,因为他也是将 ...

  10. 计算机网络【10】—— Cookie与Session

    一.cookie 和session 的区别 a.cookie数据存放在客户的浏览器上,session数据放在服务器上. b.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKI ...