一、嵌入式系统采用交叉编译的方式在本机编译目标系统的可执行软件,在这个过程中需要使用交叉编译工具链,包括交叉编译的编译器、连接器、目标库等。如果在ARM目标板运行Linux系统,因为Linux内核代码使用GCC编译器,为此GNU提供了GCC编译器针对ARM目标平台的支持。由于GCC开源的特点,用户可以手动编译生成符合自己需要的ARM GCC编译器等。如Linux平台ARM的交叉编译器是arm-linux-gcc。
手工编译交叉编译工具链需要编译用到的库和源代码,如Linux内核代码(linux-2.6.18.tar.bz2)、glibc库(glibc-2.3.2.tar.bz2)、工具程序(binutils-2.15.tar.bz2)、内核线程包(glibc-linuxthreads-2.3.2.tar.gz)、编译器(gcc-3.3.6.tar.gz)。
编译工具链还可以通过编译工具链的脚本crosstool建立交叉编译环境,通过指定不同的参数,crosstool脚本建立指定版本的GCC编译器和glibc程序库,还可以直接下载已经编译好的工具链,由于linux内核与GCC编译器存在依赖关系,选择目标平台Linux内核版本后,可以参考内核版本说明对GCC编译器的最低要求选择GCC编译器版本。
二、建立Linux内核头文件
交叉编译器需要通过内核头文件获取目标平台的系统函数调用信息,需要通过对其脚本配置生成目标平台的头文件。
三、编译安装binutils
Binutils是交叉编译工具链中的工具包,包括连接器、汇编器和用于目标文件和档案的工具,针对二进制代码的维护。
四、编译安装GCC的C编译器
建立arm-linux-gcc交叉编