自动将设备绑定到特定驱动程序
automatically bind a device to a specific driver
我想将 hid 设备绑定到特定的驱动程序。
不幸的是,当设备重新连接时,以某种方式隐藏了通用 "steals" 绑定。
我知道我可以通过这种方式手动解绑和绑定设备:
# echo ... > /sys/bus/hid/drivers/hid-generic/unbind
# echo ... > /sys/bus/hid/drivers/customdriver/bind
但是驱动程序是否可以自动将设备绑定到驱动程序?
提前致谢!
我找到了两种自动将设备绑定到我的驱动程序的方法
将设备添加到 hid-core.c.
中的 hid_have_special_driver 结构
结构看起来像这样:
static const struct hid_device_id hid_have_special_driver[] = {
#if IS_ENABLED(CONFIG_HID_A4TECH)
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
#endif
//...
{}
}
一般都是这样的,还没试过。你必须重新编译 hid-core.c (hid.ko).
在 udev-rule.
中使用绑定和解除绑定功能
将新规则添加到 /etc/udev/rules.d/(例如 99-mydriver.rules),它会自动解除设备与 hid-generic 的绑定并将其绑定到您的驱动程序
拱下 Linux x86_64:
ACTION=="bind", KERNELS=="0005:<VENDOR_ID>:<PRODUCT_ID>.*", SUBSYSTEMS=="hid", DRIVERS=="hid-generic", \
RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/$driver/unbind'", \
RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/<MY_DRIVER>/bind'"
在Raspbian下为我展开以下作品
ACTION=="add", KERNEL=="0005:<VENDOR_ID>:<PRODUCT_ID>.*", SUBSYSTEM=="hid", DRIVER=="hid-generic", \
RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/hid-generic/unbind'", \
RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/<MY_DRIVER>/bind'"
根据需要替换 <VENDOR_ID>
、<PRODUCT_ID>
和 <MY_DRIVER>
更多信息:http://0x0001.de/linux-driver-loading-registration-and-binding/
我想将 hid 设备绑定到特定的驱动程序。
不幸的是,当设备重新连接时,以某种方式隐藏了通用 "steals" 绑定。
我知道我可以通过这种方式手动解绑和绑定设备:
# echo ... > /sys/bus/hid/drivers/hid-generic/unbind
# echo ... > /sys/bus/hid/drivers/customdriver/bind
但是驱动程序是否可以自动将设备绑定到驱动程序?
提前致谢!
我找到了两种自动将设备绑定到我的驱动程序的方法
将设备添加到 hid-core.c.
中的 hid_have_special_driver 结构结构看起来像这样:
static const struct hid_device_id hid_have_special_driver[] = { #if IS_ENABLED(CONFIG_HID_A4TECH) { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) }, { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) }, { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) }, #endif //... {} }
一般都是这样的,还没试过。你必须重新编译 hid-core.c (hid.ko).
在 udev-rule.
中使用绑定和解除绑定功能将新规则添加到 /etc/udev/rules.d/(例如 99-mydriver.rules),它会自动解除设备与 hid-generic 的绑定并将其绑定到您的驱动程序
拱下 Linux x86_64:
ACTION=="bind", KERNELS=="0005:<VENDOR_ID>:<PRODUCT_ID>.*", SUBSYSTEMS=="hid", DRIVERS=="hid-generic", \ RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/$driver/unbind'", \ RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/<MY_DRIVER>/bind'"
在Raspbian下为我展开以下作品
ACTION=="add", KERNEL=="0005:<VENDOR_ID>:<PRODUCT_ID>.*", SUBSYSTEM=="hid", DRIVER=="hid-generic", \ RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/hid-generic/unbind'", \ RUN+="/bin/bash -c 'echo $kernel > /sys/bus/hid/drivers/<MY_DRIVER>/bind'"
根据需要替换
<VENDOR_ID>
、<PRODUCT_ID>
和<MY_DRIVER>
更多信息:http://0x0001.de/linux-driver-loading-registration-and-binding/