nandflash移植,已做过,但是不是很理解,收录平常看着玩

在/arch/arm/plat-24xx/common-smdk.c 文件中看出

static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "Boot Agent",
.size = SZ_16K,
.offset = 0,
},
[1] = {
.name = "S3C2410 flash partition 1",
.offset = 0,
.size = SZ_2M,
},
[2] = {
.name = "S3C2410 flash partition 2",
.offset = SZ_4M,
.size = SZ_4M,
},
[3] = {
.name = "S3C2410 flash partition 3",
.offset = SZ_8M,
.size = SZ_2M,

},
[4] = {
.name = "S3C2410 flash partition 4",
.offset = SZ_1M * 10,
.size = SZ_4M,
},
[5] = {
.name = "S3C2410 flash partition 5",
.offset = SZ_1M * 14,
.size = SZ_1M * 10,
},
[6] = {
.name = "S3C2410 flash partition 6",

.offset = SZ_1M * 24,
.size = SZ_1M * 24,
},
[7] = {
.name = "S3C2410 flash partition 7",
.offset = SZ_1M * 48,
.size = SZ_16M,
}
};

这其实就是Nand Flash 的分区表,在Linux-2.6.32.2 中,nand 驱动是被注册为平台
设备的,这同样可在/arch/arm/plat-24xx/common-smdk.c 文件中看出,如下:

static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 20,
.twrph0 = 60,
.twrph1 = 20,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};
/* devices we initialise */
static struct platform_device __initdata *smdk_devs[] = {
&s3c_device_nand,
&smdk_led4,
&smdk_led5,
&smdk_led6,
&smdk_led7,
};

 

 

 

;以下蓝色部分为说明文字
static struct mtd_partition mini2440_default_nand_part[] = {
[0] = {
.name = "supervivi", ;这里是bootloader 所在的分区,可以放置u-boot, supervivi 等内容,对应
/dev/mtdblock0
.size = 0x00040000,
.offset = 0,
},
[1] = {
.name = "param", ;这里是supervivi 的参数区,其实也属于bootloader 的一部分,如果u-boot 比较
大,可以把此区域覆盖掉,不会影响系统启动,对应/dev/mtdblock1
.offset = 0x00040000,
.size = 0x00020000,
},

[2] = {
.name = "Kernel", ;内核所在的分区,大小为5M,足够放下大部分自己定制的巨型内核了,比如内核
使用了更大的Linux Logo 图片等,对应/dev/mtdblock2
.offset = 0x00060000,
.size = 0x00500000,
},
[3] = {
.name = "root", ;文件系统分区,友善之臂主要用来存放yaffs2 文件系统内容,对应/dev/mtdblock3
.offset = 0x00560000,
.size = 1024 * 1024 * 1024, //
},
[4] = {
.name = "nand", ;此区域代表了整片的nand flash,主要是预留使用,比如以后可以通过应用程序访
问读取/dev/mtdblock4 就能实现备份整片nand flash 了。
.offset = 0x00000000,
.size = 1024 * 1024 * 1024, //
}
};

;这里是开发板的nand flash 设置表,因为板子上只有一片,因此也就只有一个表
static struct s3c2410_nand_set mini2440_nand_sets[] = {
[0] = {
.name = "NAND",
.nr_chips = 1,
.nr_partitions = ARRAY_SIZE(mini2440_default_nand_part),
.partitions = mini2440_default_nand_part,
},
};
;这里是nand flash 本身的一些特性,一般需要对照datasheet 填写,大部分情况下按照以下参数填写即可
static struct s3c2410_platform_nand mini2440_nand_info = {
.tacls = 20,
.twrph0 = 60,
.twrph1 = 20,
.nr_sets = ARRAY_SIZE(mini2440_nand_sets),
.sets = mini2440_nand_sets,
.ignore_unset_ecc = 1,
};

除此之外,还需要把nand flash 设备注册到系统中,
static struct platform_device *mini2440_devices[] __initdata = {
&s3c_device_usb,

&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_nand, ;把nand flash 设备添加到开发板的设备列表结构
};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值