S3C2440 flash 分区 nor nand FLASH区别(开发板启动时) 及 结构
来源:互联网 发布:java socket连接 编辑:程序博客网 时间:2024/05/24 05:57
nandflash 的分区表 对应于内核arch/arm/mach-s3c2440/mach-mini2440.c中(友善官网提供的2.6.32.2的移植内核)
在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));
在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中
因此在这个目录外 有相应得开发板的具体的一些硬件结构信息
mach-s3c2440 这个目录 里面 的mach-mini2440.c中就定义了我们自己开发板上自己划分的适合的分区
static struct mtd_partition friendly_arm_default_nand_part[] = {
};
特别注意:对文件系统的分区大小要是nand页的大小的整数倍 否则会出现readonly错误 flash按页读取
//下面为开发板的nandflash设置表 因为板子上只有一片
static struct s3c2410_nand_set friendly_arm_nand_sets[] = {
};
//下面是nand flash 本身的一些特性 一般需要对照datasheet填写 大部分情况下按照以下参数填写即可
static struct s3c2410_platform_nand friendly_arm_nand_info = {
};
注意:
mini2440_nand_info需要注册到mini2440_map_io中。
static void __init mini2440_map_io(void)
{