【发布时间】:2018-10-24 18:08:29
【问题描述】:
我有一个 USB 硬件,我知道它的驱动程序。 但是,vendor id 和 product id 与驱动程序中注册的 VID、PID 对不匹配。 linux中有没有办法强制驱动程序与已知设备相关联,而不涉及内核模块重新编译以添加PID / VID对?
【问题讨论】:
我有一个 USB 硬件,我知道它的驱动程序。 但是,vendor id 和 product id 与驱动程序中注册的 VID、PID 对不匹配。 linux中有没有办法强制驱动程序与已知设备相关联,而不涉及内核模块重新编译以添加PID / VID对?
【问题讨论】:
在 sysfs 树中找到模块。在这种情况下,它在
/sys/bus/usb-serial/drivers/cp2101
在这个目录下,有一个new_id文件入口,可以像这样动态添加VID PID对:
echo VID PID >new_id
这是一个关于此功能的LWN entry
【讨论】:
如果您想永久更改此更改并将特定驱动程序分配给设备(VID、PID),您可能会发现this 回答很有用。
例如新建文件/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'"
将1345 替换为您的VID,将6005 替换为您的PID。
将xpad 替换为适当的驱动程序。
运行以下命令:
$ sudo udevadm control --reload
拔下并重新插入设备,检查是否加载了新驱动程序。
此处显示的示例用于修复 Speedlink Strike FX Gamepad (SL-6537-BK) 的驱动程序问题
【讨论】:
您实际上不需要重新编译整个内核,只需使用更新的匹配表重新编译相关的内核模块就足够了,以防this 的答案在您的内核上不起作用。
【讨论】: