如何得到交叉编译器

了解了之前的交叉编译器的命名规则后,也就明白了交叉编译,针对不同架构,平台,目标系统等的区别。

而对于嵌入式开发,想要获得,针对我们所需要的,目标的CPU所合适的交叉编译器,就成了接下来,顺其自然要考虑的事情。

想要得到,可用的,针对自己的CPU的交叉编译器,主要有两种方式:

3.2.1. 拿来主义:直接去下载和使用别人已经编译好的交叉编译器

难度等级:1级

这个没有啥特殊要求解释的,就是,网上,总会有,免费的,好用的各种资源的。

其中就包括,别人,已经针对某些CPU,某些平台,编译好了交叉编译器了

而你要做的事情就是:找到合适的,并下载下来使用。

关于网上,现存的,可用的,针对arm的交叉编译器,可以参考我之前整理的一些:

【整理】arm的交叉工具链(交叉编译器)下载

常见的,获得交叉编译器的方式

其实,相对比较常见的,获得可用的,交叉编译器的方式是:

当你购买某一家的(嵌入式)开发板的时候,然后开发板厂家,提供你对应的硬件开发板的同时,也提供对应的整套开发软件。

此处,整套的开发软件,其中就包括,对应的,用来编译其厂家提供的BSP的软件源码的,交叉编译器。

即:一般来说,你买了某家的某款的嵌入式开发板的时候,就送了对应的交叉编译器

例 3.5. 购买了TQ2440的开发板,就送了对应的交叉编译器

拿我之前,购买的TQ2440的开发板为例

买了TQ2440的开发板的时候,就送了对应的光盘了。

光盘里面,就包含了对应的各种开发资料和交叉编译器

其实,对于交叉编译器本身,TQ2440的厂家,叫做天嵌公司,其本身有自己的论坛,论坛里面,也可以免费下载到对应的交叉编译器的

[光盘下载] 2010年6月 最新TQ2440光盘下载 (Linux内核,WinCE的eboot,uboot均有更新)

3.2.2. 自己动手,丰衣足食:自己去编译出来一套自己想要的交叉编译器

如果网上没有合适的交叉编译器,那么就需要你手动去制作了。

自己手动制作交叉编译器,又分两种:

3.2.2.1. 白手起家从头开始制作交叉编译器

难度等级:10级

此法,目前我也还没折腾过

只是知道,难度,相对是最大的

等抽空折腾了之后,再总结出来。

3.2.2.2. 借助别人的工具去制作交叉编译器

难度等级:6级

相关旧帖:【整理】交叉编译和现存的交叉编译工具

对于,制作交叉编译器这样的事情,本身是很需要技术含量,和很耗时的事情

所以,对此,现在现存很多相关的工具,以简化制作交叉编译器这个事情的复杂度,帮你节省很多精力和时间

而你所要做的事情就只是:

了解有哪些工具,选个合适的工具,搞懂如何使用,用其制作出你所需要的交叉编译器,即可。

关于现在有哪些交叉编译器的制作工具,正是下文正要详细解释的:

第 3.3 节 “各种制作交叉编译器的工具”

3.3. 各种制作交叉编译器的工具

下面,就针对,现存已知的,交叉编译器,的制作工具,进行简单的总结和介绍:

3.3.1. crosstool-NG

crosstool-ng的主页:http://crosstool-ng.org/

关于crosstool-ng的更多介绍和使用,可以参考我的另外一个教程:

crosstool-ng详解

3.3.2. Buildroot

Buildroot主页:http://www.buildroot.net/

特点:不仅能制作交叉工具链,而且还可以制作根文件系统rootfs。而且还支持同时编译对应的Linux内核和Uboot。

关于Buildroot的更多介绍和使用,可以参考我的另外一个教程:

Buildroot详解

3.3.3. crosstool

http://kegel.com/crosstool/

现在用的最多的是那个0.43的版本:

crosstool-0.43.tar.gz

也可以去在线浏览对应的源码:在线浏览crosstool-0.43源码

3.3.4. Embedded Linux Development Kit (ELDK)

http://www.denx.de/wiki/DULG/ELDK

也是和交叉编译相关的。

提供编译好的东西供使用。

可以去这里:

http://www.denx.de/wiki/view/DULG/ELDKAvailability

去下载。

3.3.5. OpenEmbedded的BitBake

OpenEmbedded是一个创建嵌入式Linux的整套框架,其中包括了制作对应的交叉编译器的工具,叫做BitBake

OpenEmbedded简称OE。

OpenEmbedded主页:http://www.openembedded.org/wiki/Main_Page

OpenEmbedded的在线文档:OpenEmbedded User Manual

关于BitBake可去参考:

http://en.wikipedia.org/wiki/BitBake

中的:

http://developer.berlios.de/projects/bitbake

3.3.6. Crossdev

http://www.gentoo.org/proj/en/base/embedded/handbook/

中的:

http://www.gentoo.org/proj/en/base/embedded/handbook/?part=1&chap=1

3.3.7. OSELAS.Toolchain()

http://www.pengutronix.de/oselas/toolchain/index_en.html

3.4. 使用已有的交叉编译器和自己手动编译交叉编译器之间的对比

后来在:

http://ymorin.is-a-geek.org/projects/crosstool

中发现作者ymorin之前的一些会议演讲:

http://crosstool-ng.org/publis/

等内容,比如:

200910-ELCE-Morin-Building_our_own_toolchains.pdf

其中,对于下载别人已有的交叉编译器和自己手动编译一个交叉编译器之间,做了些对比,分析了各自的优缺点。

个人觉得其说的比较全面,特此整理如下:

3.4.1. 使用已有交叉编译器的优点

  • 安装和使用都很方便

    别人发布的,已经编译好的交叉编译器,基本都是压缩包

    然后你解压后,即可得到对应的,可用的,交叉编译器

    其效果,类似于,之前自己编译出来的交叉编译器,有对应的交叉编译版本的gcc,ld等等程序,即:

    arm-xscale-linux-gnueabi-gcc

    arm-xscale-linux-gnueabi-ld

    等等文件的了。

    比如:

    【记录】Ubuntu下用crosstool-ng为xscale建立交叉编译器arm-xscale-linux-gnueabi-gcc

    中的:

    [email protected]:~/develop/crosstool-ng/crosstool-ng-1.18.0_build$ ls /home/crifan/develop/crosstool-ng/x-tools/arm-xscale-linux-gnueabi/bin -lh
    total 18M
    -r-xr-xr-x 1 crifan crifan 605K Aug  8 01:10 arm-xscale-linux-gnueabi-addr2line
    -r-xr-xr-x 2 crifan crifan 633K Aug  8 01:10 arm-xscale-linux-gnueabi-ar
    -r-xr-xr-x 2 crifan crifan 1.1M Aug  8 01:10 arm-xscale-linux-gnueabi-as
    -r-xr-xr-x 2 crifan crifan 276K Aug  8 01:10 arm-xscale-linux-gnueabi-c++
    lrwxrwxrwx 1 crifan crifan   28 Aug  8 00:54 arm-xscale-linux-gnueabi-cc -> arm-xscale-linux-gnueabi-gcc
    -r-xr-xr-x 1 crifan crifan 605K Aug  8 01:10 arm-xscale-linux-gnueabi-c++filt
    -r-xr-xr-x 1 crifan crifan 276K Aug  8 01:10 arm-xscale-linux-gnueabi-cpp
    -r-xr-xr-x 1 crifan crifan 3.1K Aug  7 23:57 arm-xscale-linux-gnueabi-ct-ng.config
    -r-xr-xr-x 1 crifan crifan  26K Aug  8 01:10 arm-xscale-linux-gnueabi-elfedit
    -r-xr-xr-x 2 crifan crifan 276K Aug  8 01:10 arm-xscale-linux-gnueabi-g++
    -r-xr-xr-x 2 crifan crifan 272K Aug  8 01:10 arm-xscale-linux-gnueabi-gcc
    -r-xr-xr-x 2 crifan crifan 272K Aug  8 01:10 arm-xscale-linux-gnueabi-gcc-4.6.0
    -r-xr-xr-x 1 crifan crifan  30K Aug  8 01:10 arm-xscale-linux-gnueabi-gcov
    -r-xr-xr-x 1 crifan crifan 2.7M Aug  8 01:10 arm-xscale-linux-gnueabi-gdb
    -r-xr-xr-x 1 crifan crifan 2.7M Aug  8 01:10 arm-xscale-linux-gnueabi-gdbtui
    -r-xr-xr-x 1 crifan crifan 670K Aug  8 01:10 arm-xscale-linux-gnueabi-gprof
    -r-xr-xr-x 4 crifan crifan 1.1M Aug  8 01:10 arm-xscale-linux-gnueabi-ld
    -r-xr-xr-x 4 crifan crifan 1.1M Aug  8 01:10 arm-xscale-linux-gnueabi-ld.bfd
    -r-xr-xr-x 1 crifan crifan  11K Aug  8 01:10 arm-xscale-linux-gnueabi-ldd
    -r-xr-xr-x 2 crifan crifan 617K Aug  8 01:10 arm-xscale-linux-gnueabi-nm
    -r-xr-xr-x 2 crifan crifan 775K Aug  8 01:10 arm-xscale-linux-gnueabi-objcopy
    -r-xr-xr-x 2 crifan crifan 943K Aug  8 01:10 arm-xscale-linux-gnueabi-objdump
    -r-xr-xr-x 1 crifan crifan  11K Aug  8 01:10 arm-xscale-linux-gnueabi-populate
    -r-xr-xr-x 2 crifan crifan 633K Aug  8 01:10 arm-xscale-linux-gnueabi-ranlib
    -r-xr-xr-x 1 crifan crifan 317K Aug  8 01:10 arm-xscale-linux-gnueabi-readelf
    -r-xr-xr-x 1 crifan crifan 609K Aug  8 01:10 arm-xscale-linux-gnueabi-size
    -r-xr-xr-x 1 crifan crifan 605K Aug  8 01:10 arm-xscale-linux-gnueabi-strings
    -r-xr-xr-x 2 crifan crifan 775K Aug  8 01:10 arm-xscale-linux-gnueabi-strip
    [email protected]:~/develop/crosstool-ng/crosstool-ng-1.18.0_build$
    

    然后,你把包含了上述arm-xscale-linux-gnueabi-gcc等文件的路径,加到环境变量PATH中,然后就可以使用了。

  • 已验证和测试

    别人发布的,交叉编译器,一般都是,经过相应的验证和测试

    保证了,可以使用,不会出问题的。

    所以,你可以放心使用,不会担心,出现编译程序出错的时候,确保不会是由于交叉编译器问题。

  • 已优化

    别人发布的交叉编译器,一般都是经过,在制作的时候,加了一些优化参数

    使得针对某些方面,比如性能等等,做了相应的优化

    使得,交叉编译器编译出来的程序,对于目标的CPU,是相对最优的

  • (售后)支持比较好

    就像你买东西,很多时候,不出问题的时候,售后,看不出有啥用

    但是当出问题,就发现,售后其实很重要

    而搞嵌入式开发,尤其是交叉编译

    很多时候,涉及到很多技术细节

    有时候遇到问题的话,如果你不熟悉,不了解,不会解决

    这时候,去找到,交叉编译器的提供者,去咨询

    对于你来说,就显得很有价值,很重要了。

    别人提供的交叉编译器的话,往往都是提供后续的技术支持的

    对于多数的开发者,这点,还是有价值的

3.4.1.1. 已有的交叉工具链的下载

参考:http://www.cnblogs.com/esion/archive/2012/08/28/2660033.html,其实是可以安装后,设置好环境变量,之后就可以一直不变的去使用的。

http://www.myir-tech.com/download.asp中提供了很多东西下载,包括工具链。

3.4.1.1.1. ELDK的下载

http://www.denx.de/en/News/WebHome

-> ftp://ftp.denx.de/pub/eldk/5.3/

-> ftp://ftp.denx.de/pub/eldk/5.3/iso/

中有各种的,基于arm的eldk,比如:

  • eldk-5.3-armv4t.iso
  • eldk-5.3-armv5te.iso
  • eldk-5.3-armv6.iso
  • eldk-5.3-armv6.iso
  • eldk-5.3-armv7a-hf.iso
  • eldk-5.3-armv7a.iso

貌似是下载下来,解压后,去运行安装脚本后,就可以使用了。

3.4.2. 使用已有交叉编译器的缺点

  • 无针对你自己的CPU的优化

    别人提供的,已有的交叉编译器,相对来说,更多时候,都是针对某个系列的CPU,进行制作出来的,进行优化的

    即,其优化,也是相对比较通用的

    如果你的CPU和其不同,则其就没有对应的优化了

  • 专有化

    和上面有点类似,即没有针对你自己的CPU,进行优化
  • 太老,太旧

    别人给的,网上可以下载到的,很多交叉编译器,相对来说,版本都比较旧了,都是很老的,之前的了

    其所用的,其他各个组件,模块,也都是旧版本的

    旧的软件,对于新出来的CPU,新的功能等,自然没有对应的支持

    也就无法发挥新的硬件特性了了

  • 其所用的源码不清楚

    别人给你编译好的交叉编译器,你是可以用了

    但是,其针对于具体什么版本的源码,以及是否打了相应补丁等情况

    你是无法,也很难知道的

    所以,即无法掌控此已有交叉编译器的所用的源码的确切情况

    此点,针对于你对自己的CPU很熟悉的情况下,想要完全了解已有交叉编译器的背后的情况而言,算是个缺点

    即不能完全在你掌握范围内,不清楚后面的情况

  • 未必适合你的系统

    或许是不可重载(relocatable)的

    没有很方便的方式去获得一些系统库文件

    所以,未必真正适合你自己的,嵌入式系统环境

3.4.3. 自己手动编译交叉编译器的优点

  • 自定义各种组件及版本

    对于自己去制作交叉编译器的话,则其所用的各种组件,模块的版本,都可以自己选择和定制

  • 针对你自己的CPU进行特定的优化
  • 对于各种补丁包,已经很清楚了

    既然是自己制作交叉编译器,那么自然选择了,相对较新的源码包,以及各种模块

    其自然,已经现存有很多补丁包

    这些补丁包,修复了很多bug,或者是增加了很多新的功能支持等

    这时候,你就可以找到并打上这些补丁包

    以实现,修复该模块的已知的bug,增加新的功能的支持了

  • Same source for all targets

    暂未搞懂此点的确切含义。
  • 可以同步更新最新补丁

    相应的,如果有最新的补丁,也可以及时打上
  • 可重复

    对于自己制作交叉编译器的话,

    制作完成后,就确定了对应的各个模块的版本,有了对应的配置文件

    此配置,拿到别的地方,别人用同样的工具和类似的环境,是可以重新编译为其自己的

    即,所谓的可重复,别人可以利用你已经验证,可以正常制作和使用的各个版本的模块和配置,实现自己也制作一个属于自己的交叉编译器

  • 有社区支持

    当然,对应的,在制作交叉编译器期间,使用交叉编译器期间,

    出了问题,有任何疑问,都有对应的社区的,热心人,帮你解决,回答你的问题。

  • 适合你自己的系统

    如前所述,拿别人已制作好的交叉编译器,未必真正完全适合你自己的系统

    而如果你自己制作的话,当然就完全根据自己的需求,去制作出最适合自己的系统的交叉编译器了

3.4.4. 自己手动编译交叉编译器的缺点

  • 制作交叉编译器相对比较复杂

    制作交叉编译器,相对来说,是个技术活加体力活

    不仅仅要求有对应的知识背景,解决各种问题的能力,

    还要准备一定的时间和精力,去真正实现,真正去建立出来一个可用的交叉编译器

  • 可能存在的,对于你的处理器支持度不是足够好

    既然制作交叉编译器期间,可能需要打上很多的patch等等

    那也就存在,比如缺少了对应的补丁,补丁不太完整,补丁不合适等等特殊情况

    使得,对于对应的,有些处理器,支持度,不是很好

  • 验证

    在制作出了交叉编译器后,其实还需要一定的验证,保证其可用,好用。

    这也需要对应的技术能力,和精力,去实现。

  • 社区的支持

    对于社区的支持,有其之前所说的优点,那就是,社区活跃的话,可能解决问题的效率就相对较高

    但是当社区不够活跃,社区中没有合适的人,那么可能你的问题,就很难得到解决

    即,有问题的时候,依靠社区去解决,未必是完全靠谱的。

第 4 章 交叉编译心得和注意事项

目录

4.1. 交叉编译心得和注意事项

摘要

4.1. 交叉编译心得和注意事项

待整理:

相关旧帖:【整理】交叉编译心得和注意事项

参考书目

[1] GNU Binutils

[2] [光盘下载] 2010年6月 最新TQ2440光盘下载 (Linux内核,WinCE的eboot,uboot均有更新)

[3] http://kegel.com/crosstool/

[4] http://www.denx.de/wiki/DULG/ELDK

[5] http://www.openembedded.org/wiki/Main_Page

[6] http://en.wikipedia.org/wiki/BitBake

[7] http://www.gentoo.org/proj/en/base/embedded/handbook/

[8] http://www.pengutronix.de/oselas/toolchain/index_en.html

[9] http://anyhu.blog.sohu.com/214755651.html

[10] http://ymorin.is-a-geek.org/projects/crosstool

[11] 200910-ELCE-Morin-Building_our_own_toolchains.pdf

[12] 【整理】交叉编译和现存的交叉编译工具

[13] 【整理】关于Toolchain,cross toolchain,cross compiler

[14] 【记录】Ubuntu下为QEMU的arm平台交叉编译BusyBox

[15] 嵌入式开发之交叉编译器

[16] 【整理】crosstool中如何设置xscale的Tuple’s vendor string(CT_TARGET_VENDOR)

[17] 【记录】重试使用最新版本1.18.0的crosstool-ng去配置和编译xscale的交叉编译器

[18] 【已解决】uboot交叉编译出错:gcc/config/arm/lib1funcs.asm:1266: undefined reference to `raise’

[19] [整理]EABI和OABI

[20] 【整理】uclibc,eglibc,glibc之间的区别和联系

[21] 【整理】arm的交叉工具链(交叉编译器)下载

[22] crosstool-ng详解

[23] Buildroot详解

[24] 【记录】Ubuntu下用crosstool-ng为xscale建立交叉编译器arm-xscale-linux-gnueabi-gcc

[25] 【整理】交叉编译心得和注意事项

时间: 2024-10-08 21:33:55

如何得到交叉编译器的相关文章

[转载]arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别

arm交叉编译器gnueabi.none-eabi.arm-eabi.gnueabihf.gnueabi区别 (http://www.veryarm.com/296.html) 命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架构,如ARM,MIPS vendor - 工具链提供商 os - 目标操作系统 eabi - 嵌入式应用二进制接口(Embedded Application Binary Interface) 根

安装ARM交叉编译器

1.开发平台 虚拟机:VMware 12 操作系统:Ubuntu 14.04 64bit 2.准备ARM交叉编译工具包 编译uboot和linux kernel都需要ARM交叉工具链支持,这里使用Linaro提供的交叉编译工具.下载地址为:http://releases.linaro.org/ 注意:如果主机是64bit,请选择64位的交叉编译器工具链,32bit的主机选择32位的交叉工具链. The Linaro Toolchain Working Group is pleased to an

arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf的区别

命名规则 交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] [-gcc] arch – 体系架构,如ARM,MIPS vendor – 工具链提供商 os – 目标操作系统 eabi – 嵌入式应用二进制接口(Embedded Application Binary Interface) 注意 没有vendor时,用none代替: 没有os支持时,也用none代替 同进没有vendor和os支持时,只用一个none代替,比如arm-none-eabi中

linux下交叉编译器制作

目前我用的交叉编译器是TQ2440配套光盘中制作好了的,解压后需要如下配置: 1.对于Fedora系统:修改/etc/profile文件,在其中添加交叉编译器的环境变量的设置. 对于Ubuntu系统,修改/etc/enviroment文件 2.我用的是Fedora系统,修改PATH值,在其后添加上交叉编译器的路径,添加pathmunge /opt/EmbedSky/4.3.3/bin 对于Ubuntu系统,修改PATH="/usr/local/sbin:/usr/local/bin:/usr/s

添加了环境变量,然而交叉编译器还是无法运行的解决方案

首先贴出出错提示信息: [email protected]:/usr/local/arm/2.95.3/bin$ arm-linux-arm-linux-addr2line   arm-linux-gasp        arm-linux-protoizearm-linux-ar          arm-linux-gcc         arm-linux-ranlibarm-linux-as          arm-linux-gcj         arm-linux-readelf

交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别

  自己之前一直没搞清楚这两个交叉编译器到底有什么问题,特意google一番,总结如下,希望能帮到道上和我有同样困惑的兄弟-.. 一. 什么是ABI和EABI 1) ABI: 二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture) 在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口. ABI涵盖了各种细节,如: 数据类型的大小.布局和对齐; 调用约定(控制着函数的参数

什么是交叉编译器?

由于项目的需要,我们需要一个能在x86平台上运行,生成mips应用程序的交叉编译器,最近几天一直在搞这个,看了很多的文章也试 了不少的方法,最后终于成功了,还不错,有些新的和大家交流一下. 什么是交叉编译器? 为什么叫“交叉编译器”(cross compiler),就是因为它跨平台来编译程序!做交叉编译器要弄清楚3个概念:host, build, target: build -- 你在什么平台上编译的这个编译器 host -- 这个编译器将来要在什么平台上运行 target -- 编译器最终会生

linux下ARM交叉编译器的安装

1.下载arm-linux-gcc编译器. 2.将下载好的编译器压缩文件拷贝到linux中,注意不要在windows中解压,因为RAR解压工具解压gzip压缩工具压缩的文件可能会出问题. 尽量将编译器的压缩文件放置到根目录下(其实也不一定是要根目录,但是我自己使用过程中发现有一个厂家提供的编译器没有安装在指定的位置,编译器提示库找不到),这样做的目的是为了尽量减少麻烦.拷贝好之后,在终端使用: # tar xvzf arm-linux-gcc-4.4.3.tar.gz 解压编译器. 3.解压好了

gcc-linaro-arm-linux-gnueabihf交叉编译器配置

系统Ubuntu14.04 版本:gcc 版本 4.7.3 20130328 (prerelease) (crosstool-NG linaro-1.13.1-4.7-2013.04-20130415 - Linaro GCC 2013.04) 具体配置与其他编译器类似:arm-fsl-linux-gnueabi交叉编译器安装 不具体赘述了. 配好后,报错libstdc++.so.6: cannot open shared object file: No such file or directo

第一部分:为2440 制作自己的任意版本的交叉编译器

第一部分  安装交叉编译工具链 使用crosstool-0.43制作交叉编译工具链,随着gcc版本的增高,正确的制作已不太可能,crosstool-0.43制之后不再有更新,因此这个选用的是nt-ng工具制作交叉编译工具链. 1.nt-ng的安装 Crostool很多年不在维护了,下面尝试一下使用crosstool的下一代 crosstool-ng 具体使用说明见: http://www.crifan.com/files/doc/docbook/crosstool_ng/release/html