2012年(1008)
分类:
2012-08-01 10:56:48
配对函数(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函数中。
另外:一个驱动可以对应多个设备、一个设备只能对应一个驱动。