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.

处理解除绑定

你感兴趣的功能大概是这些:

您可以通过driver->bus->match()查看设备是否匹配特定驱动程序。

请注意,device_driver_detach()(在drivers/base/bus.c中用于实现解绑定)未导出,请改用device_release_driver()