S3C2440 flash 分区 nor nand FLASH区别(开发板启动时) 及 结构
- UID
- 1029342
- 性别
- 男
|
S3C2440 flash 分区 nor nand FLASH区别(开发板启动时) 及 结构
nandflash 的分区表对应于内核arch/arm/mach-s3c2440/mach-mini2440.c中(友善官网提供的2.6.32.2的移植内核)
flash 分区 nor nand FLASH区别(开发板启动时) 及 结构" title="S3C2440 flash 分区 nor nand FLASH区别(开发板启动时) 及 结构" height="112" width="690">
在linux2.6.32.2 中 已经自带了大部分nandflash驱动
在linux-2.6.32.2/drivers/mtd/nand/nand_ids.c这个文件中里面定义了所支持的各种nandflash类型
在linux 2.6.32 中 nand驱动是被注册为平台设备
在linux统源代码树中 在linux2.6.32/arch/arm 这个文件夹中
目录plat-s3c24xx中 有common-smdk.c文件里面定义nandflash的默认分区情况 这个是这个s3c24xx平台的 可能并不适合我们的具体的开发板
因此在这个目录外 有相应得开发板的具体的一些硬件结构信息
mach-s3c2440 这个目录 里面 的mach-mini2440.c中就定义了我们自己开发板上自己划分的适合的分区
static struct mtd_partition friendly_arm_default_nand_part[] ={
[0] ={
.name ="supervivi",//bootloader 所在分区 可以放u-boot supervivi等对应为/dev/mtdblock0
.size =0x00040000,
.offset =0,
},
[1] ={
.name ="param",//这里是supervivi 或bootloader(uboot)等参数区如果uboot较大 可以覆盖此区域 不会影响系统的启动 对应于/dev/mtdblock1
.offset =0x00040000,
.size =0x00020000,
},
[2] ={
.name ="Kernel",//内核所在的分区 大小5M 一般内核也就是2点几兆 足够了 对应/dev/mtdblock2
.offset =0x00060000,
.size =0x00500000,
},
[3] ={
.name ="root",//文件系统分区 nandflash用的多的yaffs2文件系统 对应/dev/mtdblock3
.offset =0x00560000,
.size = 1024* 1024 * 1024, //
},
[4] ={
.name ="nand",//此区域代表了整片的nandflash 主要是预留使用 比如以后可以通过应用程序访问读取/dev/mtdblock4就能实现备份整片nandflash了
.offset =0x00000000,
.size = 1024* 1024 * 1024, //
}
};
特别注意:对文件系统的分区大小要是nand页的大小的整数倍 否则会出现readonly错误 flash按页读取
//下面为开发板的nandflash设置表 因为板子上只有一片 因此也就只有一个表
static struct s3c2410_nand_set friendly_arm_nand_sets[] = {
[0] ={
.name ="NAND",
.nr_chips =1,
.nr_partitions = ARRAY_SIZE(friendly_arm_default_nand_part),
.partitions =friendly_arm_default_nand_part,
},
};
//下面是nand flash 本身的一些特性 一般需要对照datasheet填写 大部分情况下按照以下参数填写即可
static struct s3c2410_platform_nand friendly_arm_nand_info ={
.tacls = 20,
.twrph0 = 60,
.twrph1 = 20,
.nr_sets =ARRAY_SIZE(friendly_arm_nand_sets),
.sets =friendly_arm_nand_sets,
.ignore_unset_ecc = 1,
};
注意:
mini2440_nand_info需要注册到mini2440_map_io中。
static void __init mini2440_map_io(void)
{
s3c24xx_init_io(mini2440_iodesc,ARRAY_SIZE(mini2440_iodesc));
s3c24xx_init_clocks(12000000);
s3c24xx_init_uarts(mini2440_uartcfgs,ARRAY_SIZE(mini2440_uartcfgs));
}
//下面把nandflash这个设备注册到系统中
static struct platform_device *mini2440_devices[] __initdata ={
&s3c_device_usb,
&s3c_device_rtc,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&mini2440_device_eth,
&s3c24xx_uda134x,
&s3c_device_nand,//把nandflash添加到开发板设备列表结构中
&s3c_device_sdi,
&s3c_device_usbgadget,
}; |
|
|
|
|
|