linux之mtd子系统

一 子系统架构

*设备节点层:MTD框架可以在/dev下创建字符设备节点(主设备号90)以及块设备节点(主设备号31), 用户通过访问此设备节点即可访问MTD字符设备或块设备。
*MTD设备层: 基于MTD原始设备, Linux在这一层次定义出了MTD字符设备和块设备, 字符设备在mtdchar.c中实现, 块设备则是通过结构mtdblk_dev来描述,"/drivers/mtd/mtdchar.c"文件实现了MTD字符设备接口; "/drivers/mtd/mtdblock.c"文件实现了MTD块设备接口
*MTD原始设备层: 由MTD原始设备的通用代码+特定的Flash数据组成。mtd_info、mtd_part、mtd_partition以及mtd_partitions等对象及其操作方法就属于这一层,对应的文件是"drivers/mtd/mtdcore.c"。类似于i2c驱动框架中的核心层。
*硬件驱动层: 内核将常用的flash操作都已经在这个层次实现, 驱动开发只需要将相应的设备信息添加进去即可, 比如nor flash的芯片驱动位于"drivers/mtd/chips/", nand flash位于"drivers/mtd/nand/


linux之mtd子系统

二 关键数据结构


三 数据流


四 SOC驱动


五 Nand使用框架

linux之mtd子系统
Nand Flash经常提的两个功能就是负责均衡和坏块管理,其中坏块管理,常用的方法有:OOB标记(uboot),FTL芯片控制,文件系统(yaffs2,jaffs2),中间件控制(ubi),BBT标记(kernel)等。

参考

nand flash 坏块