建立自己的交叉编译环境(米搞定,但解决了其中出现的很多问题)

6 篇文章 0 订阅

 

这个过程如下(参考  http://www.ibm.com/developerworks/cn/linux/l-embcmpl/)

1. 下载源文件、补丁和建立编译的目录

2.立内核头文件

3. 建立二进制工具(binutils)

4. 建立初始编译器(bootstrap gcc)

5. 建立c库(glibc)

6. 建立全套编译器(full gcc)

 

 

我的电脑是装的Ubuntu 10.04 ,不是虚拟机。想建立交叉编译环境,首先你的电脑中得有编译环境,就是那些常见的,例如GCC等。这个我就不写了,网上也是多得是,太常见了。

然后,我们要下载建立所需要的文件。这是列表:

源代码文件及其版本与下载地址:(参考  http://blog.sina.com.cn/s/blog_61803fb80100eaku.html)

 

binutils-2.19.1.tar.bz2       http://ftp.gnu.org/gnu/binutils/

gcc-4.3.3.tar.bz2               http://ftp.gnu.org/gnu/gcc/gcc-4.3.3

glibc-2.11.tar.bz2            http://ftp.gnu.org/gnu/glibc/

glibc-ports-2.11.tar.bz2      http://ftp.gnu.org/gnu/glibc/

gmp-4.2.4.tar.bz2                 http://ftp.gnu.org/pub/gnu/gmp/

linux-2.6.30.1.tar.bz2          http://ftp.kernel.org/pub/linux/kernel/v2.6/

mpfr-2.4.1.tar.bz2               http://www.mpfr.org/mpfr-2.4.1/

 

建立目录文件

/home/dengnice/

mkdir embedded.

mkdir build-tools kernel tools

 

设置环境变量

 

首先终端下的命令:dengnice@dengnice-laptop:~$ vi ~/.bashrc  然后将下面的环境变量加入到.bashrc文件中。

输出环境变量方便我们编译:(这样当你logout或换了控制台时,就不用老是export这些变量了 。)

$export PRJROOT=/home/liang/embedded
$export TARGET=arm-linux
$export PREFIX=$PRJROOT/tools
$export TARGET_PREFIX=$PREFIX/$TARGET $export PATH=$PREFIX/bin:$PATH

把下载的软件包分别放在build-tools kernel tools下解压。

1.   dengnice@dengnice-laptop:~/embedded/build-tools/ tar -jxvf glibc-2.11.tar.bz2    可以通过glibc下的config.sub脚本来知道,你的TARGET变量是否被支持,例如:

dengnice@dengnice-laptop:~/embedded/build-tools/glibc-2.11.1/scripts$ ./config.sub arm-linux   (我的环境中config.sub在这个目录下)。

 

 

解决问题和细节错误:

1.安装ncurses,sudo apt-get install libncurses5-dev

2.make menuconfig后内核中只有version.h,没有autoconf.h,解决方法:退回到linux-2.6.30.1目录下,命令:make autoconf.h,若没有version.h,则make version.h 。

3.在我们编译并安装 gcc 前,我们先要改一个文件 $PRJROOT/gcc/config/arm/t-linux,把TARGET_LIBGCC2-CFLAGS = -fomit-frame-pointer -fPIC这一行改为TARGET_LIBGCC2-CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix_h。(路径不对-应该改为$PRJROOT/gcc-4.3.3/gcc/config/arm/t-linux)

 

4.然后,将gmp-4.2.4改名gmp和mpfr-2.4.1改名mpfr放入gcc-4.3.3文件夹中。将glibc-ports-2.11改名为ports放入glibc-2.11中


未解决问题:

1. binutils是一些二进制工具的集合,其中包含了我们常用到的as和ld。看一下我们 $PREFIX/bin 下的生成的文件,没有arm-linux-gasp,arm-linux-ld,arm-linux-as,没有ls ld是大问题。。。

好像是gcc版本过高,texinfo跟不上了。sudo apt-get install texinfo。然后

$cd build-binutils

$../binutils-2.10.1/configure --target=$TARGET --prefix=$PREFIX

还是出现问题,看error:ldlang.c文件中有错误。直接根据错误修改ldlang.c文件,每个人的错误可能不一样,根据自己的情况来修改。害我下载了两遍源代码,结果错误都一样。

然后在输入上面的命令,结果OK。

 

后来出现下面的错误,在没能解决,不过后来看到网上,10.04版本的ubuntu gcc和binutils版本都太高,最好降低。

checking for .protected and .hidden assembler directive... yes
checking whether __attribute__((visibility())) is supported... no
configure: error: compiler support for visibility attribute is required

 

 

再次重新根据ubuntu10.04来编译的时候,弄到一半,老师忽然说不用自己编译环境的,自带的有工具链,就没有在弄下去。不过还是有些注意事项:(参考网站:http://czp1013.blog.163.com/blog/static/28370175200891902428430/

1.在上面的问解决问题中提到了texinfo,不过4.11以上的版本有bug,换成texinfo-4.8解决,还有10.04以上版本的ld,as版本太高,编译binutils的时候会提示too old,安装binutils-2.19即可。gcc-4.3.3也有点高,最好降到4.1左右。

 

差不多就这么多要注意的把,下面的还没执行,今天忽然说要装Fedora,先把Fedora搞明白去~~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值