支持浮点运算功能的交叉编译工具链的制作

来源:互联网 发布:能听金庸小说的软件 编辑:程序博客网 时间:2024/05/17 23:05

     由于研究需要,打算移植一个高版本的UBOOT引导程序到开发板上,所有配置和需要添加的代码都搞定后编译提示错误“... uses hardware FP,whereas U-Boot uses software-FP,Relocation truncated to fit : R_ARM_PLT32 --div0”。就是说UBOOT中所使用的是软件浮点功能,而编译器使用的是硬件浮点功能。通常的交叉编译工具都不带软件浮点功能,在网上想搜寻一个类似arm-softfloat-gnu的交叉编译工具无果,只得自己制作一个。花了一天时间,碰到了很多错误,不过总算是顺利解决了。各位大虾见笑了。下面说下详细的步骤:

    1.下载必须的工具和源码

     crosstool-0.43.tar.gz ,这个在http://www.kegel.com/crosstool/crosstool-0.43.tar.gz有。

     binutils-2.15.tar.bz2

     gcc-3.4.5.tar.bz2

     glibc-2.3.6.tar.bz2

     glibc-linuxthreads-2.3.6.tar.bz2

     linux-2.6.8.tar.bz2

     linux-libc-headers-2.6.12.0.tar.bz2

     将这几个包放在同一个文件夹下。比如:/home/ctr/dowloads    

     其次是一些编译中要用的通用的库和工具,省得到编译时候出错浪费时间,我使用的Linux是Ubuntu10.04,因此直接:

           sudo apt-get install  flex bison libncurses5-dev patch texinfo

    2.  降低GCC版本:由于Ubuntu10.04自带的gcc为4.4版本的,版本过高,编译时候对语法要求比较严格,使用该编译器会产生很多莫名奇妙的问题,所以改用gcc-4.1

        apt-get install gcc-4.1

        rm /usr/bin/gcc (删除GCC,它只是个到gcc-4.3.2的软链接文件)

        ln -s /usr/bin/gcc-4.1 /usr/bin/gcc (建立GCC到gcc-4.1的软链接)

   3.修改.sh脚本

      进入/home/ctr/dowloads,解压软件包:

      tar –zxvf crosstool-0.43.tar.gz

      进入目录:cd crosstool-0.43

      拷贝一个配置脚本:mv demo-arm-softfloat.sh arm-softfloat.sh

      修改配置:gedit arm-softfloat.sh

      TARBALLS_DIR=$HOME/downloads //表示下载的源码的存放目录

      RESULT_TOP=/opt/crosstools //表示生成的工具链的存放目录

      修改为:

     TARBALLS_DIR=/home/ctr/downloads

      RESULT_TOP=/opt/crosstools

  4.修改 gcc-3.4.5-glibc-2.3.6.dat

      gedit gcc-3.4.5-glibc-2.3.6.dat:

      BINUTILS_DIR=binutils-2.15

      GCC_DIR=gcc-3.4.5

      GLIBC_DIR=glibc-2.3.6

      LINUX_DIR=linux-2.6.26.5

      LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.8

      GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.2.6.12.0

  5.编译:

    ./arm-softfloat.sh

     慢慢等待吧...

     最后在/opt/crosstool/gcc-3.4.1-glibc-2.3.6/下就能得到工具链

  如果你严格按照以上步骤执行那么编译中唯一出现的问题是:

       make[2]: *** [/home/pengly/source-packet/cross/crosstool-0.43/build/arm-linux-gnu/gcc-4.1.0-glibc-2.3.2/build-      glibc/csu/version.o] 错误 1
      make[2]:正在离开目录 `/home/pengly/source-packet/cross/crosstool-0.43/build/arm-linux-gnu/gcc-4.1.0-glibc-            2.3.2/glibc-2.3.2/csu'
      make[1]: *** [csu/subdir_lib] 错误 2
      make[1]:正在离开目录 `/home/pengly/source-packet/cross/crosstool-0.43/build/arm-linux-gnu/gcc-4.1.0-glibc-           2.3.2/glibc-2.3.2'
      make: *** [all] 错误 2
    解决方案:

    修改如下文件:
    gedit build/arm-linux-gnu/gcc-4.1.0-glibc-2.3.2/build-glibc/csu/version-info.h
    "Available extensions:/n"
    "/n"
    gedit Demo-arm.sh
    在工具链版本后加 --notest --nounpack

   

    由于博客限制不能将制作好的工具链上传,需要的朋友请在博客上留下联系方式。

原创粉丝点击