![如何从逻辑上弹出/断开连接并重新连接 USB 设备(加密狗)?](https://linux22.com/image/81697/%E5%A6%82%E4%BD%95%E4%BB%8E%E9%80%BB%E8%BE%91%E4%B8%8A%E5%BC%B9%E5%87%BA%2F%E6%96%AD%E5%BC%80%E8%BF%9E%E6%8E%A5%E5%B9%B6%E9%87%8D%E6%96%B0%E8%BF%9E%E6%8E%A5%20USB%20%E8%AE%BE%E5%A4%87%EF%BC%88%E5%8A%A0%E5%AF%86%E7%8B%97%EF%BC%89%EF%BC%9F.png)
我们购买了一个商业应用程序,该应用程序仅在其加密狗 USB 连接到服务器时才工作。然而,有时应用程序无法识别加密狗,因此它无法工作,但如果有人从 USB 端口物理弹出加密狗并再次连接它,它将识别并正常工作。
服务器上加载了 43 个模块,连接/弹出加密狗不会增加/减少模块数量。
我还有usbmon0,usbmon1和usbmon2文件在/dev 弹出/附加加密狗之前/之后以及其中的文件数量/dev在弹出/连接加密狗之前/之后不会改变。
日志ctl -f弹出加密狗后命令:
Jan 19 18:10:28 iwr kernel: usb 2-2.1: USB disconnect, device number 5
日志ctl -f连接加密狗后的命令:
Jan 19 18:11:11 iwr kernel: usb 2-2.1: new full-speed USB device number 6 using uhci_hcd
Jan 19 18:11:11 iwr kernel: usb 2-2.1: New USB device found, idVendor=0403, idProduct=c580
Jan 19 18:11:11 iwr kernel: usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jan 19 18:11:11 iwr kernel: usb 2-2.1: Product: HID UNIKEY
Jan 19 18:11:11 iwr kernel: usb 2-2.1: Manufacturer: OEM
Jan 19 18:11:11 iwr kernel: usbhid 2-2.1:1.0: couldn't find an input interrupt endpoint
我可以弹出然后逻辑连接吗? (发出命令、删除模块等)
答案1
在互联网上找到的许多答案(包括 TNW 评论中的答案)都依赖于/sys/bus/usb/devices/2-2/power/level
或/sys/bus/usb/devices/2-2/power/control
自 2.6.something 内核以来已弃用的答案。对于较新的内核,建议的程序是解除绑定并重新绑定其驱动程序,这通常会导致电源循环:
# Find out which driver to unbind
tree /sys/bus/usb/devices/2-2.1 | grep driver
|-- driver -> ../../../../../../bus/usb/drivers/whatever
# Unbind the driver
echo 2-2.1 > /sys/bus/usb/drivers/whatever/unbind
# Rebind the driver
echo 2-2.1 > /sys/bus/usb/drivers/whatever/bind