Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1259760
  • 博文数量: 548
  • 博客积分: 7597
  • 博客等级: 少将
  • 技术积分: 4224
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-15 13:21
个人简介

嵌入式软件工程师&&太极拳

文章分类

全部博文(548)

文章存档

2014年(10)

2013年(76)

2012年(175)

2011年(287)

分类: 嵌入式

2012-05-09 14:00:44

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上层驱动架构和底层硬件驱动以这样的接口联系起来。
阅读(1221) | 评论(1) | 转发(1) |
0

上一篇:9200中网络MAC中断处理

下一篇:RF射频模块

给主人留下些什么吧!~~

小豆熊2012-05-09 22:33:17

博主的博客很专业啊~值得一看