第八章Linux下MTD驱动
上章回顾
Linux下MTD驱动
第8章
预习检查
本章目标
掌握Linux下MTD驱动层结构
掌握NOR Flash或NAND Flash驱动程序的移植、开发
了解Flash文件系统
本章结构
Linux下MTD驱动
Linux MTD 系统层次
Linux MTD系统接口
Linux MTD 驱动结构
MTD NOR Flash驱动
MTD NAND Flash驱动
Flash文件系统建立
8.1 Linux MTD驱动结构
MTD(Memory Technology Device)
MTD(内存技术设备)是用于访问memory设备(比如NOR Flash、NAND Flash)的Linux的子系统。
MTD在硬件和上层之间提供了一个抽象的接口。目的是为了使新的memory设备的驱动更加简单。
MTD将文件系统与底层的Flash存储器进行了隔离,使Flash驱动工程师无须关心Flash作为字符设备和块设备与Linux内核的接口。
8.1.1 Linux MTD系统层次结构
Linux系统中的Flash设备驱动可将分为四层:
设备节点
MTD设备层
MTD原始设备层
硬件驱动层。
字符设备节点
MTD字符设备
MTD块设备
块设备节点
文件系统
根文件系统
MTD原始设备
FLASH硬件驱动
8.1.2 Linux MTD 系统接口
MTD设备层
mtd_notifier
mtd_fops
字符设备
(mtdchar.c)
mtd_notifier
mtd_fops
mtdblks
块设备
(mtdblock.c)
register_mtd_user() unregister_mtd_user()
put_mtd_device()
erase_info()
get_mtd_device() MTD原始设备层
mtd_notifier
mtd_table
(mtdcore.c) mtd_info
(mtdpart.c) mtd_part
add_mtd_partitions() del_mtd_partitions()
add_mtd_device() add_mtd_device()
mtd_partition() Flash硬件驱动层
(your-flash.c)
8.1.2 Linux MTD 系统接口
mtd_info 结构体主要成员(1)
u_char type; //内存技术的类型
u_int32_t flags; //标志位
u_int32_t size; //mtd设备的大小
u_int32_t erasesize; /*主要的擦除块大小(同一个mtd设备可能有数
*种不同的erasesize)*/
u_int32_t oobblock; //oob块大小
u_int32_t oobsize; //oob数据大小
u_int32_t ecctype; //ecc类型
u_int32_t eccsize; //ecc工作的范围
char *name;
8.1.2 Linux MTD 系统接口
mtd_info 结构体主要成员(2)
int (*erase)(struct mtd_info *mtd, struct erase_info *instr)?;
//此routine用于将一个erase_info加入erase queue
int(*read)(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen,
u_char *buf); //读F