是否可以在 Linux 上模拟/强制/伪造 USB 设备拔出并重新插入?

是否可以在 Linux 上模拟/强制/伪造 USB 设备拔出并重新插入?

所以我遇到了一个奇怪的问题。我有一个比特币 USB 矿机 Bitfury,我正在使用 CGMiner 进行挖矿。

当我以 root 身份启动应用程序时,不会自动检测到 USB 设备。 CGMiner 仅在重新插入时检测棒(它检测热插拔事件,然后按预期工作)

我想设置一个无头迷你服务器,因此,我不想在每次服务器重新启动时站起来拔掉设备,然后重新插入设备,因为我太懒了,而且这有点困难当我不在家时。

那么,是否可以关闭 USB 系统并重新启动它呢?或者有更好的方法吗?

目前,我在 HP t5730 终端上运行 Fedora 20,但我在 Raspberry PI 上的 Raspbian 上遇到了问题,所以我认为这不是操作系统方面的问题。也许是设备本身的问题,或者是 CGMiner 的错,但我还无法找到有关该主题的任何内容。

答案1

卸载 USB HCI 内核模块(任何 *hci_hcd 和 *usb*)并重新加载它们。这是真正切断 USB 端口电源的唯一可靠方法。

还有其他不太严格的方法可以实现相同的目的,但不能保证它们能够工作,具体取决于您的设备发生故障的方式。

答案2

这个答案详细说明该实用程序的用法usbreset。如果这有帮助,请投票。

这就是我“拔掉然后重新插入”我的 USB 无线适配器的方法,该适配器经常挂起。在找到这个脚本之前,我必须将其物理拔下然后重新插入才能重置。

$ 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

Devices:
  Number 001/003  ID 046d:080a  
  Number 003/002  ID 045e:07a5  Microsoft® 2.4GHz Transceiver v9.0
  Number 001/002  ID 0cf3:9271  USB2.0 WLAN

$ sudo usbreset 0cf3:9271
Resetting USB2.0 WLAN ... ok

如您所见,我在不带任何参数的情况下运行一次脚本来查看连接了哪些设备。然后,我使用 sudo 和产品/供应商 ID(在重新启动后保持一致)再次运行它,以虚拟地拔出并重新插入设备。

相关内容