u-boot编译过程中出现的问题

出现问题:

    ……………….
    ……………….

    lib_arm/libarm.a(_udivsi3.o)(.text+0x8c):/home/qsg/u-boot-1.2.0/lib_arm/_udivsi3.S:67: relocation truncated to fit: R_ARM_PLT32 __div0
    lib_arm/libarm.a(_umodsi3.o)(.text+0xa8):/home/qsg/u-boot-1.2.0/lib_arm/_umodsi3.S:79: relocation truncated to fit: R_ARM_PLT32 __div0

    make: *** [u-boot] Error 1

问题是“软硬浮点”,需要自己建立交叉工具链。

1.下载crosstool :http://kegel.com/crosstool/crosstool-0.43.tar.gz

2.下载完毕源码包之后,使用root用户登录,然后新建目录:/opt/crosstool,然后将其所有者修改为您的普通用户chown jelly  /opt/crosstool

3.在目录/home/jelly目录下面新建目录downloads,然后复制crosstool-0.28.tar.gz到downloads目录下。

4.进入到目录/opt/crosstool下面:cd /opt/crosstool,解压之前下载的crosstool-0.28.tar.gz文件:

    tar xvfz /home/coolber/downloads/crosstool-0.28.tar.gz -C /opt/crosstool

5.解压完毕后,进入crosstool-0.28目录,然后执行:sh demo-arm-softfloat.sh就可以开始制作编译器。

    中间如果缺少什么安装包 直接用命令安装:sudo apt-get install 安装包名字

6.然后会在默认的/opt/crosstool/目录下面产生一个名为arm-softfloat-linux-gnu的目录,它下面就是刚刚编译成功的交叉编译器。

   修改PATH:在命令行下执行 export PATH=/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin/:$PATH

7.然后进入u-boot-1.2.0目录,修改Makefile文件,将使用的交叉编译器从arm-linux-改为arm-softfloat-linux-gnu-
   重新编译u-boot。


 

安装交叉工具链时遇到的问题:

问题一

    ……………….
    ……………….
    applying patch /home/rookiesean/workspace/crosstool-0.43/patches/glibc-2.3.6/arm-ctl_bus_isa.patch
    getandpatch.sh: 1: patch: not found
    patch /home/rookiesean/workspace/crosstool-0.43/patches/glibc-2.3.6/arm-ctl_bus_isa.patch failed

解决方法: sudo apt-get install patch

 

问题二

    …………………………
    …………………………
    /home/rookiesean/workspace/crosstool-0.43/crosstool.sh: 110: bison: not found
    crosstool: You don’t have bison installed

解决方法:sudo apt-get install bison


问题三

    ………………………..
    ………………………..
    configure: error:
    *** These critical programs are missing or too old: as ld
    *** Check the INSTALL file for required versions.

问题说明:Ubuntu默认所安装的binutils版本为binutils-2.20,当binutils太新的时候,crosstool只好将它当成太老的版本,报告说too old; as ld. 于是我们需要重新编译安装一个老版本的binutils,2.19或者2.18都可以被crosstool所识别,这里拿binutils-2.18举例。但还有一个问题,Ubuntu10.04默认安装的gcc版本是gcc-4.4.3,跟binutils-2.20一样,太高版本的gcc对语法要求更为严格,这样会导致binutils-2.18无法轻松的编译通过,于是我们需要编译安装一个老版本的gcc,4.1的版本可以编译成功binutils-2.18。在Ubuntu10.04可以通过。

解决方法:

    1.安装gcc4.1

        sudo apt-get install gcc-4.1

        cd /usr/bin
        sudo rm gcc
        sudo ln -sf gcc-4.1 gcc
        gcc -v

    2.安装binutils

        1)下载binutils 2.18 http://ftp.gnu.org/gnu/binutils/  注意这里binutils版本要在2.20以下 否则会有问题

                  详见:http://blog.csdn.net/wjl_hdu/article/details/6938311

        2)将其解压缩后,进入binutils顶层目录,运行:

           ./configure –prefix=/home/jelly/temp/binutils –disable-nls
           make all
           make install

        3)编译成功后在/home/jelly/temp/binutils/bin/中就生成了ld as程序的可执行文件, 到/usr/bin目录下面将系统默认的ld和as替换成2.18版本的:

           cd /usr/bin
           sudo rm as ld
           sudo ln -sf /home/rookiesean/temp/binutils/bin/ld ld
           sudo ln -sf /home/rookiesean/temp/binutils/bin/as as
           ld -v; as -v

          得到如下显示:

              GNU ld (GNU Binutils) 2.18
              GNU assembler version 2.18 (i686-pc-linux-gnu) using BFD version (GNU Binutils) 2.18

          表示系统默认的binutils版本已经变换为2.18版本。

        4)运行demo-*.sh建立属于自己的交叉编译器

 

注意: 还会出现一个错误。

    file included from version.c:33:
    /home/rookiesean/workspace/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc/csu/version-info.h:2: error: missing terminating ” character
    /home/rookiesean/workspace/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc/csu/version-info.h:3: error: missing terminating ” character
    version.c:40: error: syntax error before string constant
    make[2]: *** [/home/rookiesean/workspace/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-3.4.5-glibc-2.3.6/build-glibc/csu/version.o] 错误 1
    make[2]:正在离开目录 `/home/rookiesean/workspace/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-3.4.5-glibc-2.3.6/glibc-2.3.6/csu’
    make[1]: *** [csu/subdir_lib] 错误 2
    make[1]:正在离开目录 `/home/rookiesean/workspace/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-3.4.5-glibc-2.3.6/glibc-2.3.6′
    make: *** [lib] 错误 2

问题说明:老版本的glibc在/bin/sh为dash的时候会出现这个问题,一种解决方法是把/bin/sh重定向为bash,在创建完交叉编译器后可以将/bin/sh重新改回dash,运行如下面命令修改/bin/sh:

解决方法:

    cd /bin

    sudo mv /bin/sh sh.old
    sudo ln -sf bash /bin/sh
    sh –version

得到如下显示:

    GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)
    Copyright (C) 2009 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later

    This is free software; you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.

 

       

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值