Cygwin下用crosstool-ng 编译交叉工具链

转自:http://hi.baidu.com/wanghaishanren/item/22a7976ad8583392c5d24984


Cygwin下用crosstool-ng 编译交叉工具链

Cywin版本:1.7.7(CYGWIN_NT-5.1)
Crosstool-ng版本:1.9.3
操作系统:Windows XP SP3

一、下载crosstool-ng

crosstool-ng的下载地址是:http://ymorin.is-a-geek.org/download/crosstool-ng/

值得注意的是,下载里最新的crosstool-ng以后,记得到

http://ymorin.is-a-geek.org/download/crosstool-ng/01-fixes/ 

看看有没有相应的补丁,有得话一起下载下来。

本次下载的版本是 1.9.3 无 patch。

二、准备crosstool-ng的安装环境

    使用crosstool-ng必须安装一些开发应用工具:

grep,sed,bash,make,gcc-core,gcc-g++,awk,bison,flex,automake,libtool,

curl,wget,aria2,cvs,patch,gzip,bzip2,liblzma1,ncurses,libncurses-devel

三、安装crosstool-ng

$ mkdir ~/croosstool-ng           #  在当前用户目录下建立croosstool-ng目录

$ cd ~/croosstool-ng

$ mv /tmp/crosstool-ng-1.9.3.tar.bz2 ./#把下载的crosstool-ng软件包放到 crosstool-ng目录中

$ tar -jxvf crosstool-ng-1.9.3.tar.bz2      #  解包

$ cd crosstool-ng-1.9.3                #  进入解压目录

$ patch -p1 <  <补丁文件>             #  给crosstool-ng打补丁(如果有)

$ ./configure --prefix=/opt/crosstool-ng    #  配置crosstool-ng

$ make                              #  编译crosstool-ng

$ make install                    #  安装crosstool-ng

$ echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc #  为后面调用ct-ng命令增加环境变量

$ source ~/.bashrc

$ ct-ng help

This is crosstool-NG version 1.9.3 

Copyright (C) 2008  Yann E. MORIN <yann.morin.1998@anciens.enib.fr>

This is free software; see the source for copying conditions.

There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A

PARTICULAR PURPOSE.

 

    到此,我们已经成功迈出一大步,好戏还在后头,加油~!

四、配置交叉编译工具链

 

$ cd ~/croosstool-ng

$ mkdir crosstool-ng-1.9.3_build        #  建立一个交叉工具链的输出目录

$ mkdir src                              #  建立保存源码包目录

$ mkdir x-tools                          #  建立交叉编译器的安装路径

$ cd crosstool-ng-1.9.3_build/

$ cp /opt/crosstool-ng/lib/ct-ng-1.9.3/samples/arm-unknown-linux-gnueabi/crosstool.config .config

$ ct-ng menuconfig

   此时会出现crosstool-ng的配置窗口,针对armv4t体系架构,开始对其进行修改配置:

1、已下载好的源码包路径和交叉编译器的安装路径。

Paths and misc options  --->

  (${HOME}/crosstool-ng/src) Local tarballs directory          保存源码包路径

  (${HOME}/crosstool-ng/x-tools/${CT_TARGET}) Prefix directory 交叉编译器的安装路径

 

2、修改交叉编译器针对的构架

 Target options  --->

           *** Target optimisations ***

           (armv4t) Architecture level 

           (arm9tdmi) Emit assembly for CPU    

           (arm920t) Tune for CPU

通过查找资料,这个应该是指令集的架构,对于S3C2410/S3C2440,都是ARM920T的核心,架构指令是armv4t,所以,如果要编译2410/2440的,就选armv4t。以此类推S3C6410 ARM1176JZF-S核心 使用的

 

是armv6架构,就选armv6,那么具体都支持哪些架构呢?可以用man gcc来查询,搜索arm,再搜索-march=就可以找到本gcc支持的处理器核心列表了。

3、增加编译时的并行进程数,以增加运行效率,加快编译。

Paths and misc options  --->

   *** Build behavior *** 

   (4) Number of parallel jobs 

   这个数值不宜过大,应该为CPU数量的两倍。由于我的CPU是双核的,所以我填了4. 

4、一些个性化的修改(可以不修改)

Toolchain options  --->

       *** Tuple completion and aliasing ***  

       (apollo) Tuple's vendor string 

这样产生的编译器前缀就是:arm-apollo-linux-gnueabi- 

5、C compiler  --->

       (crosstool-NG-${CT_VERSION}-apollo) gcc ID string

以上红色字体部分即为修改之处。

以上步骤基本都是直接从

《在fedora12下用crosstool-ng建立arm-linux交叉编译环境 》copy,只对少部分做了修改。

五、其它配置:

这些都是根据我自己的需要添加的,所以和上面的步骤分开单独写。

1、设置croostool-NG调试标记

Paths and misc options  --->

***crosstool-Ng behavior***

[*]Debug crosstool-NG  #

[*]Save intermediate steps#保存编译过程中的中间步骤,在没选中上一项之前,这一项不出现。

如果你足够幸运,第一次就能编译通过,这一步就没有必要选。如果很不幸,中间出现了错,这一步就显得相当重要了,可以让节省很多时间。因为有了这一项,在编译的过程中,croostool-ng会记录

 

下每一步的状态。这样在对出现的错误进行纠正后,就可以从出错这一步开再继续编译,当然你也可以从任一个已保存的状态点开始。如果没有选这一项的话,每出错一次就要从头重新开始编译,这可

 

是相当浪费时间。

2、设置其他支持的语言

C compiler --->

*** Additional supported languages:***

[*] C++

[ ] Fortran

[ ] Java

这里我只选了C++,把Fortran,Java去掉了。如果选上Java的话在编译到

Installing final compiler

这一步时会出错,我第一次是在linux下编译的,因为我不需要支持Java,所以我就直接把Java这一项去掉了,没有找解决方法。

3、配置交叉工具链里的调试工具

Debug facilitites --->

[ * ]  dmalloc --->

[ * ]  duma --->

[ * ]  gdb --->

[  ]  ltrace  ---># ltrace 目前只支持linux系统 

[ * ]  strace --->

 

六、准备源码编译

虽然crosstool-ng有自动下载源码的功能,但速度非常慢,还是建议自己把源码下载过来。

binutils-2.19.1.tar.bz2

dmalloc-5.5.2.tgz

duma_2_5_15.tar.gz

expat-2.0.1.tar.gz

gcc-4.3.2.tar.bz2

gdb-6.8.tar.bz2

glibc-2.9.tar.bz2

glibc-ports-2.9.tar.bz2

gmp-4.3.2.tar.bz2

libelf-0.8.13.tar.gz

linux-2.6.33.7.tar.bz2

mpfr-2.4.2.tar.bz2

ncurses-5.7.tar.gz

Sstrip.c

strace-4.5.19.tar.bz2

如果上面的链接失效,你可以通过

http://www.kernel.org/pub/linux/kernel/

http://ftp.gnu.org/gnu/ 

下载到大部分所需要的源码,其他再百度或Google就可以轻松搞定。

 

下面还不能编译,因为还有重要的一步没有做:

修改duma_2_5_15.tar.gz的Makefile文件

$ tar -zxvf duma_2_5_15.tar.gz

$ cd duma_2_5_15

打开“GNUmakefile”,添加对cygwin的支持,也就是添加下面红色的一句

# some defaults:

CC=gcc

CXX=g++

AR=ar

RANLIB=ranlib

INSTALL=install

RM=rm

RMFORCE=rm -f

ECHO=echo

ECHOLF=echo

OS=cygwin

接下来重新把duma_2_5_15打包

$ cd ..

$ tar -zcvf  duma_2_5_15.tar.gz  duma_2_5_15

为什么要这样做可以参看duma_2_5_15下的INSTALL文件

下面把所有的源码放到

/home/Administrator/crosstool-ng/src

目录下,也就是上面创建的src目录

 

下面就可以开始编译了

Ct-ng build.4

 

4代表同时运行4个进程进行编译。

下面就是漫长的等待了。

 

七、增加环境变量 

 $echo "PATH=$PATH:$HOME/crosstool-ng/x-tools/arm-apollo-linux-gnueabi/bin" >> ~/.bashrc #    OK,大功造成,是否该测试一下呢,简单:

$ arm-apollo-linux-gnueabi-gcc -v 

Using built-in specs.

Target: arm-apollo-linux-gnueabi

Configured with: /home/Administrator/ct-ng-1.9.3/crosstool-ng/crosstool-ng-1.9.3_build/

targets/src/gcc-4.3.2/configure --build=i686-build_pc-cygwin --host=i686-build_pc-cygwin --target=arm-apollo-linux-gnueabi --prefix=/home/Administrator/ct-ng-1.9.3/crosstool-ng/x-tools/arm-apollo-linux-gnueabi --with-sysroot=/home/Administrator/ct-ng-1.9.3/crosstool-ng/x-tools/arm-apollo-linux-gnueabi/arm-apollo -linux-gnueabi//sys-root --enable-languages=c,c++ 

--disable-multilib -with-arch=armv4t --with-cpu=arm9tdmi --with-tune=arm920t --with-float=soft --with-pkgversion=crosstool-NG-1.9.3-apollo --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --with-gmp=/home/Administrator/ct-ng-1.9.3/crosstool-ng/crosstool-ng-1.9.3_build/targets/arm-apollo-linux-gnueabi/build/static --with-mpfr=/home/Administrator/ct-ng-1.9.3/crosstool-ng/crosstool-ng-1.9.3_build/targets/arm-apollo-linux-gnueabi/build/static --enable-threads=posix --enable-target-optspace --with-local-prefix=/home/Administrator/ct-ng-1.9.3/crosstool-ng/x-tools/arm-apollo-linux-gnueabi/arm-apollo-linux-gnueabi//sys-root --disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long Thread model: posix

gcc version 4.3.2 (crosstool-NG-1.9.3-apollo)

八、错误及解决方法

http://hi.baidu.com/wanghaishanren/blog/item/95555d310d4e53bc5edf0ed7.html

九、编译结果

http://hi.baidu.com/wanghaishanren/blog/item/dd7952dec1e8b64cccbf1a8b.html

 

十、结束语

        编译这个工具链,我用了很长时间才完全编译成功,期间遇到很多错误,上面这些是平时记录的,现在整理出来,难免有疏忽。如果你发现有错误,欢迎批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值