M5-mips交叉编译环境搭建

    M5模拟器对MIPS指令集的支持限制为32位、小字节序,因此在制作交叉编译工具
链时需要注意正确的字节序。文中的工具链基于linux-2.6.32、binutils-2.22、glibc-2.13、
glibc-ports-2.13、gcc-4.4.6、gmp-5.0.0、mpfr-3.0.1构建。

1.创建宿主机编译环境

    执行su命令,切换至root权限。执行以下命令,将相关配置信息写入到环境变量。
# export CROSSROOT=/opt/mips-cross
# export TARGET=mipsel-unknown-linux-gnu
# export PREFIX=${CROSSROOT}/tools
# export TARGET_PREFIX=${PREFIX}/${TARGET}
# export PATH=${PREFIX}/bin:${PATH}
    接下来在用户根目录为软件的编译建立相关的文件夹,build-binutils、
build-boot-gcc、build-glibc和build-gcc

2.安装内核头文件

    内核头文件安装是建立工具链的第一步。从网站http://www.linux.org上下载内核
源代码包linux-2.6.32.tar.bz2并解压。进入解压出的内核文件夹linux-2.6.32,使用
安装内核头文件

# make INSTALL_HDR_PATH=${PREFIX} ARCH=mips headers_install

变量INSTALL_HDR_PATH指定了安装的目标目录,变量ARCH指定了目标架构为MIPS。

3.安装binutils

    binutils包中的工具常用来操作二进制目标文件,GNU汇编器as和链接器ld是该包
中最重要的两个工具。从网站http://ftp.gnu.org上下载源代码文件binutils-2.22.tar.gz
并解压。进入build-binutils目录,进行binutils的配置。

# ../binutils-2.22/configure –target=${TARGET} –prefix=${PREFIX} \
–disable-nls

--target指出了编译的目标系统是mipsel-unknown-linux-gnu,--prefix指出了binutils
的安装目录。完成配置后进行编译、安装。

4.安装gcc引导编译器

    本阶段将建立引导编译器。因为这时还没有MIPS的glibc库可以使用,只能编
译一个最简单的gcc,用这个gcc编译出glibc后再重新编译完整在安装前从
http://ftp.gnu.org和http://www.mpfr.org网站下载源代码文件gcc-4.4.6.tar.gz、
gmp-5.0.0.tar.gz和gmp并移动到文件夹gcc-4.4.6内,同样将mpfr-3.0.1文件夹重命名为
build-boot-gcc目录完成对gcc引导编译器的配置。

# ../gcc-4.4.6/configure –target=${TARGET} –prefix=${PREFIX} \
–disable-nls –disable-shared –without-headers –enable-languages=c \
–disable-multilib –disable-libmudflap –disable-libstdcxx-pch \
–disable-decimal-float –disable-threads –disable-libssp –disable-libgomp \
–disable-libffi –disable-libquadmath –disable-libitm

    此配置信息禁用了自举编译器不需要的特性支持,指定生成一个最小化的gcc编译器。
在编译时,会发生以下错误:

error: header files gmp-impl.h and longlong.h not found

    这是由于在build-boot-gcc/gmp目录下找不到这两个头文件,解决方法是将
gcc-4.4.6/gmp文件夹内的头文件目录下。然后继续编译,完成引导编译器的安装。

5.安装glibc

    glibc是gnu发布的libc库,即C运行库,是linux系统中最底层的api。glibc
除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的
实现。
    安装glibc还需要相应glibc-ports的支持,下载相应源代码glibc-2.13.tar.gz
和glibc-ports-2.13.tar.gz并解压,将解压出的glibc-ports-2.13文件夹重命名为ports
并移动到文件夹glibc-2.13内。进入build-glibc目录完成对glibc的配置。

# ../glibc-2.13/configure –host=${TARGET} –prefix=${PREFIX} \
–enable-kernel=2.4.3 –with-headers=${PREFIX}/include –disable-profile \
–disable-multi-arch libc_cv_forced_unwind=yes libc_cv_ctors_header=yes \
libc_cv_c_cleanup=yes

在编译时会出现“cannot find -lgcc_eh”错误,解决方法如下:

# ln -s ${PREFIX}/lib/gcc/${TARGET}/4.4.6/libgcc.a \
${PREFIX}/lib/gcc/${TARGET}/4.4.6/libgcc_eh.a

继续编译并完成安装。

6.安装gcc编译器

    安装glibc后,就可以安装支持C、C++的完整编译器。在安装引导编译器时已获得gcc
的源代码,同样,复制gmp的头文件gmp-impl.h和longlong.h到build-gcc/gmp目录下避免
错误的发生。
    进入到build-gcc文件夹,执行以下配置命令:

# ../gcc-4.4.6/configure –target=${TARGET} –prefix=${PREFIX} \
–disable-multilib –disable-nls –disable-libstdcxx-pch –disable-shared \
–with-headers=${PREFIX}/include –enable-symvers=gnu –enable-c99 \
–enable-threads=posix –enable-languages=c,c++ –enable-long-long \
–enable-__cxa_atexit

    在完成gcc的配置后,开始编译,最后完成完整编译器的安装。
    至此,整个跨平台开发工具链都已设置好,可以直接在PC平台上编写、编译和链接基于
MIPS指令集的程序了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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 建立基于linux的MIPS交叉编译环境 .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、付费专栏及课程。

余额充值