前提准备:开发板mini2440开发板
linux内核为linux-2.6.22.2
NOR FLASH为superVIVI
注:本人仅仅是从网上搜集的材料然后根据自己的板子情况一点调试修改的
其中可能有些错误或不必要修改的地方,(本人也是新手所以谅解下吧)
一、将Linux2.6.22.2内核源码放到工作目录的kernel文件夹下,并解压
二、修改内核源码根目录下的Makefile文件
#ARCH ?= arm
#CROSS_COMPILE ?=arm-linux-
三、修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分区信息和Nand Flash的硬件信息。
(1)
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "vivi",
.size = SZ_16K*20,
.offset = 0,
},
[1] = {
.name = "kernel",
.offset = SZ_16K*20, //SZ_16K*20开始为SZ_32K*10,不过make时出错,换成为SZ_16K*20就OK了 不知道为什么
.size = SZ_2M,
},
[2] = {
.name = "yaffs2",
.offset = SZ_2M+SZ_16K*20,
.size = SZ_2M*20, // SZ_2M*20 是我随便写的 不想再算了 呵呵
},
此处的分区一定要与supervivi的分区一致 我是用的 [x] bon part 0 320k 2368k 所以只分了三个区
(2)
static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 0,
.twrph0 = 30, //这 三个数字要改的 以前是20 60 20
.twrph1 = 0,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};
四、 修改drivers/mtd/nand/s3c2410.c,去掉nand flash 的ECC。
我的内核是通过U-BOOT写到Nand Flash的, U-BOOT 通过的软件ECC算法产生ECC校验码, 这与内核校验的ECC码不一样, 内核中的ECC码是由S3C2410中Nand Flash控制器产生的。所以,我在这里选择禁止内核ECC校验。 //此段引用别人的 我只是照此修改了
搜索关键字NAND_ECC_SOFT,在s3c2410_nand_init_chip函数里,修改NAND_ECC_SOFT为NAND_ECC_NONE
五、增加Yaffs2文件系统的支持
解压Yaffs2并将其加入Linux内核(打补丁的方式)
#cd yaffs2
#./patch-ker.sh c /mnt/linux-2.6.22.2/
六、系统初始化时的芯片晶振频率的修改,修改arch/arm/mach-s3c2440/mach-smdk2440.c
......
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
七、配置内核
先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程
# cp arch/arm/configs/s3c2410_defconfig .config
# make menuconfig
1.General setup --->
[*] Configure standard kernel features (for small systems) --->
选上这项,否则文件系统中的一些选项不会出现
2. System Type ---->
[*] S3C2410 DMA support [*] Support ARM920T processor
S3C2410 Machines --->
[*] SMDK2410/A9M2410
S3C2440 Machines --->
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU module
3.Boot options --->
将 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string
改成 (noinitrd root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc )
可能根据个人板子的设置会不一样,我的是从Nand Flash中加载文件系统,其中mtdblock2是存放我的Linux文件系统的分区。
4.[*] Enable loadable module support --->
[*] Module unloading
[*] Automatic kernel module loading
选择这两个,剩下的可以去掉
5.Device Drivers --->
<*> Memory Technology Device (MTD) support --->
[*] MTD partitioning support
<*> NAND Device Support --->
<*> NAND Flash support for S3C2410/S3C2440 SoC
[ ] S3C2410 NAND Hardware ECC //这个要去掉
[*] Network device support --->
[*] Ethernet (10 or 100Mbit) --->
<*> DM9000 support
< > Real Time Clock ---> //这个去掉
6.File systems----->
Miscellaneous filesystems --->
<*>YAFFS2 file system support
我的文件系统为YAFFS2 ,如果不选此,则出现Kernel panic: VFS: Unable to mount root fs on unknown-block(31,2)
八、编译 make zImage
阅读(5205) | 评论(0) | 转发(1) |