二、交叉编译链的安装和mkcramfs的安装

2019-07-13 01:40发布

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等格式。