web-dev-qa-db-ja.com

Ubuntu10.04でUSBをハードリセット

私は本当に気難しいUSBデバイス(モデム)を持っています。正常に動作する場合もありますが、接続を拒否する場合もあります。悪い状態になったら修正するために私が見つけた唯一の解決策は、デバイスを物理的に取り外してから再度接続することです。ただし、接続されているマシンに常に物理的にアクセスできるとは限らないため、 mコマンドラインからこれを行う方法を探しています。

この投稿 実行を提案します:

$ Sudo modprobe -w -r usb_storage; Sudo modprobe usb_storage

ただし、「不明なオプション-w」の出力が表示されます。このわずかに変更されたコマンド:

$ Sudo modprobe -r usb_storage

「致命的:モジュールusb_storageは使用中です」というメッセージで失敗します。実行する前に[usb-storage]とマークされたプロセスを-9キルしようとすると、それらは死ぬことを拒否します(カーネルと深く結びついているためだと思います)。

誰かがこれを行う方法を知っていますか?

注: serverfaultにこれをクロスポストしました どちらがより適切かわからなかったため。最初に回答した方を削除またはリンクします。

7
Cory

私はUbuntu14.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ポートを識別します。良いニュースは、デバイスを別のポートに接続しない限り変更されないため、文字列を1回だけ取得する必要があることです。

次に、私は正しい場所に行きます:

cd /sys/bus/usb/drivers/usb

rootとしてを呼び出します(例:Sudo bash 最初):

echo 2-1.2 > unbind ; sleep 3 ; echo 2-1.2 > bind

その結果、ランブルパッドは、プラグを抜いて再度差し込んだかのように再初期化されます。 USBフラッシュドライブもテストしました。それ(そのLED)は何も起こらなかったかのように動作しますが、それでも私のKDEは反応し、マウントするかどうかを尋ねます。

デバイスの電源が入っている間は常に。電力不足のためにモデムがリセットされた場合、この方法は機能しません。

5

usbresetを使用して、USBデバイスのリセットを試みることができます。ソースへのリンクは次のとおりです--- 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
1

これは「方法」の解決策ですが、機能する可能性があります。

  • 2台目の古いPCはそれほど強力ではありません。その上にDebianをインストールします。 usbip をインストールします。
  • 次に、サーバーにusbipをインストールします。
  • モデムを2台目のPCに接続します。 2台目のPCに接続されているモデムが、サーバーからVHCI経由で到達できるように、両方のマシンでusbipを構成します。
  • 2台目のPCでsshを構成するか、リモートでPCにアクセスしてコマンドを発行できるようにします。
  • デバイスに障害が発生した場合は、ログインしてrebootコマンドで2台目のPCを再起動し、復旧したら、usbipが提供する機能を使用して再接続します(実際にusbip)。これでデバイスがリセットされます。あなたはおそらくこれをスクリプト化することができます。
0
LawrenceC

コマンドラインから任意のUSBデバイスの電源を切る最も簡単な方法(つまり、USBへの実際の電源を入れ直す):

  1. 4ポートDELOCK87445 USBハブを購入する(Google for <DELOCK 87445>)
  2. このハードウェアはhub-ctrl.c(google for <hub-ctrl.c>)と互換性があります。したがって、任意のポートのオン/オフを切り替えることができます。詳細については、以下も参照してください。 http://code.google.com/p/wl500g/source/browse/branches/rt-n/utils/hub-ctrl.c?r=2235
0
sparkie

デバイスがUSBモデムであるのに、なぜusb_storageモジュールをアンロードしようとしているのですか?

Sudo lshwを実行し、USBモデムのエントリを見つけます。次のようなconfiguration:行があるはずです(ドライバーは明らかに異なります):

configuration: ... driver=iwlagn ...

モジュールがロードされていることを確認します(正しいドライバー名に置き換えます)。

lsmod | grep iwlagn

次に、次のようにします。

Sudo modprobe -r iwlagn && sleep 2 && Sudo modprobe iwlagn

デバイスの電源を切るのに時間がかかる場合に備えて、そこにsleepを入れるのが好きです。

0
sml