04-工具链
22.1.2 工具链
为了编译、连接并调试Linux应用程序和内核,我们首先需要建立针对目标板处理器的GNU工具链。
GNU工具链有力地支撑了Linux系统的发展,由于它可被看作许多嵌入式处理器的一个交叉编译器,所以在嵌入式软件开发中相当流行,其支持包括ARM、StrongARM、XScale、PowerPC、MIPS、68K/ColdFire、Intel x86/IA-32、Intel i960、Hitachi SH在内的多种体系结构。GNU工具链中大多数有用的工具主要集中于以下几个源代码包中。
● GCC包,主要包括gcc(C编译器)、g++(C++编译器)、cpp(C预处理器)。
● Binutils (binary utilities)包,主要包括as(汇编程序)、ld(连接器)、objcopy(目标文件翻译器,用于从连接器输出中创建一个ROM映像)、objdump(目标文件阅读器,用于反汇编目标文件)。
● glibc/uclibc/newlib,提供系统调用和基本函数的C库,比如open()、malloc()、printf()等。
● Make,主要包括make工具。
● Debugger,主要包括gdb(源代码调试器)。
上述源代码包都可以从gnu FTP站点上直接下载,如为了建立ARM Linux的GNU工具链,我们需下载newlib、binutils、gcc和gdb代码包。在解压缩、针对特定处理器配置、编译并安装这样软件包后,便可以使用它们进行交叉编译与开发。配置、编译与安装的所需执行的命令步骤如下:
(1)cd [binutils-build]
(2)[binutils-source]/configure --target=arm-elf --prefix=[toolchain-prefix] --enable
interwork --enable-multilib
(3)make all install
(4)export PATH="$PATH:[toolchain-prefix]/bin"
(5)cd [gcc-build]
(6)[gcc-source]/configure --target=arm-elf --prefix=[toolchain-prefix] --enable-interwork --
enable-multilib --enable-languages="c,c++" --with-newlib --with-headers=[newlib-source]/newlib/
libc/include
(7)make all-gcc install-gcc
(8)cd [newlib-build]
(9)[newlib-source]/configure --target=arm-elf --prefix=[toolchain-prefix] --enable
interwork--enable-multilib
(10)make all install
(11)cd [gcc-build]
(12)make all install
(13)cd [gdb-build]
(14)[gdb-source]/configure --target=arm-elf --prefix=[toolchain-prefix] --enable-inter
work --enable-multilib
(15)make all install
当使用交叉编译器的时候,程序通常用前缀来指示目标的体系结构和连接器的输出格式,如arm-linux-gcc、arm-linux-gdb、powerpc-linux-gcc等。
建立交叉工具链的过程相当繁琐,我们不必亲自操作,可以直接下载第三方编译好了的、开放的、针对目标处理器的交叉工具链,如在http://www.codesourcery.com/gnu_toolchains/上可以下载针对ARM、ColdFire和 Power的工具链。
本书配套光盘提供的VirtualBox虚拟机映像中,已经包含了制作好的arm-linux-gcc等。