转自: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有自动下载源码的功能,但速度非常慢,还是建议自己把源码下载过来。
expat-2.0.1.tar.gz
如果上面的链接失效,你可以通过
http://www.kernel.org/pub/linux/kernel/
下载到大部分所需要的源码,其他再百度或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
十、结束语
编译这个工具链,我用了很长时间才完全编译成功,期间遇到很多错误,上面这些是平时记录的,现在整理出来,难免有疏忽。如果你发现有错误,欢迎批评指正。