zoukankan      html  css  js  c++  java
  • [转]玩转S3C6410之一 交叉工具链制作(gcc4.5.1armv6vfp)

    软件平台: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来编译其他程序了。

  • 相关阅读:
    Vue 实现前进刷新,后退不刷新的效果
    chrome浏览器的跨域设置——包括版本49前后两种设置
    Promise.all和Promise.race区别,和使用场景
    滚动条默认最底部
    使用react进行父子组件传值
    java 数组基础学习(一维二维数组)
    react项目 使用echarts
    Python的hasattr() getattr() setattr() 函数使用方法详解
    【线性判别】Fisher线性判别(转)
    【semantic segmentation】Pyramid Scene Parsing Network(转)
  • 原文地址:https://www.cnblogs.com/sky1991/p/3074296.html
Copyright © 2011-2022 走看看