嵌入式Linux開發(fā)環(huán)境的搭建之:嵌入式開發(fā)環(huán)境的搭建
5.1嵌入式開發(fā)環(huán)境的搭建
5.1.1嵌入式交叉編譯環(huán)境的搭建
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
交叉編譯的概念在第4章中已經(jīng)詳細(xì)講述過,搭建交叉編譯環(huán)境是嵌入式開發(fā)的第一步,也是必備的一步。搭建交叉編譯環(huán)境的方法很多,不同的體系結(jié)構(gòu)、不同的操作內(nèi)容甚至是不同版本的內(nèi)核,都會用到不同的交叉編譯器,而且,有些交叉編譯器經(jīng)常會有部分的bug,這都會導(dǎo)致最后的代碼無法正常地運(yùn)行。因此,選擇合適的交叉編譯器對于嵌入式開發(fā)是非常重要的。
交叉編譯器完整的安裝一般涉及多個軟件的安裝(讀者可以從ftp://gcc.gnu.org/pub/下載),包括binutils、gcc、glibc等軟件。其中,binutils主要用于生成一些輔助工具,如objdump、as、ld等;gcc是用來生成交叉編譯器的,主要生成arm-linux-gcc交叉編譯工具(應(yīng)該說,生成此工具后已經(jīng)搭建起了交叉編譯環(huán)境,可以編譯Linux內(nèi)核了,但由于沒有提供標(biāo)準(zhǔn)用戶函數(shù)庫,用戶程序還無法編譯);glibc主要是提供用戶程序所使用的一些基本的函數(shù)庫。這樣,交叉編譯環(huán)境就完全搭建起來了。
上面所述的搭建交叉編譯環(huán)境比較復(fù)雜,很多步驟都涉及對硬件平臺的選擇。因此,現(xiàn)在嵌入式平臺提供廠商一般會提供在該平臺上測試通過的交叉編譯器,而且很多公司把以上安裝步驟全部寫入腳本文件或者以發(fā)行包的形式提供,這樣就大大方便了用戶的使用。如優(yōu)龍的FS2410開發(fā)光盤里就附帶了2.95.3和3.3.2兩個版本的交叉編譯器,其中前一個版本是用于編譯Linux2.4內(nèi)核的,而后一個版本是用于編譯Linux2.6版本內(nèi)核的。由于這是廠商測試通過的編譯器,因此可靠性會比較高,而且與開發(fā)板能夠很好地吻合。所以推薦初學(xué)者直接使用廠商提供的編譯器。當(dāng)然,由于時間滯后的原因,這個編譯器往往不是最新的版本,若需要更新時希望讀者另外查找相關(guān)資料學(xué)習(xí)。本書就以優(yōu)龍自帶的cross-3.3.2為例進(jìn)行講解(具體的名稱不同廠商可能會有區(qū)別)。
安裝交叉編譯器的具體步驟在第2章的實(shí)驗(yàn)二中已經(jīng)進(jìn)行了詳細(xì)地講解了,在此僅回憶關(guān)鍵步驟,對于細(xì)節(jié)請讀者參見第2章的實(shí)驗(yàn)二。
在/usr/local/arm下解壓cross-3.3.2.bar.bz2。
[root@localhostarm]#tar–jxvfcross-3.3.2.bar.bz2
[root@localhostarm]#ls
3.3.2cross-3.3.2.tar.bz2
[root@localhostarm]#cd./3.3.2
[root@localhostarm]#ls
arm-linuxbinetcincludeinfoliblibexecmansbinshareVERSIONS
[root@localhostbin]#whicharm-linux*
/usr/local/arm/3.3.2/bin/arm-linux-addr2line
/usr/local/arm/3.3.2/bin/arm-linux-ar
/usr/local/arm/3.3.2/bin/arm-linux-as
/usr/local/arm/3.3.2/bin/arm-linux-c++
/usr/local/arm/3.3.2/bin/arm-linux-c++filt
/usr/local/arm/3.3.2/bin/arm-linux-cpp
/usr/local/arm/3.3.2/bin/arm-linux-g++
/usr/local/arm/3.3.2/bin/arm-linux-gcc
/usr/local/arm/3.3.2/bin/arm-linux-gcc-3.3.2
/usr/local/arm/3.3.2/bin/arm-linux-gccbug
/usr/local/arm/3.3.2/bin/arm-linux-gcov
/usr/local/arm/3.3.2/bin/arm-linux-ld
/usr/local/arm/3.3.2/bin/arm-linux-nm
/usr/local/arm/3.3.2/bin/arm-linux-objcopy
/usr/local/arm/3.3.2/bin/arm-linux-objdump
/usr/local/arm/3.3.2/bin/arm-linux-ranlib
/usr/local/arm/3.3.2/bin/arm-linux-readelf
/usr/local/arm/3.3.2/bin/arm-linux-size
/usr/local/arm/3.3.2/bin/arm-linux-strings
/usr/local/arm/3.3.2/bin/arm-linux-strip
可以看到,在/usr/local/arm/3.3.2/bin/下已經(jīng)安裝了很多交叉編譯工具。用戶可以查看arm文件夾下的VERSIONS文件,顯示如下:
Versions
gcc-3.3.2
glibc-2.3.2
binutils-head
Toolchainbinutilsconfiguration:
../binutils-head/configure…
Toolchainglibcconfiguration:
../glibc-2.3.2/configure…
Toolchaingccconfiguration
../gcc-3.3.2/configure…
可以看到,這個交叉編譯工具確實(shí)集成了binutils、gcc、glibc這幾個軟件,而每個軟件也都有比較復(fù)雜的配置信息,讀者可以查看VERSIONS文件了解相關(guān)信息。