根据实际需要也可相应的更改分区表.
CROSS_COMPILE ?= /usr/local/arm/3.4.1/bin/arm-linux-
4.
将Flash分区信息加入内核
#vi arch/arm/mach-s3c2410/devs.c
添加头文件:
#include
#include
添加分区结构:
static struct mtd_partition partition_info[]={
{name:"bootloader",
offset:0,
size: 0x00020000,},
{name:"param",
offset:0x00020000,
size:0x00010000,},
{name:"kernel",
offset:0x00030000,
size:0x001c0000,},
{name:"root",
offset:0x00200000,
size:0x00400000,},
{name:"usr",
offset:0x00600000,
size:0x03a00000,}
};
struct s3c2410_nand_set nandset={
nr_partitions: 5, //分区数量
partitions: partition_info, //分区表
};
struct s3c2410_platform_nand superlpplatform={
//NAND Flash芯片支持
//参数意义可参考S3C2410手册
tacls: 0,
twrph0: 30,
twrph1: 0,
sets: &nandset,
nr_sets: 1,
};
修改s3c_device_nand,以加入NAND Flash驱动:
struct platform_device s3c_device_nand = {
.name = "s3c2410-nand", //设备名称
.id = -1, //有效设备编号,-1表示唯一设备
.num_resources = ARRAY_SIZE(s3c_nand_resource), //寄存器区的个数
.resource = s3c_nand_resource, //寄存器区的首地址
//添加如下信息,表示NAND Flash设备
.dev={
.platform_data=&superlpplatform
}
};
5.指定启动时的设备初始化
#vi arch/arm/mach-s3c2410/mach-smdk2410.c
修改:
static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
//添加如下信息
&s3c_device_nand,
};
6.禁止Flash ECC效验
内核通过vivi把数据写入NAND Flash,而vivi的ECC效验算法和内核的不同,内核的效验码是由NAND Flash控制器产生的,所以在此必须禁用NAND Flash ECC。
#vi drivers/mtd/nand/s3c2410.c
找到s3c2410_nand_init_chip函数,加入chip->eccmode的值为:
NAND_ECC_NONE
7.内核配置与编译