如何为 linux 嵌入式开发建立交叉编译环境 (2.4 内核)
在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和 libc 库等组成的开发环
境。文章通过一个具体的例子说明了这些嵌入式交叉编译开发工具的制作过程。
随着消费类电子产品的大量开发和应用和 Linux 操作系统的不断健壮和强大,嵌入式系统越来越多的进入人
们的生活之中,应用范围越来越广。
在裁减和定制 Linux ,运用于你的嵌入式系统之前, 由于一般嵌入式开发系统存储大小有限, 通常你都要在你
的强大的 pc 机上建立一个用于目标机的交
叉编译环境。 这是一个由编译器、 连接器和解释器组成的综合开发环境。 交叉编译工具主要由 binutils 、gcc 和
glibc
几个部分组成。有时出于减小 libc 库大小的考虑, 你也可以用别的 c 库来代替 glibc ,例如 uClibc 、dietlibc
和
newlib 。建立一个交叉编译工具链是一个相当复杂的过程,如果你不想自己经历复杂的编译过程,网上有一
些编译好的可用的交叉编译工具链可以下载。
下面我们将以建立针对 arm 的交叉编译开发环境为例来解说整个过程,其他的体系结构与这个相类似,只要
作一些对应的改动。我的开发环境是,宿主机 i386-redhat-7.2 ,目标机 arm。
这个过程如下
1. 下载源文件、补丁和建立编译的目录
2. 建立内核头文件
3. 建立二进制工具( binutils )
4. 建立初始编译器( bootstrap gcc)
5. 建立 c 库(glibc)
6. 建立全套编译器( full gcc )
下载源文件、补丁和建立编译的目录
1. 选定软件版本号
选择软件版本号时, 先看看 glibc 源代码中的 INSTALL 文件。那里列举了该版本的 glibc 编译时所需的 binutils
和 gcc 的版本号。例如在 glibc-2.2.3/INSTALL 文件中推荐 gcc 用 2.95 以上, binutils 用 2.10.1
以上版本。
我选的各个软件的版本是:
linux-2.4.21+rmk2
binutils-2.10.1
gcc-2.95.3
glibc-2.2.3
glibc-linuxthreads-2.2.3
如果你选的 glibc 的版本号低于 2.2,你还要下载一个叫 glibc-crypt 的文件,例如 glibc-crypt-2.1.tar.gz 。
Linux 内核你可以从 www.kernel.org 或它的镜像下载。
Binutils 、gcc 和 glibc 你可以从 FSF 的 FTP 站点 ftp://ftp.gun.org/gnu/ 或它的镜像去下载。
在编译 glibc 时,要用到 Linux 内核中的 include
目录的内核头文件。如果你发现有变量没有定义而导致编译失败,你就改变你的内核版本号。例如我开始用
linux-2.4.25+vrs2 ,编译 glibc
-2.2.3 时报 BUS_ISA 没定义,后来发现在 2.4.23 开始它的名字被改为
CTL_BUS_ISA 。如果你没有完全的把握保证你改的内核改完全了,就不要动内核,而是把你的 Linux 内核
的版本号降低或升高,来适应
glibc。