我有一个 USB 设备(调制解调器),它非常不稳定。有时它工作正常,但有时它拒绝连接。我发现,当它处于故障状态时,唯一的解决办法就是物理拔下设备然后再插回去。但是,我并不总是能够物理访问插入它的机器,所以我正在寻找一种通过命令行来执行此操作的方法。
这个帖子建议运行:
$ sudo modprobe -w -r usb_storage; sudo modprobe usb_storage
但是我得到了“未知选项 -w”的输出。这个稍微修改过的命令:
$ sudo modprobe -r usb_storage
失败并显示消息 FATAL: Module usb_storage is in use. 如果我尝试在运行之前 kill -9 标记为 [usb-storage] 的进程,它们会拒绝终止(我认为是因为它们与内核紧密相关)。
有人知道怎样做吗?
笔记:我在 serverfault 上交叉发布了这篇文章因为我不知道哪个更合适。我将删除和/或链接最先得到回答的那个。
答案1
我有 Ubuntu 14.04.4。我不知道这在 10.04 中是否有效。我在 Cyborg Rumble Pad(和通用 USB 闪存驱动器)上对其进行了测试。
连接设备后:
dmesg | grep usb | tail -n 20
我得到(也许还有其他东西):
[ 2875.790610] usb 2-1.2: new full-speed USB device number 7 using ehci-pci
[ 2875.887485] usb 2-1.2: New USB device found, idVendor=0738, idProduct=cb02
[ 2875.887489] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2875.887490] usb 2-1.2: Product: Cyborg Rumble Pad - PC/Xbox 360
[ 2875.887492] usb 2-1.2: Manufacturer: Saitek
[ 2875.887493] usb 2-1.2: SerialNumber: 0CFE6B97
关键部分是2-1.2
字符串。它标识 USB 端口。好消息是,除非我将设备插入另一个端口,否则它不会改变,因此我只需获取一次字符串即可。
接下来我去正确的地方:
cd /sys/bus/usb/drivers/usb
并调用以 root 身份(例如sudo bash
第一个):
echo 2-1.2 > unbind ; sleep 3 ; echo 2-1.2 > bind
结果是我的 Rumble Pad 重新初始化,就像它被拔出并再次插入一样。我也测试了我的 USB 闪存驱动器。它(它的 LED)表现得好像什么都没发生一样,我的 KDE 仍然有反应并询问我是否要挂载。
设备始终处于通电状态。如果您的调制解调器因电量不足而自行重置,则此方法将不起作用。
答案2
您可以尝试使用 重置 USB 设备usbreset
。以下是源代码链接——http://marc.info/?l=linux-usb&m=121459435621262&w=2
您只需寻找要重置的设备(lsusb
):
# lsusb
Bus 005 Device 004: ID 0951:1642 Kingston Technology DT101 G2
进而:
# usbreset /dev/bus/usb/005/004
答案3
usb_storage
当您的设备是 USB 调制解调器时,为什么要尝试卸载该模块?
运行sudo lshw
并找到你的 USB 调制解调器的条目。应该有一行configuration:
这样的代码(显然你的驱动程序会有所不同):
configuration: ... driver=iwlagn ...
确认模块已加载(替换正确的驱动程序名称):
lsmod | grep iwlagn
然后就这样做:
sudo modprobe -r iwlagn && sleep 2 && sudo modprobe iwlagn
我喜欢把它放在sleep
那里,以防设备需要一段时间才能关机。
答案4
我使用的是 Fedora,解除和绑定 USB 控制器对我有用。请注意,不同制造商的控制器 ID 不同,因此首先您需要在以下目录中找到您的控制器 ID:
/sys/bus/pci/drivers/ehci_hcd
制造商ID的格式为0000:00:xx.y
。
解除绑定:
cd /sys/bus/pci/drivers/xhci_hcd
echo -n "0000:00:xx.y" > unbind
捆绑:
echo -n "0000:00:xx.y" > bind