在 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. 对React children 的深入理解

    React的核心为组件.你可以像嵌套HTML标签一样嵌套使用这些组件,这使得编写JSX更加容易因为它类似于标记语言. 当我刚开始学习React时,当时我认为“使用 props.children 就这么 ...

  2. 前端_JQuery

    使用参考:http://jquery.cuishifeng.cn/ 目录 jQuery是什么 jQuery对象 寻找元素(选择器和筛选器) 选择器 表单属性选择器 筛选器 操作元素(属性.css.文档 ...

  3. Week2-作业一——《构建之法》三章精读之想

    Week2-作业一——精读<构建之法> 前言 其实我本人是不经常看书的,电子书倒是看了不少,实体书真的不经常看,但是为了这次作业的需求,我还是选择静下心来阅读一下这本<构建之法> ...

  4. 信安实践——自建CA证书搭建https服务器

    1.理论知识 https简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HT ...

  5. 蜗牛慢慢爬 LeetCode 9. Palindrome Number [Difficulty: Easy]

    题目 Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could nega ...

  6. [转帖]一文读懂 HTTP/2

    一文读懂 HTTP/2 http://support.upyun.com/hc/kb/article/1048799/ 又小拍 • 发表于:2017年05月18日 15:34:45 • 更新于:201 ...

  7. C语言版kafka消费者代码运行时异常kafka receive failed disconnected

    https://github.com/edenhill/librdkafka/wiki/Broker-version-compatibility如果使用了broker版本是0.8的话, 在运行例程时需 ...

  8. 使用pyquery是遇到的一个403的问题

    在网上爬虫时,本地windows下运行pyquery代码正常,但是在linux下运行时一直报错 403 Forbidden.刚开始的代码如下 from pyquery import PyQuery a ...

  9. Redis:主从复制

    前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的 ...

  10. css 样式 文字过长 换行处理方法

    css强制换行.强制不换行及自动换行的写法 css强制不换行 div{white-space:nowrap;} css自动换行 div{ word-wrap: break-word; word-bre ...