强制驱动程序与设备匹配

sho*_*nex 22 linux usb kernel

我有一块USB硬件,我知道它的驱动程序.但是,供应商ID和产品ID与驱动程序中注册的VID,PID对不匹配.在linux中是否有办法强制驱动程序与已知设备关联,而不涉及内核模块重新编译以添加PID/VID对?

sho*_*nex 23

在sysfs树中找到该模块.在这种情况下它是在

/sys/bus/usb-serial/drivers/cp2101

在此目录中,有一个new_id文件条目可用于动态添加VID PID对,如下所示:

echo VID PID >new_id

这是关于此功能的LWN条目

  • +1:很好的答案.在我的USB机器上,我发现路径为:/ sys/bus/usb/drivers/usb/usb4/idVendor和/ sys/bus/usb/drivers/usb/usb4/idProduct (3认同)

nex*_*ayq 9

如果您想让此更改永久生效并将特定驱动程序分配给设备(VID、PID),您可能会发现这个答案很有用。

例如创建/etc/udev/rules.d/98-joystick.rules包含内容的新文件:

ACTION=="add", ATTRS{idVendor}=="1345", ATTRS{idProduct}=="6005", RUN+="/sbin/modprobe xpad" RUN+="/bin/sh -c 'echo 1345 6005 > /sys/bus/usb/drivers/xpad/new_id'"
Run Code Online (Sandbox Code Playgroud)

替换1345为您的 VID 和6005PID。

更换xpad合适的驱动程序。

运行以下命令:

$ sudo udevadm control --reload
Run Code Online (Sandbox Code Playgroud)

拔下并重新插入设备,然后检查是否加载了新驱动程序。

此处显示的示例用于修复驱动程序问题Speedlink Strike FX Gamepad (SL-6537-BK)