建立基于linux的MIPS交叉编译环境

21 篇文章 0 订阅

建立基于linux的MIPS交叉编译环境
flw10000 发表于 2006-8-18 16:22:00
作者:冯磊 (flw10000) MAIL:flw10000 AT 163.com

更改记录:
2006 08 28 1>文章中有几个地方将安装目录误写为工具包的目录,大部分是在运行./configure时,另有两个cp命令,已更正!


   经过近一周的忙乎,把基于linux的MIPS交叉编译环境基本搭建成功,这里说"基本"搭建成功是因为环境虽然搭建好了,可以编译基于MIPS的可执 行文件了,但还没有在真正的MIPS环境下测试过,还有在编译的过程中出现了些问题,虽然解决了,也因没有在真正的MIPS环境下测试过,不知道会不会影 响正确的结果!
  我是在VMware中编译的,我的系统是RH8.0(2.4。18)
  用到的工具包:
  binutils-2.15,
  gcc-3.2.2,
  glibc-2.3.2,
  glibc-linuxthreads-2.3.2,
  linux-2.4.18,
  elf-machine-rela-mips.patch
  这里为什么要用这几个版本的工具包,主要是作者以前并没有做过交叉编译的环境,参考了网上的一些文章,而这些文章大部分用的是以上的版本!
  在编译时,硬盘最少应有不小于700M的空间,如果在编译过程中不打算删除源代码包的话,那至少应有不小于2G的空间.下面开始编译!
   我的工具包放在/mnt/sdb/mips/mips-toolchain/ ,sdb是另挂的硬盘,安装的目录是/mnt/sdb/mips-toolchain/,这里两个目录很容易混淆,没有改的原因是由于在VMware中编 译,实在太慢了,下次一定整合理点!

  1>首先安装binutils,binutils是二近制工具包,网络上的定义:The GNU Binutils is a collection of programming tools developed by the Free Software Foundation for the manipulation of object code in various object file formats. They are typically used in conjunction with GCC, make and GDB.

#cd /mnt/sdb/mips/mips-toolchain/binutils-2.15
#./configure --prefix=/mnt/sdb/mips-toolchain --target=mipsel-linux
#make
#make install
    在编译完binutils以后,在/mnt/sdb/mips-toolchain/下生成了以下文件:
bin,info, lib, man, mipsel-linux, share.bin下生成13个可执行文件。

  2>接下来按装gcc,gcc需要编译两次,这次编译完只能支持C语言.


#export PATH=$PATH:/mnt/sdb/mips/mips-toolchain/bin //编译GCC时用到binutils-2.15生成的mipsel-linux-ar等.
#cd /mnt/sdb/mips/mips-toolchain/gcc-3.2.2
#./configure --prefix=/mnt/sdb/mips-toolchain --target=mipsel-linux --with-newlib --enable-languages=c --without-headers --disable-shared --disable-threads
#make
#make install

    在第一次编译完gcc以后,在/mnt/sdb/mips-toolchain/下生成了以下文件:
在原来基础上又增加了include目录,且bin下又增加3个可执行文件。

3>接下来配置内核,目的是得到asm的链接和version.h头文件,然后将linux/include/中的asm和linux目录整个拷贝到/mnt/sdb/mips-toolchain/include目录下面
#cd /mnt/sdb/mips/mips-toolchain/linux/include
#ln -s asm-mips asm
#cd ../
#make menuconfig随便配置一下,因为我们并不需要编译内核,只是得到version.h就可以了.
#cp include/asm-mips /mnt/sdb/mips-toolchain/linux/include/asm -R
#cp include/linux /mnt/sdb/mips-toolchain/linux/include/linux-R

4> 在下来就是编译glibc了,建立glibc-mips目录,在glibc-2.3.2和glibc-mips目录下面分别解压缩glibc- linuxthreads-2.3.2.tar.gz,glibc-2.3.2需要elf-machine-rela-mips.patch补丁

#cd /mnt/sdb/mips/mips-toolchain/glibc-2.3.2
#patch -p1 < elf-machine-rela-mips.patch
#cd ..
#mkdir glibc-mips //临时目录
#cp glibc-linuxthreads-2.3.2/* glibc-mips/ -R
#cp glibc-linuxthreads-2.3.2/* glibc-2.3.2/ -R
#mkdir /mnt/sdb/mips-toolchain/mips-glibc //安装目录
#cd glibc-mips
#../glibc-2.3.2/configure --host=mipsel-linux --enable-add-ons=linuxthreads --disable-sanity-checks
#make
#make install_root=/mnt/sdb/mips-toolchain/mips-glibc install
将 /mnt/sdb/mips-toolchain/mips-glibc/usr/local中的lib和include目录拷贝到/mnt/sdb /mips-toolchain/mipsel-linux中,并将lib目录中的文件拷贝到/usr/local/lib中,为编译完整的gcc做准备

5>最后一步,配置编译完整的gcc,这次编译完的gcc将支持c++.
#cd /mnt/sdb/mips/mips-toolchain/gcc-3.2.2
#./configure --prefix=/mnt/sdb/mips-toolchain --target=mipsel-linux --enable-shared --enable-threads --with-headers=//mnt/sdb/mips-toolchain/mipsel-linux/include
#make
在这里发生了一个错误
checking whether we are using GNU C... (cached) yes
checking whether /mnt/clfs/xxx/gcc-3.2.2/gcc/xgcc -B/mnt/clfs/xxx/gcc-3.2.2/gcc/ -B/mnt/clfs/mips-toolchain/mipsel-linux/bin/ -B/mnt/clfs/mips-toolchain/mipsel-linux/lib/ -isystem /mnt/clfs/mips-toolchain/mipsel-linux/include accepts -g... (cached) yes
configure: error: libffi has not been ported to mipsel-unknown-linux-gnu.
make: *** [configure-target-libffi] Error 1
搜了一下,如果交叉编译环境只用来编译c语言,libff是i没有用的,所以手工更改了Makefile中libffi相关的部分.
#make install

  
好了,到这里完整的mips toolchain就搭建完成了 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
驱动器 D 中的卷是 LINUX 卷的序列号是 4471-561B D:\桌面\mips交叉编译环境 的目录 2009-10-22 20:27 <DIR> . 2009-10-22 20:27 <DIR> .. 2009-10-22 20:09 27,425,338 gcc-3.4.3.tar.bz2 2009-10-22 20:08 7,421,782 binutils-2.10.91.0.2.tar.bz2 2009-10-22 20:08 242,445 glibc-linuxthreads-2.5.tar.bz2 2009-10-22 20:10 20,544,628 glibc-2.5.tar.gz 2009-10-22 20:20 1,720 elf-machine-rela-mips.dpatch 2009-10-22 20:26 4,727 建立基于linuxMIPS交叉编译环境 .txt 6 个文件 55,640,640 字节 2 个目录 6,793,084,928 可用字节 三、构建过程 1、准备环境 目标平台: mipsel-linux(即little endian,x86也是little endian的,不懂的话自己到网上查资料吧) 安装目录: /usr/local/crossdev 源代码安装目录: /usr/local/src 注:没有的目录请自行建立。 2、准备MIPS环境的头文件 我们是在i386下编译的,但要使用MIPS的头文件定义才能正确编译MIPS交叉编译工具。这些头文件都在kernel源程序中。 cd /usr/local/src/ tar xzvf linux-2.4.2.tar.gz cd linux/ make ARCH=mips menuconfig 在"CPU selection"中, 选中"(R3000) CPU type",也可以选你实际的MIPS平台的CPU类型 在"General setup"中, 选中"Generate little endian code" make dep mkdir -p /usr/local/crossdev/mipsel-linux/include cp -r /usr/local/src/linux/include/asm-mips /usr/local/crossdev/mipsel-linux/include/asm cp -r /usr/local/src/linux/include/linux /usr/local/crossdev/mipsel-linux/include/ 3、编译binutils cd /usr/local/src/ tar xzvf binutils-2.11.90.0.31.tar.gz cd binutils-2.11.90.0.31/ ./configure --target=mipsel-linux --prefix=/usr/local/crossdev make make install export PATH=/usr/local/crossdev/bin:$PATH 4、编译自举的(bootstrap)gcc 因为这时还没有MIPS的glibc库可以使用,只能编译一个最简单的gcc,用这个gcc编译出glibc后就可以再编译一个完成的gcc了。 cd /usr/local/src/ tar xzvf gcc-3.0.2.tar.gz cd gcc-3.0.2/ ./configure --target=mipsel-linux --prefix=/usr/local/crossdev --enable-languages=c --with-newlib --disable-shared make make install 注:以上编译安装的工具已经可以直接编译MIPS的kernel(make zImage)了。 5、编译glibc 现在可以使用刚才建立的binutils和gcc来编译MIPS的glibc了。 cd /usr/local/src/ tar xzvf glibc-2.2.3.tar.gz cd glibc-2.2.3/ tar xzvf ../glibc-linuxthreads-2.2.3.tar.gz patch -p1 < ../glibc-2.2.3-mips-base-addr-got.diff CC=mipsel-linux-gcc AR=mipsel-linux-ar RANLIB=mipsel-linux-ranlib ./configure --host=mipsel-linux --prefix=/usr/local/crossdev/mipsel-linux --enable-add-ons=linuxthreads make make install 6、重新编译完整的gcc cd /usr/local/src/ rm -rf gcc-3.0.2/ tar xzvf gcc-3.0.2.tar.gz cd gcc-3.0.2/ ./configure --target=mipsel-linux --prefix=/usr/local/crossdev --enable-languages=c,c++ make make install 以上就构建好了一套自己的MIPS交叉编译环境,目录在/usr/local/crossdev下,你可以把它打包拷贝到其它i386的Linux系统下也能使用。 要使用其来交叉编译时请先加上PATH环境变量:export PATH=/usr/local/crossdev/bin:$PATH

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值