linux中MTDflash設(shè)備驅(qū)動大概
一、主要結(jié)構(gòu)體
1、mtd_info,主要是描述MTD原始設(shè)備層中的設(shè)備或分區(qū),
2、mtd_part,表示一個分區(qū),用里面的主mtd_info和本分區(qū)mtd_info描述分區(qū),
3、mtd_partition,描述分區(qū)表,相當于dts中的分區(qū)信息,在BSP板中也定義,
4、map_info,norflash的硬件描述,
5,nand_chip,nandflash的硬件描述,
二、幾個重要的函數(shù)
1、int add_mtd_device(struct mtd_info *mtd);注冊mtd設(shè)備
2、int del_mtd_device(struct mtd_info *mtd);注銷mtd設(shè)備
3、add_mtd_partition(struct mtd_info *master,struct mtd_partition *parts,int nbparts);根據(jù)parts中的分區(qū)信息和數(shù)量nbparts和master主分區(qū)進行分區(qū)注冊,里面會生成mtd_part結(jié)構(gòu)體并多次調(diào)用add_mtd_device進行注冊設(shè)備。
4、del_mtd_partitions(struct mtd_info *master);刪除所有分區(qū),包括主分區(qū)和分區(qū),會多次調(diào)用del_mtd_device;
5、struct mtd_info *do_map_probe(const char *name,struct map_info *map);根據(jù)map和名字name探測針對NOR flash的mtd_info,因為NORflash的驅(qū)動按照標準是統(tǒng)一的。
6、parse_mtd_partitions();探測分區(qū)上是否已經(jīng)有分區(qū)
7、int nand_scan(struct mtd_info *mtd,int maxchips);根據(jù)mtd中的priv指定的nand_chip探測nandflash具體驅(qū)動并初始化mtd。
三、NORFLASH驅(qū)動流程
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驅(qū)動流程
1、初始化mtd_info,其priv指向nand_chip
2、初始化nand_chip中的hwcontrol()、dev_ready()、chip_delay();eccmode等
3、初始化nandflash io 接口狀態(tài)
4、nand_scan()填充mtd_info
5、add_mtd_device()/add_mtd_partitions()
6、nand_release()
浙公網(wǎng)安備 33010602011771號