Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55597
  • 博文数量: 19
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2015-02-04 10:43
文章分类
文章存档

2015年(19)

我的朋友

分类: 嵌入式

2015-05-11 11:11:07

配对函数(match)、探测函数(probe)

第一个是配对函数(match),它是总线结构体bus_type的其中一个成员:

57 int (*match)(struct device *dev, struct device_driver *drv); 

当总线上添加了新设备或者新驱动函数的时候,内核会调用一次或者多次这个函数。

举例,如果我现在添加了一个新的驱动函数,内核就会调用所属总线的match函数,配对总线上所有的设备,如果驱动能够处理其中一个设备,函数返回0,告诉内核配对成功。

一般的,match函数是判断设备的结构体成员device->bus_id和驱动函数的结构体成员device_driver->name是否一致,如果一致,那就表明配对成功

第二个是探测函数(probe),它是驱动函数结构体中的一个成员:

129 int (*probe) (struct device *dev); 

当配对(match)成功后,内核就会调用指定驱动中的probe函数来查询设备能否被该驱动操作,如果可以,驱动就会对该设备进行相应的操作,如初始化。所以说,真正的驱动函数入口是在probe函数中

另外:一个驱动可以对应多个设备一个设备只能对应一个驱动

阅读(2186) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~