一般吧,都是用的製作好的交叉編譯工具,買的ARM開發板裏都帶的有配套的常用開發工具。只有像看文章的你和寫文章的我這般閒的渾身都疼的人才自己編譯製作交叉編譯工具。當然我們的目的是爲了知其然還知其所以然。知識的學習是無窮盡的,here we go。
Well,首先要明白什麼是交叉編譯工具鏈。這個我就不嗷述了,說不定你比我看過的解釋的版本還多。這裏常用的製作工具鏈的方法是基於gcc和uClibc或者是gcc 和 glibc 。gcc就是pc用的c、c++ 、甚至Java等的一個功能強大的編譯器。而uClibc和glibc ,故名思意lib就是庫,c就是c語言……貌似說了太多閒話,意在解釋這個爲什麼不是交叉編譯工具而是交叉編譯工具鏈。uClibc和glibc是用於編譯嵌入式程序的鏈接庫,而程序編譯的本質就是把源代碼編譯成目標代碼,鏈接成應用程序。而這裏強調鏈就是因爲嵌入式開發的獨特性,他需要交叉編譯,從主機生成可以在目標機上運行的代碼,那麼在生成時最關鍵的就是鏈接的過程看吧,因爲同主機有着不同的內存映射和運行機制。這下了解了吧,其實編譯這東西沒有什麼含量,就是通過語法語義分析,物理的生產機器代碼,相當於一個查表替換的過程,而鏈接決定了編譯後的程序能不能跑在對應的平臺上。
啊,那個……啊……那個……哈……(這個源自趙本山老爺爺在模仿領導講話,僅供娛樂,程序猿也要會自娛自樂,對着電腦傻笑)。
啊,因爲uClibc比glibc短小精悍,一般用於要求較高,程序要求要較小的嵌入式設備,雖說它兼容glibc的大多接口,但是還是有些沒有實現的,所以牽涉到部分程序編譯不了,故,我們就gcc 和 glibc來製作這個工具鏈。
首先需要下載編譯crosstools工具,這個是我們用來製作編譯鏈的工具,上crosstool官網: http://kegel.com/crosstool/,下載
讓我們下載好crosstool-0.43.tar.gz,然後進入crosstool-howto.html------》Quick Start,然後看到下邊的配置說明:
Quick Start
Download and unpack. For instance:
wgethttp://kegel.com/crosstool/crosstool-0.43.tar.gz
tar-xzvf crosstool-0.43.tar.gz
cdcrosstool-0.43
Then look at the demo scripts; there'sone for each supported CPU type. For instance, demo-i686.sh is an example ofhow to build a toolchain that targets the i686 processor. It sets threeimportant variables:
TARBALLS_DIR=$HOME/downloads # where it will save source tarballs
RESULT_TOP=/opt/crosstool # where it will install the tools
GCC_LANGUAGES="c,c++,java,f77" # which languages it will make compilersfor
(自己編譯的話,可以是GCC_LANGUAGES="c,c++")
It then builds gcc-3.4.0 andglibc-2.3.2 for i686 with the line
eval `cat i686.datgcc-3.4.0-glibc-2.3.2.dat` sh all.sh--notest
Edit the script if you want to changeany of these settings or versions. Then (as root) create the directory/opt/crosstool and make it writable by you, and finally (as yourself) run thedemo script, e.g.
sudomkdir /opt/crosstool
sudochown $USER /opt/crosstool
shdemo-i686.sh
(當然,這裏是一i686爲例的,我們執行腳本的話當然是選的 demo-arm-softfloat.sh 。)
When it finishes, you can run the new compiler as/opt/crosstool/gcc-3.4.0-glibc-2.3.2/i686-unknown-linux-gnu/bin/i686-unknown-linux-gnu-gcc.(You might want to put/opt/crosstool/gcc-3.4.0-glibc-2.3.2/i686-unknown-linux-gnu/bin on your PATH;then you can run the compiler as i686-unknown-linux-gnu-gcc.)
(ps:默認情況下crosstool會自己下載glibc進行編譯,配置,所以我們說他是工具麼。)
不難吧,照着做就OK了(看不懂的使勁看就懂了)。把下載好的crosstool-0.43.tar.gz用之前文章配置好的FTP服務,從windows上傳到Ubuntu中,我放到了/home/jun/arm/ 下,以後arm開發相關的東西都會放到這個裏邊。
》》》》》》》》》》》》------------------華麗的分割線-------------------》》》》》》》》》》》》
額,我也不想一個一個編譯配置了,因爲這樣會使得目錄結構比較混亂,並且默認的工具名稱好多還學要該,我就直接用TQ2440開發板自帶的交叉編譯工具了。在光盤中的路徑爲:TQ2440_CD\Linux資源\Linux平臺開發工具包,裏邊有個EABI-4.3.3_EmbedSky_20091210.tar.bz2。我們將它通過FTP上傳至jun/arm目錄下。你可以在這裏下載 http://115.com/file/dn11lww4,該編譯器用於arm9系列,基於arm v4T 。
然後解壓:
$ tar-xjvf EABI-4.3.3_EmbedSky_20091210.tar.bz2
額,這個比較扯的是他默認的路徑都是opt/EmbedSky/ 和 要拷貝到usr下的一些工具,我們移除它的默認路徑,把對應的工具也手動的拷貝到對應的目錄下。
當前目錄爲/home/jun/arm
$ sudo cp -r usr /
(ps:是一些後邊會用的製作文件系統的工具,會自動拷貝到對應sbin目錄)
$ cp -r opt/EmbedSky/* ./
(ps:會把4.3.3和crosstool-***拷貝過來,文件比較多,會比較慢吧)
然後就可以把opt和usr給rm掉了。
$ rm –rf opt usr
然後我們把 /home/jun/arm/4.3.3/bin 這個目錄加入到環境變量裏邊
$ sudo vi /etc/environment
裏邊只有個path,加入時,別忘了用:隔開。並執行:
$ export PATH=$PATH:/home/jun/arm/4.3.3/bin
這樣當前環境會有效,而修改的environment文件會在下次開機後有效。
或者修改/etc/profile文件:在末尾添加如下,保存/etc/profile文件:
export PATH=$PATH:/home/jun/arm/4.3.3/bin
通過下邊命令刷新path。
$ source /etc/profile
然後讓我們驗證一下:
$ arm-linux-gcc –v
Ok,出了一大堆版本說明,安裝成功。
好了,文章完成,吃飯去,哈哈。
。
。