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()

 

posted on 2017-04-06 18:11  哈哈木  阅读(317)  评论(0编辑  收藏  举报