• (转)在fedora12下用crosstoolng建立armlinux交叉编译环境


    http://blog.chinaunix.net/space.php?uid=22337711&do=blog&id=1774864

    http://blog.chinaunix.net/space.php?uid=20543672&do=blog&id=94369

    花了几天时间才把基于crosstool-ng的arm-linux交叉编译环境建立好,其间过程中一路磕磕碰碰,较为辛苦,最终成功完成,倍感欣慰。趁着记忆余温,及时作个总结记录。
        之所以用crosstool-ng是因为crosstool-ng是新的用来建立交叉工具链的工具,它是crosstool的替换者。crosstool的gcc版本只能到4.1.1,无法编译版本高于2.6.29的linux内核。而crosstool-ng一直保持着更新,现在最新能够建立 gcc 4.3.2版本,可用来编译最新内核。
       系统环境:Fedora12 Linux 2.6.32.21-166
    一、下载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.8.1 无 patch。

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

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

    bison
    flex
    texinfo
    automake
    libtool
    patch
    gcj
    cvs
    cvsd
    gawk

    在Fedora下,可使用命令 $ sudo yum install xxx 依次安装。
        注意:在Fedora下安装gcj,单纯用sudo yum install gcj是安装不了的。请使用sudo yum install *gcj命令,然后按Y全部安装,其实只要安装列表中libgcj-x.x.x-x和java--x.x.x-gcj-x.x.x。
        然后还要手动安装一下termcap

    tar zxvf termcap-1.3.1.tar.gz
    cd termcap-1.3.1
    ./configure --prefix=/usr
    make
    make install

    三、安装crosstool-ng

    $ mkdir ~/croosstool-ng             #  在当前用户目录下建立croosstool-ng目录
    $ cd ~/croosstool-ng
    $ mv /tmp/crosstool-ng-1.8.1.tar.bz2 ./   #  把下载的crosstool-ng软件包放到 crosstool-ng目录中
    $ tar -jxvf crosstool-ng-1.8.1.tar.bz2    #  解包
    $ cd crosstool-ng-1.8.1                   #  进入解压目录
    $ patch -p1 <  <补丁文件>  给crosstool-ng打补丁(如果有)
    $ ./configure --prefix=/opt/crosstool-ng  #  配置crosstool-ng
    $ make                                    #  编译crosstool-ng
    $ sudo 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.8.1
    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.8.1_build          #  建立一个交叉工具链的输出目录
    $ mkdir src                               #  建立保存源码包目录
    $ mkdir x-tools                           #  建立交叉编译器的安装路径
    $ cd crosstool-ng-1.8.1_build/
    $ cp /opt/crosstool-ng/lib/ct-ng-1.8.1/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 ***
           (embedi) Tuple's vendor string
    这样产生的编译器前缀就是:arm-embedi-linux-gnueabi-
    5、C compiler  --->
           (crosstool-NG-${CT_VERSION}-embedi) gcc ID string
        以上红色字体部分即为修改之处。

    五、编译工具链

        配置完后,在crosstool-ng-1.8.1_build目录下执行命令:$ ct-ng build.4。    

        接下来,就是漫长的等待。crosstool-ng会自动下载相应的包,内核文件,然后解压,配置,编译,链接。

    注意:虽然crosstool-ng自动下载相应软件包,但是速度比较慢。我们不防在执行ct-ng build命令之前,把相应的软件包预先下载好。查看crosstool-ng-1.8.1_build目录下“.config”文件就可知道需要哪些软件包及其版本,本机所需要的软件包如下:

    linux-2.6.33.2.tar.bz2
    binutils-2.19.1.tar.bz2
    gcc-4.3.2.tar.bz2
    glibc-2.9.tar.gz
    dmalloc-5.5.2.tgz
    duma_2_5_15.tar.gz
    gdb-6.8.tar.bz2
    ltrace_0.5.3.orig.tar.gz
    strace-4.5.19.tar.bz2
    gmp-4.3.2.tar.bz2
    mpfr-2.4.2.tar.bz2
    libelf-0.8.13.tar.gz
    以下几个文件我没有在.config文件里发现,其实也是需要的(要么干脆你就让它自动下载吧):
    ncurses-5.7.tar.gz
    ecj-latest.jar
    glibc-ports-2.9.tar.bz2
    sstrip.c

        对啦,这些下载好的软件包应该放到哪呢?放到crosstool-ng-1.8.1_build目录下的targets/tarballs文件夹中。
        编译工具按链需要耐心的等待,按官网上的说法:have a coffee,have lanuth,take a sleep。我的电脑是ThinkTad SL410,双核处理器,2G内存,大约编译了近2小时。

    六、增加环境变量
    以上过程若没有出现错误,那恭喜你成功了,是否该打开香槟庆祝一下呢,sorry,我没有,以后一定有。呀,但别急,还需要最后一步,就是增加环境变量,输入:
    $ echo "PATH=$PATH:$HOME/crosstool-ng/x-tools/arm-embedi-linux-gnueabi/bin" >> ~/.bashrc。
    OK,大功造成,是否该测试一下呢,简单:
    $ arm-embedi-linux-gnueabi-gcc -v
    Using built-in specs.
    Target: arm-embedi-linux-gnueabi
    Configured with: /home/iamxzg/crosstool-ng/crosstool-ng-1.8.1_build/targets/src/gcc-4.3.2/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-embedi-linux-gnueabi --prefix=/home/iamxzg/crosstool-ng/x-tools/arm-embedi-linux-gnueabi --with-sysroot=/home/iamxzg/crosstool-ng/x-tools/arm-embedi-linux-gnueabi/arm-embedi-linux-gnueabi//sys-root --enable-languages=c,c++,fortran,java --disable-multilib --with-arch=armv4t --with-cpu=arm9tdmi --with-tune=arm920t --with-float=soft --with-pkgversion=crosstool-NG-1.8.1-embedi --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap --with-gmp=/home/iamxzg/crosstool-ng/crosstool-ng-1.8.1_build/targets/arm-embedi-linux-gnueabi/build/static --with-mpfr=/home/iamxzg/crosstool-ng/crosstool-ng-1.8.1_build/targets/arm-embedi-linux-gnueabi/build/static --enable-threads=posix --enable-target-optspace --with-local-prefix=/home/iamxzg/crosstool-ng/x-tools/arm-embedi-linux-gnueabi/arm-embedi-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.8.1-embedi)


    错误与解决


    1.
    [ERROR] Missing: 'i686-pc-linux-gnu-gcj' or 'i686-pc-linux-gnu-gcj' or 'gcj' : either needed!

       解决:sudo yum install *gcj

    2.

    [INFO ]  Installing native gdb
    [INFO ]  Installing native gdb
    [EXTRA]    Building static target ncurses
    [ERROR]    make[2]: *** [tic] Error 1
    [ERROR]    Build failed in step 'Installing native gdb'
    [ERROR]    Error happened in '/opt/crosstool-ng/lib/ct-ng-1.8.1/scripts/functions' in function 'CT_DoExecLog' (line unknown, sorry)
    [ERROR]          called from '/opt/crosstool-ng/lib/ct-ng-1.8.1/scripts/build/debug/300-gdb.sh' at line # 162 in function 'do_debug_gdb_build'
    [ERROR]          called from '/opt/crosstool-ng/lib/ct-ng-1.8.1/scripts/build/debug.sh' at line # 35 in function 'do_debug'
    [ERROR]          called from '/opt/crosstool-ng/lib/ct-ng-1.8.1/scripts/crosstool-NG.sh' at line # 586 in function 'main'
    [ERROR]    Look at '/home/iamxzg/crosstool-ngg/x-tools/arm-embedi-linux-gnueabi/build.log' for more info on this error.
    [ERROR]  (elapsed: 73:59.36)
    [73:59] / make[1]: *** [build] 错误 2
    make: *** [build.4] 错误 2
    解决:sudo yum install glibc-static
    由于不知道要安装glibc-static,在这个问题我卡了好几天,哎,杯具。总算有个了结,因此在Fedora下,大家也应事先先安装它。
    3.其它
    还有一些错误,我没有及时地记录下来,如果大家遇到了,请参考以下:
    用crosstool-ng建立arm-linux交叉工具链

  • 相关阅读:
    排序算法系列之冒泡排序 (3)
    排序算法系列之选择排序 (2)
    排序算法系列之插入排序 (1)
    深挖 NGUI 基础 之UICamera (二)
    深挖 NGUI 基础 之UIRoot (一)
    JPS寻路和AStar寻路
    旋转矩阵
    [斜边的血条进度]
    UI框架:ui节点控件的绑定方式
    Shader播放序列帧
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/2428682.html
Copyright © 2020-2023  润新知