在2.6版本中,加入总线,设备,驱动概念。
总线匹配的概念:设备每注册一个设备时,会寻找与之匹配的驱动。
以platform_bus_type为例分析
此类总线的设备注册函数为platform_add_devices,每次加入挂载到此类总线的设备,均会调用总线匹配函数platform_match
调用路径为platform_add_devices---->platform_device_register---->platform_device_add---->device_add---->bus_attach_device---->device_attach---->__device_attach---->
driver_probe_device---->drv->bus->match(dev, drv)
最后调用的drv->bus->match(dev, drv)即为总线匹配函数,platform_buse_type总线的匹配函数即为platform_match.
设备每注册一个驱动时,会寻找与之匹配的设备。
以platform_bus_type为例分析
此类总线的驱动注册函数为platform_driver_register,每次挂载到此类总线的驱动,均会调用总线匹配函数platform_match
调用路径为platform_driver_register---->driver_register---->bus_add_driver---->driver_attach---->__driver_attach---->drv->bus->match(dev, drv)
最后调用的drv->bus->match(dev, drv)即为总线匹配函数,platform_buse_type总线的匹配函数即为platform_match.
关于设备和驱动具体的关联,具体操作是在driver.probe里,
以platform_add_devices注册为例,当匹配完毕后,就会调用驱动的探测函数,
调用路径为platform_add_devices---->platform_device_register---->platform_device_add---->device_add---->bus_attach_device---->device_attach---->__device_attach---->
driver_probe_device---->really_probe---->drv->probe(dev).