Driver的prob的调用顺序

Driver的注册

 

Driverprob的调用顺序

可以从bus_attach_device()看起,

1 bus_attach_device()调用device_attach(dev)

2 device_attach(): 调用bus_for_each_drv()遍历bus上的每个driver,当找到一个driver则用__device_attach()来判断是否匹配

3 __device_attach(): 直接调用driver_probe_device(drv, dev)

4 driver_probe_device(): 首先如果driver所在总线有match函数则先调用这个match来匹配,如不匹配则直接返回错误,否则接着调用really_probe(dev,drv)

5 really_probe(): 先判断dev所在总线是否有probe函数,有则调用它来匹配,失败则返回,正确则成功,如果总线没有probe则判断drv是否有probe函数,有则调用并匹配它.

6 drv->prob():  一般它是一类设备的probe,在它里面它会调用具体某个drvprobe函数,这个函数是在我们的驱动程序里面注册的.  

   下面以usb acm驱动为例:

1    注册: usb_register()注册我们的usb_driver对象;里面含有一个probe函数.并含有一个device_driver对象(其实这个对象才是真正注册到系统理的驱动对象)

2    Usb_register(): 调用usb_register_driver()

3    usb_register_driver(): 填充device_driver对象(包括一个usb_probe_interface函数,USB设备类通用的probe函数), 最后通过driver_register注册这个device_driver.

Probe过程.

新的usb设备连上机器后, hub_port_connect_change会被调用

你可能感兴趣的:(each,interface)