linux中MTDflash设备驱动大概
一、主要结构体
1、mtd_info,主要是描述MTD原始设备层中的设备或分区,
2、mtd_part,表示一个分区,用里面的主mtd_info和本分区mtd_info描述分区,
3、mtd_partition,描述分区表,相当于dts中的分区信息,在BSP板中也定义,
4、map_info,norflash的硬件描述,
5,nand_chip,nandflash的硬件描述,
二、几个重要的函数
1、int add_mtd_device(struct mtd_info *mtd);注册mtd设备
2、int del_mtd_device(struct mtd_info *mtd);注销mtd设备
3、add_mtd_partition(struct mtd_info *master,struct mtd_partition *parts,int nbparts);根据parts中的分区信息和数量nbparts和master主分区进行分区注册,里面会生成mtd_part结构体并多次调用add_mtd_device进行注册设备。
4、del_mtd_partitions(struct mtd_info *master);删除所有分区,包括主分区和分区,会多次调用del_mtd_device;
5、struct mtd_info *do_map_probe(const char *name,struct map_info *map);根据map和名字name探测针对NOR flash的mtd_info,因为NORflash的驱动按照标准是统一的。
6、parse_mtd_partitions();探测分区上是否已经有分区
7、int nand_scan(struct mtd_info *mtd,int maxchips);根据mtd中的priv指定的nand_chip探测nandflash具体驱动并初始化mtd。
三、NORFLASH驱动流程
1、初始化map_info
2、do_map_probe()得到mtd_info
3、parse_mtd_partitions()得到mtd_partitions
4、add_mtd_partitions();
5、del_mtd_partitions();
6、map_destory()释放mtd_info
四、NANDFLASH驱动流程
1、初始化mtd_info,其priv指向nand_chip
2、初始化nand_chip中的hwcontrol()、dev_ready()、chip_delay();eccmode等
3、初始化nandflash io 接口状态
4、nand_scan()填充mtd_info
5、add_mtd_device()/add_mtd_partitions()
6、nand_release()