搭建交叉編譯環(huán)境是嵌入式開發(fā)的第一步,也是關(guān)鍵的一步。不同的體系結(jié)構(gòu)、不同的操作內(nèi)容甚至是不同版本的內(nèi)核,都會(huì)用到不同的交叉編譯器。選擇交叉編譯器非常重要,有些交叉編譯器經(jīng)常會(huì)有部分的BUG,都會(huì)導(dǎo)致后的代碼無法正常運(yùn)行。
交叉編譯器完整的安裝一般涉及多個(gè)軟件的安裝(讀者可以從ftp://gcc.gnu.org/pub/下載),包括binutils、gcc、glibc、glibc-linuxthreads等軟件。其中,binutils主要用于生成一些輔助工具,如readelf、objcopy、objdump、as、ld等;gcc是用來生成交叉編譯器的,主要生成arm-linux-gcc交叉編譯工具(應(yīng)該說,生成此工具后已經(jīng)搭建起交叉編譯環(huán)境,可以編譯Linux內(nèi)核了,但由于沒有提供標(biāo)準(zhǔn)用戶函數(shù)庫(kù),用戶程序還無法編譯);glibc主要是提供用戶程序所使用的一些基本的函數(shù)庫(kù),glibc-linuxthreads是線程相關(guān)函數(shù)庫(kù)。這樣,交叉編譯環(huán)境就完全搭建起來了。
上面所述的搭建交叉編譯環(huán)境比較復(fù)雜,很多步驟都涉及對(duì)硬件平臺(tái)的選擇。因此,現(xiàn)在嵌入式平臺(tái)社區(qū)或廠商一般會(huì)提供在各種平臺(tái)上測(cè)試通過的交叉編譯器,或把以上安裝步驟全部寫入腳本文件或者以發(fā)行包的形式提供,這樣就大大方便了用戶的使用。
這里采用廣泛使用的cross-4.3.2交叉編譯器工具鏈,其使用方法非常簡(jiǎn)單。
$ mkdir –p /usr/local/arm /* 這是交叉編譯器安裝目錄*/
$ cp cross-4.3.2.bar.bz2 /usr/local/arm
$ cd /usr/local/arm
$ tar jxvf cross-4.3.2.tar.gz
此時(shí)在/usr/local/arm/4.3.2/bin/下已經(jīng)出現(xiàn)了很多交叉編譯工具,顯示如下:
arm-none-linux-gnueabi-addr2line arm-none-linux-gnueabi-gfortran
arm-none-linux-gnueabi-ar arm-none-linux-gnueabi-gprof
arm-none-linux-gnueabi-as arm-none-linux-gnueabi-ld
arm-none-linux-gnueabi-c++ arm-none-linux-gnueabi-ldd
arm-none-linux-gnueabi-cc arm-none-linux-gnueabi-nm
arm-none-linux-gnueabi-c++filt arm-none-linux-gnueabi-objcopy
arm-none-linux-gnueabi-cpp arm-none-linux-gnueabi-objdump
arm-none-linux-gnueabi-ct-ng.config arm-none-linux-gnueabi-populate
arm-none-linux-gnueabi-g++ arm-none-linux-gnueabi-ranlib
arm-none-linux-gnueabi-gcc arm-none-linux-gnueabi-readelf
arm-none-linux-gnueabi-gcc-4.3.2 arm-none-linux-gnueabi-run
arm-none-linux-gnueabi-gccbug arm-none-linux-gnueabi-size
arm-none-linux-gnueabi-gcov arm-none-linux-gnueabi-sstrip
arm-none-linux-gnueabi-gdb arm-none-linux-gnueabi-strings
arm-none-linux-gnueabi-gdbtui arm-none-linux-gnueabi-stri
可以看到,這個(gè)交叉編譯工具集成了binutils、gcc、glibc這幾個(gè)軟件,而每個(gè)軟件也都有比較復(fù)雜的配置信息。
接下來,在環(huán)境變量PATH中添加路徑,就可以直接使用arm-none-linux—gnueabi-gcc命令了。
$ export PATH=$PATH:/usr/local/arm/4.3.2/bin
把交叉開發(fā)工具鏈的路徑添加到環(huán)境變量PATH中,這樣可以方便地在Bash或者M(jìn)akefile中使用這些工具。通常環(huán)境變量的配置文件有如下幾個(gè)。
● profile類文件:用戶第一次登錄時(shí)僅運(yùn)行一次,profile類文件包括每個(gè)用戶主目錄下的.profile文件和/etc/profile等。用戶再次登錄時(shí)就會(huì)運(yùn)行主目錄下的.profile文件的腳本。
● bashrc類文件:每當(dāng)打開bash shell時(shí)(如當(dāng)打開一個(gè)虛擬終端時(shí))運(yùn)行該腳本文件。bash類文件包括每個(gè)用戶主目錄下的.bashrc文件和/etc/bash.bashrc等。
把環(huán)境變量配置的命令添加到其中一個(gè)文件中即可。
$ arm-linux-gcc –v /*查看交叉編譯器的版本信息*/
arm-none-linux-gnueabi-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /home/linux/crosstooll/toolchain_build/targets/src/gcc-4.3.2/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-none-linux-gnueabi --prefix=/usr/local/arm/4.3.2 --with-sysroot=/home/linux/toolchain/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++,fortran --disable-multilib --with-arch=armv4t --with-cpu=arm9tdmi --with-tune=arm920t --with-float=soft --with-pkgversion=crosstool-NG-1.8.1-farsight --disable-sjlj-exceptions --enable-__cxa_atexit --disable-libmudflap--with-gmp=/home/linux/crosstooll/toolchain_build/targets/arm-none-linux-gnueabi/build/static--with-mpfr=/home/linux/crosstooll/toolchain_build/targets/arm-none-linux-gnueabi/build/static--enable-threads=posix--enable-target-optspace--with-local-prefix=/home/linux/toolchain/arm-none-linux-gnueabi//sys-root --disable-nls --enable-symvers=gnu--enable-c99 --enable-long-long
Thread model: posix
gcc version 4.3.2
從上面打印的版本信息中可以看到“--prefix=/usr/local/arm/ 4.3.2”,這就是交叉編譯器安裝的路徑。它是在編譯前通過prefix選項(xiàng)配置的,所以,這個(gè)工具鏈安裝的路徑必須是/usr/local/arm/4.3.2。
本文選自華清遠(yuǎn)見嵌入式培訓(xùn)教材《從實(shí)踐中學(xué)嵌入式Linux應(yīng)用程序開發(fā)》
熱點(diǎn)鏈接:
1、構(gòu)建嵌入式Linux交叉開發(fā)環(huán)境
2、嵌入式培訓(xùn)資料:搭建交叉編譯環(huán)境
3、嵌入式交叉編譯過程詳解
4、嵌入式linux入門六步走
5、典型嵌入式Linux系統(tǒng)設(shè)置
更多新聞>> |