這幾天開始做畢業設計了,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測試一下了:
#include <stdio.h> void 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仿真器才能運行。