Linux 设备驱动程序:绑定和解除绑定
Linux device drivers: bind and unbind
我看到了 LWN 文章 "Manual driver binding and unbinding",其中解释了如何使用 sysfs
接口动态绑定和取消绑定 [=17] 中的驱动程序=].这个接口在内核代码中具体在哪里实现?我假设这是在整个内核中共享的。
您正在寻找的功能已实现 here in drivers/base/bus.c
。
当您写入 /sys/bus/usb/drivers/usb/bind
时调用的函数是 bind_store()
,它获取从用户空间传递的字符串并使用它来查找合适的设备。然后检查驱动程序是否在其 id table 中声明支持该设备,如果是,则将其绑定到设备。同样,同一文件中的 unbind_store()
通过 /sys/bus/usb/drivers/usb/unbind
.
处理解除绑定
你感兴趣的功能大概是这些:
bus_find_device_by_name()
来自 linux/device/bus.h
bus_find_device()
来自 linux/device/bus.h
device_driver_attach()
来自 linux/device.h
device_release_driver()
来自 linux/device.h
您可以通过driver->bus->match()
查看设备是否匹配特定驱动程序。
请注意,device_driver_detach()
(在drivers/base/bus.c
中用于实现解绑定)未导出,请改用device_release_driver()
。
我看到了 LWN 文章 "Manual driver binding and unbinding",其中解释了如何使用 sysfs
接口动态绑定和取消绑定 [=17] 中的驱动程序=].这个接口在内核代码中具体在哪里实现?我假设这是在整个内核中共享的。
您正在寻找的功能已实现 here in drivers/base/bus.c
。
当您写入 /sys/bus/usb/drivers/usb/bind
时调用的函数是 bind_store()
,它获取从用户空间传递的字符串并使用它来查找合适的设备。然后检查驱动程序是否在其 id table 中声明支持该设备,如果是,则将其绑定到设备。同样,同一文件中的 unbind_store()
通过 /sys/bus/usb/drivers/usb/unbind
.
你感兴趣的功能大概是这些:
bus_find_device_by_name()
来自linux/device/bus.h
bus_find_device()
来自linux/device/bus.h
device_driver_attach()
来自linux/device.h
device_release_driver()
来自linux/device.h
您可以通过driver->bus->match()
查看设备是否匹配特定驱动程序。
请注意,device_driver_detach()
(在drivers/base/bus.c
中用于实现解绑定)未导出,请改用device_release_driver()
。