一.建立环境
1.目标环境:
从官网下载linux2.6.32的源代码
http://www.kernel.org/pub/linux/kernel/v2.6/
linux-2.6.32.2(SMDK2440->mini2440)
2.指定交叉编译变量
修改总目录下的Makefile,设置缺省目标平台及缺省编译器
原
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
改为
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
接下来,要测试一下linux 的编译是否能正常通过。
执行:
#make s3c2410_defconfig ;使用缺省内核配置文件,s3c2410_defconfig 是SMDK2440 的,make help可以看到所有支持平台的内核配置文件
缺省配置文件
#make ;
3.克隆建立目标平台
1)机器码
内核在启动的时候,是通过bootloader传入的机器码(MACH_TYPE)确定应启动哪种目标平台,从linux2.6.31,官方内核已经支持mini2440,
bootloader要启动内核,必须MACH_TYPE保持一致,否则
linux2.6.32内核中已经有机器码
[root@localhost linux-2.6.32.2]# vim arch/arm/tools/mach-types
目前U-boot 从2009.06 版本也已经加入了mini2440 的机器码定义
提示:在U-boot/include/asm-arm/mach-types.h 中可以看到mini2440 的机器码定义,
2)删除原有mini2440,
删除linux-2.6.32.2/arch/arm/mach-s3c2440 目录下mach-mini2440.o,mach-mini2440.c
[root@localhost mach-s3c2440]# rm -rf mach-mini2440.c mach-mini2440.o
3)修改时钟源频率
SMDK2440外接晶振是16.9344MHz,mini2440是12MHz
4)从SMDK2440到MINI2440
将mach-mini2440中smdk2440改为mini2440,使用批处理命令
:%s/smdk2440/mini2440/g
注释掉smdk_machine_init()
5)编译测试
#make mini2440_defconfig //建立mini2440的内核配置文件
#make zImage