二、交叉編譯鏈的安裝和mkcramfs的安裝

1.交叉編譯鏈的安裝       

在主機上用來編譯其他類型機器可執行代碼的編譯器就叫交叉編譯器,我們進行嵌入式linux的開發
的主機的處理器大部分都是x86,而我們的嵌入式系統的處理器有可能是arm、MIPS等非x86處理器,
這時候必須使用arm、MIPS等交叉編譯器才能編譯出這些處理器能夠執行的代碼。這裏我們使用的是
ARM公司提供的新一代的arm交叉編譯器EABI編譯器。
    符合EABI標準交叉編譯器: arm-none-linux-gnueabi-4.3.2 with EABI
   EABI說明:
交叉編譯器在編譯的時候,對於浮點運行會預設硬浮點運算FPA(Float Point Architecture),而沒
有FPA 的CPU,比如SAMSUNG S3C2410/S3C2440,會使用FPE(Float Point Emulation 即軟浮點),這樣在
速度上就會遇到極大的限制,使用EABI(Embedded Application Binary Interface)則可以對此改善處理,
ARM EABI 有許多革新之處,其中最突出的改進就是Float Point Performance,它使用Vector Float
Point(矢量浮點),因此可以極大提高涉及到浮點運算的程序性能。
優點:
更早的arm 編譯器版本,比如arm-linux-gcc-3.4.1 不支持armv6 構架,因此已經不能再
使用了,但是之前的相當多的軟件還是使用arm-linux-gcc 編譯器,如qtopia-2.2.0 等。爲此,
我們提供了可以同時滿足這2 種需求的交叉編譯器arm-none-linux-gnueabi-4.3.2。該編譯器
使用了新的glibc 庫2.8,並在編譯器中預先安裝好各種需要用到的庫文件,如編譯qtopia 時需要用到的
jpeg、zlib、libts、libuuid 等等,在編譯我們提供的軟件系統時不需要額外安裝任何第三方函數庫,這
點在編譯qtopia 的時候非常變得非常有意義。
使用這個編譯器,你可以編譯:
- linux 內核(linux-2.6.28.4)
- qtopia-2.2.0 圖形系統
- busybox
- u-boot
- 其他很多linux 應用程序(如web server, boa, madplay 等程序)
首先這可以提高程序的浮點運算性能,其次你可以不必把時間花費在切換不同的編譯器上。
對於linux 所有源代碼的編譯都使用ARM 公司推出的新一代EABI 編譯器。

 

應用光盤中提供了這2 個編譯器。將linux-source/arm-none-linux-gnueabi-4.3.2.tar.bz2(或
者名爲arm-2008q3.tar.bz2)這個文件複製到linux 主機的/root 目錄下,並在終端中分別執行
下面的解壓縮命令:
tar –xjvf arm-none-linux-gnueabi-4.3.2.tar.bz2
即可得到arm-none-linux-gnueabi-4.3.2 目錄。
爲了使用方便,還可以編輯/etc/bash.bashrc 文件添加把編譯器路徑到環境變量PATH 中,
只要在這個文件中添加下面這2 個語句即可:
PATH=/root/ arm-none-linux-gnueabi-4.1.0/bin:$PATH
Export PATH
編輯完畢後使用source /etc/bash.bashrc 命令執行以下這個文件,讓設置生效,之後再輸
入:
arm-none-linux-gnueabi-gcc –v
如果輸出下面的信息則表面設置成功:
figo@figo-desktop:~$ arm-none-linux-gnueabi-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /scratch/julian/lite-respin/linux/src/gcc-4.3/configure --build=i686-pc-linuxgnu
--host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disablelibmudflap
--disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --enablelanguages=
c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --withpkgversion='
Sourcery G++ Lite 2008q3-72' --withbugurl=
https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery
--with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-buildsysroot=/
scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/libc --withgmp=/
scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-none-linux-gnueabi-i686-pclinux-
gnu/usr --with-mpfr=/scratch/julian/lite-respin/linux/obj/host-libs-2008q3-72-arm-nonelinux-
gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --withbuild-
time-tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin --with-buildtime-
tools=/scratch/julian/lite-respin/linux/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)
我們爲了編譯qtopia 等軟件的方便同時提供了arm-linux-gcc 形式的調用命令,輸入armlinux-
gcc –v,如果沒有意外將輸出與上面同樣的信息。

 

 

2.mkcramfs的安裝
有時候需要製作cramfs 格式的文件系統,而這個工具對單個文件有16MB 限制,我們
提供了沒有這個限制的mkcramfs 工具,將這個文件複製到/usr/local/bin 目錄下即可。之後在
終端中輸入mkcramfs 測試,如果輸出下面的內容便表面可以使用了:
(UBUNTU下 要另行安裝 )

figo@figo-desktop:~$ mkcramfs
usage: mkcramfs [-h] [-e edition] [-i file] [-n name] dirname outfile
-h print this help

 -E make all warnings errors (non-zero exit status)
-e edition set edition number (part of fsid)
-i file insert a file image into the filesystem (requires >= 2.4.0)
-n name set name of cramfs filesystem
-p pad by 512 bytes for boot code
-s sort directory entries (old option, ignored)
-v be more verbose
-z make explicit holes (requires >= 2.3.39)
dirname root of the directory tree to be compressed
outfile output file

 

注意:該板子沒有提供mkyaffsimage、mkfs.ubifs 等可讀寫文件系統鏡像製作工具,
而是結合mkcramfs來使用yaffs、ubifs等格式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章