[转]玩转S3C6410之一 交叉工具链制作(gcc4.5.1-armv6-vfp)

软件平台:ubuntu 11.10(按照本人博客中“玩转Ubuntu-11.10”系列的文章进行安装)  
    主机编译器:  gcc 4.6.1
    硬件平台:tiny6410

    1、准备环境

    必备工具包:bison、flex、texinfo、automake、libtool、cvs、patch、libncurses5-dev、aria2、curl、g++、svn、gawk、cvsd、subversion

    (有些文章有写要安装gcj,在我的Ubuntu11.10安装不了,提示说它被其它的软件包引用了,可能是我之前装的其他工具已经包含gcj了把)

    我们可以通过以下一条命令来获得它们,但需要ubuntu11.10接入网络
    sudo apt-get install bison 
    sudo apt-get install flex 
    sudo apt-get install texinfo
    sudo apt-get install automake
    sudo apt-get install libtool
    sudo apt-get install cvs
    sudo apt-get install patch
    sudo apt-get install libncurses5-dev
    sudo apt-get install aria2
    sudo apt-get install curl
    sudo apt-get install g++
    sudo apt-get install subversion
    sudo apt-get install gawk
    sudo apt-get install cvsd

    2、下载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/
    看看有没有相应的补丁,有得话一起下载下来,并打上补丁,
    本人于2011.11.21下载了2011.11.20更新的1.13.2版本,当时没有补丁。

    3、安装crosstool-ng
    解压crosstool-ng-1.13.2.tar.bz2,进入目录,进行配置:
    sudo ./configure --prefix=/home/tiny6410/crosstool/crosstool-install
    配置安装目录为/home/tiny6410/crosstool/crosstool-install
    sudo make               --编译
    sudo make install       --安装

    4、配置编译的交叉编译工具链
    sudo mkdir /home/tiny6410/crosstool/crosstool-build   --建立编译目录
    sudo cd /home/tiny6410/crosstool/crosstool-build      --进入编译目录
    sudo cp /home/tiny6410/crosstool/crosstool-ng-1.13.2/samples/arm-unknown-linux-gnueabi/* ./
    sudo cp crosstool.config .config  --把crosstool-config --当作默认的配置文件
    sudo /home/tiny6410/crosstool/crosstool-install/bin/ct-ng menuconfig --图形界面进行配置
    弹出以下菜单,此菜单主要用于交叉编译工具链的环境配置。
    Paths and misc options  --->
        (/home/tiny6410/crosstool/src-4.5.1) Local tarballs directory  --源码目录
        (/usr/local/arm/4.5.1) Prefix directory   --最后生成的交叉编译工具链存放的目录
        (2) Number of parallel jobs      --主机是双核处理器的可以选2
    Target options  --->
        (armv6) Architecture level
        (arm1176jzf-s) Emit assembly for CPU  
        (arm1176jzf-s) Tune for CPU
        (vfp) Use specific FPU
    Toolchain options  --->
        (none) Tuple's vendor string
    Operating System  --->
        Linux kernel version (2.6.36.4)  ---> //再高一点的版本如2.6.38制作好的编译器在编译qtopia2.2.0的时候会报include\linux下没有videodev.h这个头文 件,低一些的版本如3.6.28在交叉编译的时候会报scripts/unifdef.c中的getline和系统/usr/include /stdio.h中的getline冲突
    Binary utilities  --->
        binutils version (2.19.1a)  --->
    C compiler  --->
        gcc version (4.4.6)  ---> //等下再修改成4.5.1
        [ ] Fortran
        [ ] Java    
    C-library  --->
        glibc version (2.9)  --->
    Debug facilities  --->
        [ ] gdb  --->
    Companion libraries  --->
        GMP version (4.3.2)  ---> 
        MPFR version (2.4.2)  --->
        PPL version (0.10.2)  --->
        CLooG/ppl version (0.15.10)  --->
        libelf version (0.8.13)  --->
    保存退出。
    vi .config
    将
    CT_CC_VERSION="4.4.6"
    改成
    CT_CC_VERSION="4.5.1"

    将
    CT_CC_V_4_4_6=y
    改成
    CT_CC_V_4_5_1=y
      

    在
    CT_MPFR=y
    后面增加一行
    CT_MPC=y

    在
    CT_MPFR_VERSION="2.4.2"
    后面增加两行
    CT_MPC_V_0_8_2=y
    CT_MPC_VERSION="0.8.2"   
    保存退出。

    5、编译交叉工具链
    编译的时候会自动下载下面的软件包,也可以自己先下载好放在src-4.5.1目录下,这样编译的是时候就比较快了。
    binutils-2.19.1a.tar.bz2  
    duma_2_5_15.tar.gz  
    glibc-2.9.tar.bz2        
    libelf-0.8.13.tar.gz      
    mpfr-2.4.2.tar.xz   
    strace-4.5.19.tar.bz2
    cloog-ppl-0.15.10.tar.gz  
    expat-2.0.1.tar.gz  
    glibc-ports-2.9.tar.bz2  
    ltrace_0.5.3.orig.tar.gz  
    ncurses-5.9.tar.gz
    dmalloc-5.5.2.tgz         
    gcc-4.5.1.tar.bz2   
    gmp-4.3.2.tar.bz2        
    mpc-0.8.2.tar.gz          
    ppl-0.10.2.tar.bz2
    linux-2.6.36.4.tar.xz   

    在终端执行
    sudo /home/tiny6410/crosstool/crosstool-install/bin/ct-ng build --开始编译
    编译了两个小时左右,不过很庆幸的是没出现错误(其实我试了很多次了)。接下看下成果。
    sudo cd usr/local/arm/4.5.1/bin/
    sudo ./arm-none-linux-gnueabi-gcc -v
    打印如下信息:
    Using built-in specs.
COLLECT_GCC=./arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/usr/local/arm/4.5.1/libexec/gcc/arm-none-linux-gnueabi/4.5.1/lto-wrapper
Target: arm-none-linux-gnueabi
Configured with: /home/tiny6410/crosstool/crosstool-build/.build/src/gcc-4.5.1/configure --build=i686-build_pc-linux-gnu --

host=i686-build_pc-linux-gnu --target=arm-none-linux-gnueabi --prefix=/usr/local/arm/4.5.1 --with-

sysroot=/usr/local/arm/4.5.1/arm-none-linux-gnueabi/sysroot --enable-languages=c,c++ --disable-multilib --with-arch=armv6 --with-

cpu=arm1176jzf-s --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=soft --with-pkgversion='crosstool-NG 1.13.2' --disable-sjlj

-exceptions --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --with-

gmp=/home/tiny6410/crosstool/crosstool-build/.build/arm-none-linux-gnueabi/build/static --with-

mpfr=/home/tiny6410/crosstool/crosstool-build/.build/arm-none-linux-gnueabi/build/static --with-

ppl=/home/tiny6410/crosstool/crosstool-build/.build/arm-none-linux-gnueabi/build/static --with-

cloog=/home/tiny6410/crosstool/crosstool-build/.build/arm-none-linux-gnueabi/build/static --with-host-libstdcxx='-static-libgcc -

Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-target-optspace --with-local-prefix=/usr/local/arm/4.5.1/arm-

none-linux-gnueabi/sysroot --disable-nls --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.5.1 (crosstool-NG 1.13.2)
    接下来将命令都链接成arm-linux-,这样以后操作比较方便。
    sudo ln -s arm-none-linux-gnueabi-addr2line arm-linux-addr2line 
    sudo ln -s arm-none-linux-gnueabi-ar arm-linux-ar
    sudo ln -s arm-none-linux-gnueabi-as arm-linux-as
    sudo ln -s arm-none-linux-gnueabi-c++ arm-linux-c++
    sudo ln -s arm-none-linux-gnueabi-c++filt arm-linux-c++filt
    sudo ln -s arm-none-linux-gnueabi-cpp arm-linux-cpp
    sudo ln -s arm-none-linux-gnueabi-g++ arm-linux-g++
    sudo ln -s arm-none-linux-gnueabi-gcc arm-linux-gcc
    sudo ln -s arm-none-linux-gnueabi-gcc-4.5.1 arm-linux-gcc-4.5.1
    sudo ln -s arm-none-linux-gnueabi-gccbug arm-linux-gccbug
    sudo ln -s arm-none-linux-gnueabi-gcov arm-linux-gcov
    sudo ln -s arm-none-linux-gnueabi-gprof arm-linux-gprof
    sudo ln -s arm-none-linux-gnueabi-ld arm-linux-ld
    sudo ln -s arm-none-linux-gnueabi-ldd arm-linux-ldd
    sudo ln -s arm-none-linux-gnueabi-nm arm-linux-nm
    sudo ln -s arm-none-linux-gnueabi-objcopy arm-linux-objcopy
    sudo ln -s arm-none-linux-gnueabi-objdump arm-linux-objdump
    sudo ln -s arm-none-linux-gnueabi-populate arm-linux-populate
    sudo ln -s arm-none-linux-gnueabi-ranlib arm-linux-ranlib
    sudo ln -s arm-none-linux-gnueabi-readelf arm-linux-readelf
    sudo ln -s arm-none-linux-gnueabi-size arm-linux-size
    sudo ln -s arm-none-linux-gnueabi-strings arm-linux-strings
    sudo ln -s arm-none-linux-gnueabi-strip arm-linux-strip
    到此arm-linux-gcc4.5.1-armv6-vfp交叉编译器制作完成,以后就可以用arm-linux-gcc来编译其他程序了。

posted @ 2013-05-12 17:05  sky1991  阅读(482)  评论(0编辑  收藏  举报