Linux 上で USB デバイスの抜き差しをシミュレート/強制/偽装することは可能ですか?

Linux 上で USB デバイスの抜き差しをシミュレート/強制/偽装することは可能ですか?

そこで、奇妙な問題に遭遇しました。私はビットコイン USB マイナー Bitfury を持っていて、CGMiner を使用してマイニングしています。

アプリケーションをルートとして起動すると、USB デバイスは自動的に検出されません。CGMiner は、スティックが再接続されたときにのみスティックを検出します (ホットプラグ イベントを検出し、意図したとおりに動作します)

ヘッドレス ミニ サーバーをセットアップしたいのですが、サーバーが再起動するたびに立ち上がってデバイスのプラグを抜き差しするのは面倒ですし、自宅にいないときに行うのはやや難しいので、やりたくありません。

では、USB システムをオフにして再起動することは可能ですか? または、もっと良い方法はありますか?

現在、HP t5730 端末で Fedora 20 を実行していますが、Raspberry PI 上の Raspbian でも問題が発生したため、OS 側の問題ではないと思います。デバイス自体の問題か、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

ご覧のとおり、どのデバイスが接続されているかを確認するために、引数なしでスクリプトを 1 回実行します。次に、sudo と製品 / ベンダー ID (再起動しても一貫しています) を使用してスクリプトを再度実行し、仮想的にデバイスのプラグを抜き差しします。

関連情報