制作mipsel-linux交叉编译工具

来源:本站
导读:目前正在解读《制作mipsel-linux交叉编译工具》的相关信息,《制作mipsel-linux交叉编译工具》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《制作mipsel-linux交叉编译工具》的详细说明。
简介:制作mipsel-linux交叉编译工具

1 前言

在嵌入式开发中,MIPs处理器是常见的几中处理器类型之一。另一方面,Linux是开源软件,应用范围很广, 因其对包括MIPS在内的多种嵌入式处理器架构的良好支持. 因此在嵌入式应用也.也大量采用Linux。在嵌入式开发过程中,很容易获得运行于x86架构PC上的Linux,并可使用其上的丰富的工具。gcc是Linux中一个很著名的C编译器,在编译Linux核心时,就要用到gcc。在PC机的Linux系统中用自身的gcc重新编译Linux核心和其它应用是容易。而嵌入式应用是要求在MIPs架构的平台上布署Linux系统和其上的应用,但在开发的过程中.获得运行于MIPS架构的Linux系统的开发环境几乎是不可能的。

因此,就提出了交叉编译(cross-compile)的概念.也就是说要在运行于x86架构PC的Linux系统中编译出能在MIPS架构的平台上运行的Linux核心和其上的应用。这样,就可以用PC较强的运算能力,和其Linux系统中的工具完成软件的编写、编译甚至是调试。在下面的章节中.将介绍交叉编译工具链的一般制作过程和mipsel-linux的具体制作步骤。

2 构造系统介绍

这是一台运行Linux的PC,因整个过程要完成大量的编译工作,因此推荐使用有较高运算能力的x86兼容PC.如Intel的P4系统。同时,编译过程会需要1G左右的硬盘空间。

在这个系统上装好RedHat Linux和gcc,以下是实验所用的构造系统的版本信息.供参考:

$uname -a

Linux www.biforee 2.4.20-8 #1 Thu Mar 13 17:54:28 EST

2003 i686 i686 i386 GNU/Lnux

$gcc -v

Reading specs from /usr/lib/gcc -lib/i386 -redhat -linux/3.2.2/

specs

Configured with: ../configure --prefix=/usr --mandir=/usr/share/

man --infodir=/usr/share/info --enable -shared --enable -threads=

posix --disable -checking --with -system -zlib --enable -_cxa_a-

texit --host=i386-redhat-linux

Thread model:posix

gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)

可以看出,所用的RedHat Linux版本是2.4.20,gcc的版本是3.2.2。

3 构造中会用到的源代码准备

在构造过程中,需要准备以下源码供使用:

(1)binutils-2.13:下载地址是ftp://ftp.gnu.org/gnu/binutils/binutils-2.13.tar.gz

(2)gcc-3-2:下载地址是ftp://ftp.gnu.org/gnu/gcc/gcc-3.2.tar.gz

(3)glibc-2.2.5:下载地址是ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.5.tar.gz

(4)glibc-linuxthreads-2.2.5:这是个glibc的补丁下载地址是

ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.5.tar.gz

(5)glibc-2.2.5-mips-build-gmon.diff:这是另一个glibc的补丁

下载地址是http://www.ltc.com/~brad/mips/glibc-2.2.5-mips-build-gmon.diff

(6)linux-2.4.tar.gz:linux核的源码包.可从网站http://www.linux.org/上下载。用root用户登到Linux系统中.建立工作目录/home/crosstool/tmp.并将上述文件放到这个目录中备用。

4 Linux头文件准备

这些头文件在编译gcc时要用到,正确构造这些文件,很重要。

a)将HOST的Linux的/usr/include拷贝过来

cp -r /usr/include /home/crosstool/tmp/

b)去除其中的两个目录

rm -r -f /home/crosstool/tmp/include/asm

rm -r -f /home/crosstool/tmp/include/linux

c)解开linux源码包

cd/home/crosstool/tmp

tar xvfz ../linux2.4.tar.gz

d)按Target要求完成核心配置.主要是选择正确的CPU类型和内核部件.使这个内核的配置涵盖目标系统的要求。

cd/home/crosstool/tmp/linux

make clean

make menuconfig

……

. 参照有关Linux核心配置的说明完成正确的配置过程。

make dep

e)将配置好的核心的两个目录取出

cp -dR include/linux/home/crosstool/tmp/include/

cp -dR include/asm-mips /home/crosstool/tmp/include/asm

至此,头文件已准备好了,可用以下命令查看:

ls /home/crosstool/tmp/include

5 编译binutils

这里生成一些binary格式的处理工具,如mipsel-linux-ld、mipsel-linux-objdump等。

(a)解压缩,得到源代码

cd /home/crosstool/tmp

tar xvfz ../binutils-2.13.tar.gz

(b)完成配置和编译。configure会在/home/crosstool/tmp/binutils-2.13/mipsel-linux/目录下生成正确的Makefile;--prefix指出安装binutils的目录前缀,也是这些工具工作时的工作路径前缀;--target指出这些工具服务的目标系统。

cd /home/crosstool/tmp/binutils-2.1 3

mkdir mipsel-linux

cd mipsel-linux

../configure

--prefix=/usr/locallcross-gcc/mipsel-linux

--target=mipsel-linux

make

make install

完成安装后,在/usr/local/cross-gcc/mipsel-linux/bin目录下得到一组工具.其中就有mipsel-linux-ld,执行/usr/local/cross-gcc/mipsel-linux/bin/mipsel-linux-ld -verbose,从输出信息中可看到lib的位置指定SEARCH_DIR ("/usr/local/cross-gcc/mipsel-linux/mipsel-linux/lib");glibc产生的库要放到这里。

(c)输出工作路径,使得后继的操作会找到该步骤建立的工具.命令如下:

PATH =/usr/local/cross -gcc/mipsel -linux/bin: $PATH;export

PATH

6 编译静态gcc

因为这时还没有MIPS的glibc库可以使用,只能编译一个最简单的gcc,用这个gcc编译出glibc后就可以再编译一个完整的gcc了。glibc是个共享库,而这时的gcc不能支持glibc,因此,这个gcc也叫“静态gcc”,从另一个角度看,这时的gcc是个简单的gcc,是为了生成后继的完成的gcc而做的。因此,也被称为“自举gcc”。

如果只是为了编译Linux核心代码,完成这个步骤就可以了。

(a)解压缩,得到源代码。

cd /home/crosstool/tmp

tar xvfz ../gcc-3.2.tar.gz

(b)完成配置和编译。这时,建立目录mipsel-linux-static来进行工作。而在下面的工作中,会在同一位置建立另一个目录,用于完整版gcc的编译;--prefix使用和上面步骤一样的设置,可使工具成套安装协同工作;--disable-shared表示不能使用glibc;--with -headers是重要的,它指出编译时,要使用在之前准备好的头文件

cd gcc-3.2

mkdir mipsel-linux-tatic

cd mipsel-linux-static

../configure --target=mipsel-linux --enable-languages=c

--prefix=/usr/local/cross-gcc/mipsel-linux

--disable-shared

--with-headers=/home/crosstool/tmp/include

在configure过程中,可以看到输出这样的一条信息:

Copying /home/crosstool/tmp/include to /usr/local/cross--gcc/mipsel-linux/mipsel-linux/sys-include

表明.已将指定的头文件/home/crosstool/tmp/include

复制到目标位置/usr/local/cross-gcc/mipsel-linux/mipsel-linux/sys-include使用。这点是重要的,在后面的步骤中还要用到这个目录。

make

make install

7 编译glibc

现在,用前面生成的gcc和binutils来生成能工作于目标平台MIPS的glibc库。

(a)解压缩,得到源代码

cd /home/crosstool/tmp

tar xvfz ../glibc-2-2.5.tar.gz

(b)完成配置和编译

cd glibc-2.2.5

patch-i ../../gibc-2.2.5-mips-build-gmon.diff

如果报告有文件找不到,只要回答一下正确的文件名,帮其找到。

tar -xzf ../../glibc-linuxthreads-2.2.5.tar.gz

mkdir mipsel-glibc

cd mipsel-glibc

CFLAGS="-O2 -g -finline-limit=10000"

../configure --build=i686-linux

--host=mipsel-linux

--enable-add-ons

--prefix=/usr/local/cross-gcc/mipsel-linux

--build表示在i686-linux上编译glibc;--host表示glibc是用mipsel-linux格式的;--prefix的和前面的步骤有一样的含义。

make

make install install root=/home/crosstool/tmp/glibc-2.2.5-inst

先安装在一个临时的位置。再将文件传过去。

(c)将生成的lib传送到指定位置

将lib传到/usr/local/cross-gcc/mipsel-linux/mipsel-linux/lib

cp -r/home/crosstool/tmp/glibc-2.2.5-inst/usr/local/cross-gcc/mipsel-linux/lib/

/usr/local/cross-gcc/mipsel-linux/mipsel-linux/

这个位置就是前面谈到的mipsel-linux-ld会搜索的目录。

(d)修改libc.so中的路径

vi /usr/local/cross-gcc/mipsel-linux/mipsel-linux/lib/libe.so 校正其中两个文件的路径

/*GNU ld script

Use the shared library,but some functions are only in

tIle static library.so try that secondarily.*/

GROUP (/usr/local/cross-gcc/mipsel -linux/mipsel -linux/lib/libc.so.6

/usr/local/cross -gcc/mipsel -linux/mipsel -linux/lib/libc_non-shared.a)

(e)将生成的include传送到正确位置

将/usr/local/cross-gcc/mipsel-linux/mipsel-linux/mipsel-linux/sys-include改名为include

cd /usr/local/cross-gcc/mipsel-linux/mipsel-linux/

mv sys-include include

将include文件传到/usr/local/cross-gcc/mipsel-linux/mipsel-linux/include

cp -r-f /home/crosstool/tmp/glibc-2.2.5-inst/usr/local/cross-

gcc/mipsel-linux/include//usr/local/cross-gcc/mipsel-linux/mipsel-linux/

8 编译动态gcc

现在,所有的准备工作都完成了,可以用前面做出来的binutils、静态gcc、glibc来生成完整的。支持共享库的gcc了。

a)直接使用前用解压缩过的代码。

cd /home/crosstool/tmp/gcc-3.2

b)完成配置和编译

mkdir mipsel-linux-share

cd mipsel-linux-share

../configure

--target=mipsel-linux

--prefix=/usr/local/cross-gcc/mipsel-linux

--with-cpu=mips32

--disable-nls

--enable-threads=posix

--enable-symvers=gnu

--enable-_cxa_atexit

--enable-languages=c,c++

--enable-shared

--enable-c99

--enable-long-long

注意,这里使用了--enable-shared选项,表示这个gcc编译是支持共享库的。

make

make install

9 使用生成的交叉编译工具链

生成的交叉工具链的所有工作文件在/usr/local/cross-gcc/mipsel-linux目录下,可以用它们来编译Linux的核心和应用了。现以编译Linux核心为例说明。在/home/crosstool/tmp/linux目录下就有一个刚配置好的Linux核心,修改/home/crosstool/tmp/linux/Makefile, 使TOOLROOT和CROSS_COMPILE设置正确:

TOOLROOT =/usr/local/cross-gcc/mipsel-linux/

CROSS_COMPILE =:$(TOOLROOT)/bin/mipsel-linux-

修改/home/crosstool/tmp/linux/arch/mips/Makefile,使tool-prefix设置正确:

tool-prefix= /usr/local/cross-gcc/mipsel-linux/bin/mipsel-linux-

回到/home/crosstool/tmp/linux

cd/home/crosstool/tmp/linux

make

成功完成编译后,生成的Linux核心就在/home/crosstool/tmp/

linux/vmlinux文件。

提醒:《制作mipsel-linux交叉编译工具》最后刷新时间 2024-03-14 01:04:52,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《制作mipsel-linux交叉编译工具》该内容的真实性请自行鉴别。