如何为指定厂商ID和产品ID的USB设备修改默认驱动程序?
如何为指定厂商ID和产品ID的USB设备修改默认驱动程序?
嗨,这个问题我之前帮朋友处理过类似的,正好给你捋捋可行的办法!你说的旧版PlayStation Buzz!手柄被识别成故障USB Hub、手动装HID驱动重启就失效的情况,核心就是要让系统开机时自动给指定VID/PID的设备绑定正确的驱动,分两种常见系统给你说:
Linux 系统操作步骤
- 先确认设备的VID和PID
咱们得先精准定位目标设备,打开终端输入lsusb命令,找到那台被识别成Hub的Buzz手柄,输出里会类似这样:
Bus 001 Device 005: ID 054c:0268 Sony Corp. Buzz! Controller
这里的054c就是厂商ID(VID),0268是产品ID(PID),记下来。
- 创建udev规则实现持久化绑定
udev是Linux里管理设备的工具,咱们写个规则让系统每次检测到这个设备时,自动切换到HID驱动:
- 用文本编辑器创建规则文件,比如
sudo nano /etc/udev/rules.d/99-buzz-controller.rules - 把下面的内容粘贴进去,注意把
idVendor和idProduct换成你刚才查到的数值:
SUBSYSTEM=="usb", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0268", RUN+="/bin/sh -c 'echo -n %k > /sys/bus/usb/drivers/hub/unbind && echo -n %k > /sys/bus/usb/drivers/hid-generic/bind'"
这个规则的意思是:匹配到指定VID/PID的USB设备后,先把它从默认的hub驱动解绑,再绑定到hid-generic驱动上。
- 让规则立即生效
保存文件后,执行下面两条命令重载udev规则并触发设备重新识别,不用重启就能生效,而且重启后也会自动应用:
sudo udevadm control --reload-rules sudo udevadm trigger
Windows 系统操作步骤
如果是Windows环境,咱们可以通过自定义inf文件来关联驱动:
获取设备硬件ID
打开设备管理器,找到那个被标记为故障的USB Hub,右键→属性→详细信息→下拉选“硬件ID”,你会看到类似USB\VID_054C&PID_0268的内容,复制下来。创建自定义inf文件
新建一个文本文档,把后缀改成.inf,比如BuzzController.inf,然后粘贴下面的内容,注意替换硬件ID和厂商名称:
[Version] Signature="$Windows NT$" Class=HIDClass ClassGuid={745a17a0-74d3-11d0-b6fe-00a0c90f57da} Provider=%ManufacturerName% CatalogFile=BuzzController.cat DriverVer=06/21/2023,1.0.0.0 [Manufacturer] %ManufacturerName%=Standard,NTamd64 [Standard.NTamd64] %BuzzController.DeviceDesc%=BuzzController_Install, USB\VID_054C&PID_0268 [BuzzController_Install] Include=input.inf Needs=HID_Inst.NT [BuzzController_Install.Services] Include=input.inf Needs=HID_Inst.NT.Services [Strings] ManufacturerName="Sony" BuzzController.DeviceDesc="PlayStation Buzz! Controller"
- 安装自定义驱动
右键这个inf文件,选择“安装”,系统会自动完成驱动关联。之后重启电脑,你的旧版Buzz手柄就会默认被识别成HID设备了。
备注:内容来源于stack exchange,提问作者Marvin-wtt




