MTD驱动结构中NOR Flash探测过程:
①在板子NOR Flash初始化函数中,需要定义并实现map_info结构体,调用do_map_probe() (定义在文件mtd/chips/chipreg.c) 函数探测flash驱动,函数返回一个mtd_info结构体的指针;
②do_map_probe()函数中调用get_mtd_chip_driver(name),通过驱动的name得到flash的驱动,get_mtd_chip_driver()函数根据驱动name在链表chip_drvs_list中查找芯片驱动,返回mtd_chip_driver结构体指针;
③得到芯片驱动以后调用芯片的probe探测函数,drv->probe(map) ;
④芯片的驱动程序是通过函数register_mtd_chip_driver()加入到链表chip_drvs_list中的,例如,符合CFI接口标准的芯片的驱动加入过程:
①mtd/chips/cfi_probe.c 文件中的模块初始化函数cfi_probe_init()调用register_mtd_chip_driver(&cfi_chipdrv),其参数cfi_chipdrv是一个struct mtd_chip_driver结构体,成员变变量name=”cfi_probe”,probe=cfi_probe;
②在驱动探测函数cfi_probe中,调用mtd_do_chip_probe()函数进行芯片驱动探测;
③mtd_do_chip_probe定义在文件mtd/chips/gen_probe.c中,其中调用的函数check_cmd_set()根据内核编译配置调用相应的commander set函数,例如,如果使用intel系列flash,即CONFIG_MTD_CFI_INTELEXT,则调用函数cfi_cmdset_0001(map, primary);
④函数cfi_cmdset_0001()定义在文件mtd/chips/cfi_cmdset_0001.c,这个函数初始化了mtd_info的read、write、erease等flash芯片的具体操作函数 (相关的函数同样定义在这个文件中) ,返回一个填充好各种操作函数的mtd_info结构体的指针。
这样,函数do_map_probe() 返回的mtd_info结构体指针已经填充了各种flash的具体操作函数,MTD上层驱动架构和底层硬件驱动以这样的接口联系起来。
阅读(2194) | 评论(0) | 转发(0) |