平台工具及其版本
宿主机: Windows xp;Vmware7.1.3build-324285;虚拟机Ubuntu10.10
目标平台:工装(s3c2440处理器)256M Nand Flash,64M SDRAM,2MNOR Flash
交叉开发环境:arm-linux-xxx-4.3.2,支持EABI
linux kernel版本:2.6.37
因使用3.4.1交叉编译环境编译应用程序时常出现某些故障,所以决定更换4.3.2版编译器。从而内核和文件系统也得使用4.3.2编译器重新编译。以下内容并不全面,仅记录了本人所遇见的重要问题。现将内核重编译流程及遇到的问题记录如下:
一、安装4.3.2版交叉编译环境
将交叉编译环境安装到/usr/local/arm/4.3.2目录下。在/etc/profile末尾加环境变量
exportPATH="/usr/local/arm/4.3.2/bin:$PATH"
这里有个问题要强调下:arm/4.3.2/bin目录下的编译指令arm-linux-gcc和arm-linux-g++是两个shell脚本。内容如下:
#!/bin/bash
execarm-none-linux-gnueabi-gcc -march=armv4t $*
#!/bin/bash
execarm-none-linux-gnueabi-g++ -march=armv4t $*
可以发现编译指令仍是EABI类型的,并且指定了运行平台类型为armv4t。注意:使用不同的处理器时,应当注意此处的平台类型是否合适。
二、内核源码重编译
源码拷贝自先前3.4.1编译好的文件,
1、修改“Makefile”文件
183 行“ARCH?=(SUBARCH)” 修改为“ARCH ?= arm”
184 行“CROSS_COMPILE ?= ” 修改为“CROSS_COMPILE ?=/usr/local/arm/4.3.2/bin/arm-linux-”
此时就是让编译器使用exec arm-none-linux-gnueabi-*** -march=armv4t $*指令编译内核。
2、make clean
进入内核源码根目录下执行make clean清除先前编译的目标文件及可执行文件。
3、make menuconfig
重新配置相关选项。必须选中该项以支持EABI方式编译内核
Kernel Features
[ ] Use the ARM EABI to compile the kernel
将它选中后自动多出下面一行
[*] Use the ARM EABIto compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL)(NEW)
4、编译内核
进入内核源码根目录下执行make zImage,完成后在/arch/arm/boot/目录下就生成了zImage内核可执行文件。
详细流程可参考:
http://mail.ustc.edu.cn/~lizhijie/TQ2440/linux2.6.31-porting-to-TQ2440.html