Chinaunix首页 | 论坛 | 博客
  • 博客访问: 344357
  • 博文数量: 108
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 65
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-16 11:38
文章分类
文章存档

2016年(2)

2015年(44)

2014年(62)

分类: 嵌入式

2014-11-01 14:33:28

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_inforeadwriteereaseflash芯片的具体操作函数 (相关的函数同样定义在这个文件中) ,返回一个填充好各种操作函数的mtd_info结构体的指针。
   这样,函数do_map_probe() 返回的mtd_info结构体指针已经填充了各种flash的具体操作函数,MTD上层驱动架构和底层硬件驱动以这样的接口联系起来。
阅读(2194) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~