如何在 Linux 中不拔掉 USB 设备的情况下重置它?

Gru*_*bel 7 linux webcam ubuntu

有时可能需要重置 USB 设备,有没有办法在软件中执行重置,而无需拔下设备本身然后重新插入?

更具体地说,我有一个网络摄像头,在玩太多设置时会感到困惑guvcapture,然后需要重置才能回到正轨。

小智 9

您可以尝试使用Benjamin Close 的resetusb程序来重置所有设备——没有可用的二进制文件,但编译它相当容易。将源代码另存为resetusb.c,然后运行:

gcc -lusb resetusb.c -o resetusb
Run Code Online (Sandbox Code Playgroud)

您现在可以将工具作为resetusb. 或者,@unhammer 指向Alan Stern 的单设备版本(以及有关如何使用它的一些提示)。

有些人也很幸运,只是删除和modprobe-ing 相关模块

modprobe -vr ehci_hcd
modprobe -v ehci_hcd
Run Code Online (Sandbox Code Playgroud)

(你当然可以写这个)

一些发行版也可能有自己的工具来重新启动 USB 子系统;曼德拉草显然有/etc/init.d/usb


Tom*_*ale 8

假设我想重置/dev/sdc

# udevadm info -q all /dev/sdc | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1.4/2-1.4:1.0/host2/target2:0:0/2:0:0:0/block/sdc
Run Code Online (Sandbox Code Playgroud)

我接受2-1.4上述(您的可能只是2-1- 我的设备已插入集线器)并执行以下操作:

# echo 2-1.4 > /sys/bus/usb/drivers/usb/unbind
# echo 2-1.4 > /sys/bus/usb/drivers/usb/bind
Run Code Online (Sandbox Code Playgroud)


epa*_*kai 5

usbutils包括usbreset

不带任何参数运行它以查看使用情况和设备列表。它需要超级用户访问权限才能实际重置设备。

Usage:
usbreset PPPP:VVVV - reset by product and vendor id
usbreset BBB/DDD   - reset by bus and device number
usbreset "Product" - reset by product name
Run Code Online (Sandbox Code Playgroud)

这允许重置各个设备,这比重置整个总线的某些答案有所改进。它可能无法解决中间集线器/总线问题,但仅重置所需设备的破坏性要小得多。