linux驱动模型---笔记(2)
match()方法检查要加入(或删除)的设备是否和驱动程序“匹配”,如果匹配成功,则对设备
调用总线或驱动程序中定义的probe(或remove)方法。添加设备时产生KOBJ_ADD uevent,
删除设备时产生KOBJ_REMOVE uevent
5 总结一下在总线中添加和删除驱动程序的过程:
(1) 驱动程序添加
driver_register(drv)-> bus_add_driver (drv)-> driver_attach(drv)
->__driver_attach(dev,drv)
->bus_type():match(dev,drv) then
->driver_probe_device()->really_probe()
->bus_type:probe() 或device_driver:probe()
driver_register(drv)-> kobject_uevent(KOBJ_ADD)
(2) 驱动程序删除
driver_unregister(dev)->bus_remove_driver(drv)-> driver_detach(drv)
->__ device_release_driver(dev) [dev-drv 管理的所有设备]
->bus_type:remove() 或device_driver:remove()
(3) 当在总线上添加(或删除)驱动程序时,会依次遍历总线上的所有设备,调用总线定义的
match()方法检查要加入(或删除)的驱动程序是否和设备“匹配”,如果匹配成功,则对设备
调用总线或驱动程序中定义的probe(或remove)方法。添加驱动程序时产生KOBJ_ADD
uevent,删除驱动程序时产生KOBJ_REMOVE uevent。[注:KOBJ_REMOVE uevent 在
kobject_put(&drv->p->kobj)中产生]
相关新闻>>
- 发表评论
-
- 最新评论 更多>>