现在的位置: 首页 > 综合 > 正文

用Crosstool 制作交叉编译工具链

2013年08月30日 ⁄ 综合 ⁄ 共 3532字 ⁄ 字号 评论关闭

一:下载 Crosstool

    http://kegel.com/crosstool/

    解压到downloads文件夹

    apt-get install bison

    apt-get install flex

二:进入解压后的Crosstool

    vim Demo-arm-softflaot.sh 

    修改如下两行:

    TARBALLS_DIR=$HOME/downloads         所需安装包保存目录
    RESULT_TOP=$HOME/crosstool                 交叉工具链生成后的保存目录
    查看工具链的版本号

    eval `cat arm.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest

    vim arm-softfloat.sh

    修改arm-softfloat-linux-gnu  为arm-linux

三:下载源码

    vim gcc-4.1.0-glibc-2.3.2-tls.data

    下载=号后的源码

     BINUTILS_DIR=binutils-2.16.1
     GCC_CORE_DIR=gcc-3.3.6
     GCC_DIR=gcc-4.1.0
     GLIBC_DIR=glibc-2.3.2
     LINUX_DIR=linux-2.6.28
     LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
    GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
    GDB_DIR=gdb-6.5
    可到ChinaUnix.net下载

四:执行编译脚本

     ./demo-arm.sh

五:设置环境变量

    export PATH=$PATH:$HOME/crosstool/gcc-4.1.0-glibc-2.3.2/arm-linux-gnu/bin:

六:错误

    1:

configure: error:

*** These critical programs are missing or too old: gcc
*** Check the INSTALL file for required versions.
gcc 版本高或低,sudo apt-get remove gcc ,sudo apt-get install gcc-4.1

2:
applying patch
/home/pengly/downloads/crosstool-0.43/patches/glibc-2.3.2/arm-asm-clobber.patch
getandpatch.sh: 1: patch: not found
没有安装PATCH sudo apt-get install patch
3:
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
修改如下文件:
vim build/arm-linux-gnu/gcc-4.1.0-glibc-2.3.2/build-glibc/csu/version-info.h
"Available extensions:/n"
"/n"
vim Demo-arm.sh
在工具链版本后加 --notest --nounpack

4:gcc 太新

     rm /usr/bin/gcc

     ln -s /usr/bin/gcc-4.1 /usr/bin/gcc

七:添加环境变量

#export PATH=$PATH:/home/pengly/crosstool/gcc-4.1.0-glibc-2.3.2/arm-linux-gnu/bin

 

 

 

 

 

 

 

 

 

中间遇到collect2.c编译出错,参考以下方法成功编译

都说ubuntu的支持相当的强大,我承认,那是因为ubuntu的问题相当多。比如:由于Debian包管理的依赖性问题,导致了eva没有依赖上kdebase,对话框中右键崩溃。
今天在编译skyeye时又报错
/usr/include/bits/fcntl2.h:51: 错误: 调用‘__open_missing_mode’,声明有错误属性:open with O_CREAT in second argument needs 3 arguments
按理说在Fedora 10中都可以编译过的,在ubuntu下应该也没什么问题才对,可是偏偏出现这个问题。赶紧跟踪,首先对比两个版本的/usr/include/bits/fcntl2.h,发现没有区别,那么就是代码的问题了。改代码,报错是在612行
if(!nf->writebuffer)
free(nf->writebuffer);
free(nf);
提示是open有错,但是612行是free,注释掉前两行,居然误报成了free(nf),继续注释掉free(nf),终于,错误给出来了,是在519行的 if ((nf->fdump= open(dev->dump, FILE_FLAG)) 0)
open在调用的时候只有两个参数,赶紧给加上个0777,代码成了 if ((nf->fdump= open(dev->dump, FILE_FLAG,0777)) 0)
谢天谢地,终于编译通过了。

 

 

 

遇到arm-linux-ar堆栈溢出的问题

主要是4.3.2编译器的问题,改为4.1的编译器即可

(1)保证你的ubuntu8.10下安装了以下软件开发工具。
Bison
flex
build-essential
patch
libncurses5-dev
我并没有试过没装这些工具的后果,都是网上的经验,你要是不信这个邪,就自己吃吃这个螃蟹。
(2)因为ubuntu8.10自带的是gcc-4.3.2无法用crosstool正常编译交叉编译器,所以必须安装gcc-4.1,但是不必卸载4.3.2。方法是用新立得软件包管理器安装gcc-4.1,之后 参考
chinazcw
的方法
sudo rm /usr/bin/gcc            (删除GCC,它只是个到gcc-4.3.2的软连接文件)
sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc        (建立GCC到gcc-4.1的软连接)

 

 

 

改为gcc-4.1的问题

(4)安装了gcc-4.1之后,重新编译。心想这回好了吧?!不想,有出了以下错误:
In file included from version.c:33:
/home/tekkaman/working/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/build-glibc/csu/version-info.h:2:1: missing terminating " character
/home/tekkaman/working/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/build-glibc/csu/version-info.h:3:1: missing terminating " character
google后发现,原来是ubuntu将系统默认的shell设置成了dash (the Debian Almquist Shell),所以通过脚本生成的文件格式和bash的不一样,导致了编译错误。在使用了
ursa
的方法后问题解决。
sudo mv /bin/sh /bin/sh.old
sudo ln -sf bash /bin/sh

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/java211/archive/2009/02/09/3869097.aspx

抱歉!评论已关闭.