这几天开始做毕业设计了,MPEG2解码的MIPS实现,代码啥的网上一大堆,最大的困难也许不是理解代码,而是搭建环境,也就是搭建mips-linux-gcc交叉编译的环境。
网上铺天盖地的都是arm-linux-gcc工具链的教程,唯独MIPS这一块资料很是匮乏,就连极少数的几篇讲搭建工具链的博文都是互相copy的。
两天一夜,终于把工具链给搞定了,期间的痛苦也只有自己能体会,那是一种在茫茫大海中寻求救援的无助感。每次碰到问题,问谷歌或百度大部分回答都是 牛头不对马嘴,有些人可能相对严谨的解决,但也不能做到面面俱到。事实上,对于我们这种新手,最大的帮助就是面面俱到:对可能遇到的问题都有合理的解释和 解决方法。但实际中,往往是为了解决一个小问题,反而引来许多一连串莫名其妙的问题,很是挠人。
废话就这么多。
下面介绍我本次安装交叉编译工具链的过程。
起初试了传说中高端牛逼的buildroot工具,该工具能够配置各种硬件平台的编译工具、交叉编译工具链等等,只有你想不到,没有它做不到,但是 高端的工具往往会带来一个副作用:低端人士基本不会用。我就是活生生的例子,从昨天上午8点30分开始,一直到下午5点,期间不吃不喝几乎都忘了上厕所, 最后还是没搞出来。后来相继尝试了许多方法,也都以失败告终。
最后没办法,决定直接用别人做好的工具链, ftp://ftp.linux-mips.org/pub/linux/mips/people/macro/RPMS 在这个ftp服务器上,我找到了我需要的工具
首先我们的PC机是i386架构的,所以就进i386的目录下,
这里有许多mips打头的rpm包,这些就是我们需要的工具链!
这时我们可以根据你所使用的mips处理器是大端或小端来下载所需的工具,大端的工具都是以mips开头的,而小端都是以mipsel开头。
最后我们需要下载的是这几个包:
mips-linux-binutils-x.xx.x-x.i386.rpm
mips-linux-gcc-x.xx.x-x.i386.rpm
mips-linux-gcc-c-x.xx.x-x.i386.rpm
mips-linux-gcc-cpp-x.xx.x-x.i386.rpm
mips-linux-sim-x.xx.x-x.i386.rpm
这几个工具装好之后,我们就可以写个helloworld测试一下了:
#includevoid main(){ printf("Hello World!\n"); }
然后执行:
mips-linux-gcc hello.c -o hello
编译失败了。提示说找不到stdio.h,这是因为我们PC上并没有对应mips的动态链接库,所以我们编译的时候还需要加上静态选型
mips-linux-gcc -g hello.c -o hello -static
但是执行这句后,我们还是失败了。
提示还是老样子。
解决办法:我们还需下载一个静态库文件的包,有了这个包,我们的静态编译才能通过。
在ftp://ftp.linux-mips.org/pub/linux/mips/people/macro/RPMS/noarch/下面找到
mips-linux-glibc-devel-x.x.xx.noarch.rpm
mips-linux-glibc-static-x.x.xx.noarch.rpm
安装完这两个之后就大功告成了,重新执行上面的编译命令,成功编译出可执行文件。当然,这个可执行文件得用mips仿真器才能运行。