23

このトピックが何度も議論されていることは知っていますが、どの回答も役に立ちませんでした. 記録のために、私は Debian を実行しています。

取引は次のとおりです。USB電源のLEDランプを購入しました。これは非常にシンプルで、オン/オフスイッチさえありません(動作し、常にオンになっています)。コマンドラインからオン/オフできるようにしたい。これが私が試したことです:

    echo on > /sys/bus/usb/devices/usb1/power/level       # turn on
    echo suspend > /sys/bus/usb/devices/usb1/power/level  # turn off

これは私が多くのフォーラムで見つけたものです。「オン」にすると機能しますが、「一時停止」するとうまくいきます

    -su: echo: write error: Invalid argument

すべてのusbN。私も試しました

    echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"

エラーは発生しませんが、何もしません(繰り返しますが、すべてのusbNに対して)

しようとしている

    echo "usb1" > /sys/bus/usb/drivers/usb/unbind

キーボード、マウス、USB Wi-Fi カードなど、より「インテリジェントな」デバイスでのみ機能します。つまり、tyhose デバイスのみがオフになり、他の usbN ではエラーが発生しませんが、ランプがオフになることはありません。

/sys/bus/usb/devices/ の内容は

    1-0:1.0 1-1:1.0 1-2:1.0 1-2:1.2 2-0:1.0 4-0:1.0 4-1:1.0 6-0:1.0 8-0:1.0 8-2:1.0 usb2 usb4 usb6 usb8
    1-1 1-2 1-2:1.1 1-2:1.3 3-0:1.0 4-1 5-0:1.0 7-0:1.0 8-2 usb1 usb3 usb5 usb7

私はやろうとした

    echo device_name > /sys/bus/usb/drivers/usb/unbind

それらのすべてで、デバイス usbN と NM のみが反応し、 nm:xy の形式のものは生成されます

    tee: /sys/bus/usb/drivers/usb/bind: No such device

(たとえば、「1-0:1.0」、「1-0\:1.0」、「1-0\:1.0」を入れてみましたが、すべて同じ結果になりました)。

最後に、実行後に表示されるもの

    lsusb -t

ランプを差し込んだり抜いたりしても変化しません。

何か案は?

4

3 に答える 3

9

壊れた状態になった USB デバイスをリセットして修正したいだけの場合、bind/unbind usbfs 特殊ファイルを使用するのは少し面倒です (デバイス ID は変更される可能性があり、それらは他のデバイスを再バインドしたくない場合は、正確に識別するのが少し難しいです)。この場合、 で指定されたベンダー ID と製品 ID を使用する方がはるかに簡単であることがわかりましlsusbusb_modeswitch。たとえば、以下を使用してワイヤレス アダプタを識別したとします。

$ lsusb
Bus 001 Device 042: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 035: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

次に、次を使用してワイヤレスアダプターをリセットできます。

$ sudo usb_modeswitch -v 0x7392 -p 0x7811 --reset-usb

同じベンダー ID と製品 ID を持つ複数のデバイスが接続されている場合、usb_modeswitch はバスとデバイス番号のフラグを提供します。上記のワイヤレス アダプタの例-b 1 -g 42では、フラグに追加します。

于 2015-02-15T22:15:21.170 に答える
0

このコードを試してみてください(ルート化されている場合のみ)

 String[] cmdline = { "su", "-c", "echo '1-1' >/sys/bus/usb/drivers/usb/unbind" };
try {
    Runtime.getRuntime().exec(cmdline);
} catch (IOException e) {
    Log.e("MainActivity","Failed"+e);
}

そして再度バインドするにはこれを行います

    String[] cmdline = { "su", "-c", "echo '1-1' >/sys/bus/usb/drivers/usb/bind" };
try {
    Runtime.getRuntime().exec(cmdline);
} catch (IOException e) {
    Log.e("MainActivity","Failed"+e);
}
于 2018-05-15T10:00:07.263 に答える