日期:2014-05-16  浏览次数:20754 次

linux 2.6.32.2内核移植(MINI2440)步骤

1.获取内核移植源码

http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.2.tar.bz2

2.解压内核源码

(1).bzip2 -d linux-2.6.32.2.tar.bz2

(2).tar -xvf  linux-2.6.32.2.tar

3.修改总目录下的Makefile

原:

export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=


改为
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
其中,ARCH 是指定目标平台为 arm, CROSS_COMPILE 是指定交叉编译器,这里指定的是系统默认的交叉编译器,如要使用其它的,则要把编译器的全路径在这里写出。

4.测试一下linux编译是否能通过

 #make s3c2410_defconfig ;使用缺省内核配置文件,s3c2410_defconfig 是 SMDK2440 的缺省配置文件
 #make ;编译时间较长

5.克隆建立自己的平台

5.1 linux-2.6.32.2/arch/arm/mach-s3c2440 目 录 下 有 个mach-mini2440.c 文件,它其实就是国外爱好者为 mini2440 移植添加的主要内容了,但我们不需要,直接删除。

5.2 将 linux-2.6.32.2/arch/arm/mach-s3c2440/目录下的 mach-smdk2440.c 复制一份。命名为mach-mini2440.c , 找 到 MACHINE_START(S3C2440, "SMDK2440") , 修 改 为
MACHINE_START(MINI2440, "FriendlyARM Mini2440 development board")

5.3修改时钟源频率

mach-mini2440.c( 就 是 我 们 刚 刚 通 过 复 制mach-smdk2440.c 得到的)的第 160 行 static void __init smdk2440_map_io(void)函数中,把其中的 16934400(代表SMDK2440 目标板上的晶振是 16.9344MHz)改为 mini2440 开发板上实际使用的 12000000(代表 mini2440 开发板上的晶振 12MHz,元器件标号为 X2)

因为我们要制作自己的 mini2440 平台体系,因此把 mach-mini2440.c 中所有的smdk2440 字样改为 mini2440,可以使用批处理命令修改,在 vim 的命令模式下输入:
%s/smdk2440/mini2440/g
上面这句的意思是:把所有和“smdk2440”匹配的字符串全部替换为“mini2440”,前面的“%s“代表字符串匹配,最后的“g”代表 global,是全局的意思。
除此之外,还有一个地方需要改动,在 mini2440_machine_init(void)函数中,把smdk_machine_init()函数调用注释掉,因为我们后面会编写自己的初始化函数,不需要调用smdk2440 原来的。

6.在 Linux 源代码根目录下执行
#make mini2440_defconfig ;使用 Linux 官方自带的 mini2440 配置
#make zImage ;编译内核,时间较长,最后会生成 zImage
重新编译并把生成的内核文件 zImage(位于 arch/arm/boot 目录)下到板子中,可以看到内核已经可以正常启动了。