免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 15484 | 回复: 6
打印 上一主题 下一主题

nand flash 分区的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-23 23:49 |只看该作者 |倒序浏览
nand的分区,到底是什么概念呢!我若是在linux中设置了相应的分区地址!我用uboot来将各个部分如linux内核,文件系统载入到相应的nand区!这样是不是就是分区?这样可以吗?
还有所谓supervivi来自动分区,是怎么分区的呢?它是怎么作的呢?

论坛徽章:
0
2 [报告]
发表于 2009-04-26 08:59 |只看该作者
原帖由 linlinver 于 2009-4-23 23:49 发表
nand的分区,到底是什么概念呢!我若是在linux中设置了相应的分区地址!我用uboot来将各个部分如linux内核,文件系统载入到相应的nand区!这样是不是就是分区?这样可以吗?
还有所谓supervivi来自动分区,是怎 ...

我也想知道,呵呵

论坛徽章:
0
3 [报告]
发表于 2009-04-29 11:09 |只看该作者
顶,我也有很多疑惑,
vivi里面bon分区和mtd分区究竟有什么区别和联系?网上查了许多文章没有一篇说清楚的
bon分区有什么用我还不明白,
对于mtd分区我目前的理解是
它的分区表信息不写入flash,而是要求内核和bootloader的mtd分区信息一致,
相当于是一个协定。
不知道这样说对不对。


以前在csdn问过这个问题,没一个人回答
高手们不要保留啊,是不是这个问题太菜了?

论坛徽章:
0
4 [报告]
发表于 2009-05-01 16:31 |只看该作者
一块nand flash可以分成多个MTD分区,就像硬盘可以分成几个盘一样,所以vivi把nand分区的信息就要和内核MTD层对这块nand flash的分区情况要一致,这样一块nandflash就变成了多个MTD设备,当然每个设备上可以装上不同的东西,就像一块硬盘上装双系统 ,bon只是其中一块被用做文件系统的MTD设备

不知道这样说对不对?

[ 本帖最后由 yexm 于 2009-5-1 16:32 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-05-01 21:42 |只看该作者
原帖由 peimichael 于 2009-4-29 11:09 发表
顶,我也有很多疑惑,
vivi里面bon分区和mtd分区究竟有什么区别和联系?网上查了许多文章没有一篇说清楚的
bon分区有什么用我还不明白,
对于mtd分区我目前的理解是
它的分区表信息不写入flash,而是要求内 ...

没有必然联系,vivi只负责初始化芯片内外围设备,随后将控制权交给内核
你可以跟下mtd驱动,就明白了。mtd底层才是具体的flash设备驱动(norflash或nandflash),mtd上层是抽象设备驱动,对于内核和应用来说,根本不会理会flash是哪种类型。事实上,对于linux内核来说,其他大多数设备也是一样的,什么设备类型都会抽象成统一的接口
至于分区也没有必然联系,当然为了防止修改敏感的flash分区,如kernel、rootfs、bootloader分区,mtd分区会与bootloader的分区保持一致。其他就无所谓了,看你应用怎么用了

论坛徽章:
0
6 [报告]
发表于 2009-05-01 21:50 |只看该作者
  MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。MTD的所有源代码在/drivers/mtd子目录下。我将CFI接口的MTD设备分为四层(从设备节点直到底层硬件驱动),这四层从上到下依次是:设备节点、MTD设备层、MTD原始设备层和硬件驱动层。

  一、Flash硬件驱动层:硬件驱动层负责在init时驱动Flash硬件,Linux MTD设备的NOR Flash芯片驱动遵循CFI接口标准,其驱动程序位于drivers/mtd/chips子目录下。NAND型Flash的驱动程序则位于/drivers/mtd/nand子目录下。

  二、MTD原始设备:原始设备层有两部分组成,一部分是MTD原始设备的通用代码,另一部分是各个特定的Flash的数据,例如分区。 用于描述MTD原始设备的数据结构是mtd_info,这其中定义了大量的关于MTD的数据和操作函数。mtd_table(mtdcore.c)则是所有MTD原始设备的列表,mtd_part(mtd_part.c)是用于表示MTD原始设备分区的结构,其中包含了mtd_info,因为每一个分区都是被看成一个MTD原始设备加在mtd_table中的,mtd_part.mtd_info中的大部分数据都从该分区的主分区mtd_part->master中获得。 在drivers/mtd/maps/子目录下存放的是特定的flash的数据,每一个文件都描述了一块板子上的flash。其中调用add_mtd_device()、del_mtd_device()建立/删除mtd_info结构并将其加入/删除mtd_table(或者调用add_mtd_partition()、del_mtd_partition()(mtdpart.c)建立/删除mtd_part结构并将mtd_part.mtd_info加入/删除mtd_table 中)。

  三、MTD设备层:基于MTD原始设备,linux系统可以定义出MTD的块设备(主设备号31)和字符设备(设备号90)。MTD字符设备的定义在mtdchar.c中实现,通过注册一系列file operation函数(lseek、open、close、read、write)。MTD块设备则是定义了一个描述MTD块设备的结构mtdblk_dev,并声明了一个名为mtdblks的指针数组,这数组中的每一个mtdblk_dev和mtd_table中的每一个mtd_info一一对应。

  四、设备节点:通过mknod在/dev子目录下建立MTD字符设备节点(主设备号为90)和MTD块设备节点(主设备号为31),通过访问此设备节点即可访问MTD字符设备和块设备。

  五、根文件系统:在Bootloader中将JFFS(或JFFS2)的文件系统映像jffs.image(或jffs2.img)烧到flash的某一个分区中,在/arch/arm/mach-your/arch.c文件的your_fixup函数中将该分区作为根文件系统挂载。

  六、文件系统:内核启动后,通过mount 命令可以将flash中的其余分区作为文件系统挂载到mountpoint上。

摘自Jim Zeus的《Linux MTD源代码分析》

评分

参与人数 1可用积分 +30 收起 理由
bitmilong + 30 精品

查看全部评分

论坛徽章:
0
7 [报告]
发表于 2012-10-09 20:54 |只看该作者
我的norflsh是512K的,在proc/mtd下可以看到分区,但是分区的擦除块大小不对是怎么回事,芯片手册是4K我的显示是正个芯片的大小
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP