August 03, 2004

制作mipsel-linux的交叉编译工具链

Categories:  Linux

上次说到要在HPC上装Linux。需要先建立一套工具链,好在我的athlon-xp上交叉编译给HPC用的东西。虽然现在利用现成的资源已经让HPC上运行了Linux,但是一来软件太少,还是得自己编译,二来我还是想自己能够从头作一遍,可以自己定制。所以,还是决定建立这个交叉编译的工具链。

用的工具源码都是我的Gentoo上现成的,版本分别是:
binutils-2.14.90.0.8 Gentoo_patched
gcc-3.3.3 Gentoo_patched
glibc-2.3.2

主要的参考文献是Linux-VR的创始人Bradley D. LaRonde的一片文章:
Building a Modern MIPS Cross-Toolchain for Linux

具体过程是很繁琐的,主要按照LaRonde的文章进行,但是由于版本不同,在有些地方还是有些区别的。

开始之前,把环境中的CC、AR、RANLIB等等编译相关的变量都关掉,否则也许会影响交叉编译时的结果。此外,我所有的configure配置时,都指定--prefix=/usr,这样相关的东西都会在/usr/mipsel-linux目录下。

首先编译binutils:
这个没有什么特殊的,按照文章里的方法很快完成。

编译静态连接的C编译器:
这里有两个问题。
首先,编译gcc前要有目标机器上的头文件。文章里说可以把本机的copy过去,但是很可能会出问题。最好还是找一份mipsel机器的发行版的头文件来用。
ftp.linux-mips.org/pub/linux/mips/redhat/7.3/RPMS/mipsel/glibc-devel-2.2.5-42.1.mipsel.rpm
是有人移植的Redhat的安装包。里面有头文件,拷贝到指定的目录下就好了。然后把预先准备好的MIPS Linux内核中的linux、asm-mips、asm-generic三个目录也拷贝过去,做好asm符号链接。

之后configure指定好编译选项后,开始make。
make中会有一个问题,如果不是在gcc自己的目录下编译,而是象文章中所说单独建立的编译目录,编译中会有两个文件找不到,分别是fp-bit.c和dp-bit.c。这两个文件的Makefile中指定的位置没有加上相对路径,编译时在单独的编译目录下会找不到。解决办法是从源码目录中拷贝到编译目录下,或者直接在gcc目录下编译。当然最根本的办法是把Makefile改正过来,或者找到合适的patch。呵呵,我这个懒人就没这么作了。

编译glibc:
在此之前,先把原来的头文件目录里除了linux内核之外的头文件全部清除,因为不需要了,而且留着可能对glibc的编译有影响。
然后打一个patch,http://honk.physik.uni-konstanz.de/linux-mips/glibc/patches/applied/elf-machine-rela-mips.dpatch。这个patch修正了mips平台上elf文件重定位的一个bug。然后自己手工改一下stdio-common目录下的sscanf.c中的sscanf的函数原型,改成ansi C的格式,然后在后面加上...。
之后按照文章中的configure配置后面再加一个参数--with-headers=/usr/mipsel-linux/include,指定linux内核头文件所在的目录。配置好后开始编译。
安装时一定要注意,用install_root指定安装目录,否则把本机的libc替换了就哭吧。

libc有了之后,最后重新编译完整的gcc,照着文章编译就可以了。

之后就大功告成了。

Posted by kuuldor at August 3, 2004 03:26 PM
Comments

等着你编译内核和编译应用程序成功的好消息!

Posted by: dumm at August 3, 2004 03:50 PM

Nice blog, just wanted to say I found you through Google

Posted by: Ming H Lee at November 8, 2004 11:10 AM

你好,我手头也有一台730f,我也想在上面跑linux,但是你提到的那篇文章Building a Modern MIPS Cross-Toolchain for Linux的地址现在不能访问了,如果你有copy,请发一份到我的邮箱好吗?谢谢。

另外,方便的话可不可以给我你的联系方式,我希望在遇到问题的时候可以请教你。

Posted by: tehcon at July 30, 2005 07:04 PM

那篇文章Building a Modern MIPS Cross-Toolchain for Linux的地址现在不能访问了,如果你有copy,请发一份到我的邮箱好吗?谢谢。

Posted by: widesky at August 1, 2005 06:33 PM

感谢你的经验分享
但是Building a Modern MIPS Cross-Toolchain for Linux
找不到,能否把这篇文章mail to me
my mailbox:flycash@126.com
Thx very much!

Posted by: flycash at April 13, 2006 05:09 PM

Interesting information.

Posted by: avandia pcos at September 1, 2006 01:16 PM
Post a comment









Remember personal info?




  
Please enter the code as seen in the image above to post your comment.