这一次写一下编译arm内核以及根文件系统的体验,我使用的是linux-2.6.30.4的内核,通过ftp://ftp.kernel.org/pub/linux/kernel下载。下面按步骤操作。
第一步:
解压源文件tar jxvf linux-2.6.30.4.tar.bz2 –C /opt 下。
第二步:
更改主目录下Makefile文件,使其支持arm架构。在193行的arch ?= $(SUBARCH)更改为arch ?=arm 将CROSS_COMPFILE ?=更改为 CROSS_COMPFILE ?= arm-linux-。
第三步:
修改平台的输入时钟,我们采用的平台是TQ2440的开发板,该平台采用的是12M赫兹的主频,所以需要修改其arch/arm/mach-s3c2440/mach-smdk2440.c 的
__init smdk2440_map_io(void)
函数的时钟16934400 改为12000000.
第四步:
更改平台机器码,使得u-boot的机器码与内核的机器码一致,因为u-boot的机器码是168(系统提供,在include/asm-arm/mach-types.h中),
所以在内核中将机器码改为168(/arch/arm/tools/mach-types,默认是362)
第五步:
修改nand flash分区信息(arch/arm/plat-s3c24xx/common-smdk..c)
使nand的分区信息与u-boot的分区信息一致。
所以
这里需要注意的是内核的分区信息与u-boot的分区信息可能不一致,其实他们之间没有什么关系,最主要的是将内核的分区信息尤其是内核的kernel的分区信息和根文件系统分区得offset和size定义好。
第六步 make menuconfig:
因为编译的是基于arm的内核,所以将arch/arm/boot/configs/s3c2410_defconfig配置文件复制到根目录下,然后执行make menuconfig
第七步: Make zImage,在/arch/arm/boot下 生成zImage内核镜像文件。将镜像文件烧写到板子上即可