Gibt es eine Möglichkeit, ein USB-Gerät mithilfe von Software auszuschalten?

11

Gibt es eine Möglichkeit, ein (bestimmtes) USB-Gerät mithilfe von Software von einem Linux-Computer vollständig auszuschalten?

Ich möchte dies verwenden, um einen (einzelnen) USB-Stick auszuschalten (damit die LED aus ist).

Kennen Sie eine Methode, um dies zu erreichen? ZB mit / sys / bus / usb oder ähnlichem?

Daniel Jour
quelle
Ja. Hängen Sie das Gerät einfach aus .
iglvzx
1
Nein, das hilft nicht. Es besteht auch die Möglichkeit, dass sich keine verwendbaren Partitionen (die montiert werden könnten) auf dem Stick befinden.
Daniel Jour
Bei einem Flash-Laufwerk ist die einzige Möglichkeit, die Festplatte zu entfernen, echo 1 > /sys/block/sd<letter[s]>/device/delete... (Auswerfen könnte dies tun ...) Dies könnte dazu führen, dass das Gerät (weich) "ausgeschaltet" wird ... (Wenn es für Festplatten funktioniert, es wird nicht für Geräte ohne Festplatte funktionieren ..)
Gert van den Berg

Antworten:

10

Wenn auf Ihrem Computer ein alter Kernel ausgeführt wird, können Probleme auftreten echo suspend > /sys/bus/usb/devices/X-X/power/level, um das Anhalten des Geräts zu erzwingen.

Seit 2.6.32 ist dies jedoch nicht mehr möglich:

Wir können Energieverwaltungsereignisse in zwei große Klassen einteilen: externe und interne. Externe Ereignisse sind solche, die von einem Agenten außerhalb des USB-Stacks ausgelöst werden: System-Suspend / Resume (ausgelöst durch Userspace), manuelle dynamische Wiederaufnahme (ebenfalls ausgelöst durch Userspace) und Remote Wakeup (ausgelöst durch das Gerät). Interne Ereignisse werden im USB-Stack ausgelöst : Autosuspend und Autoresume. Beachten Sie, dass alle dynamischen Suspend-Ereignisse intern sind . Externe Agenten dürfen keine dynamischen Suspends ausgeben.

power/control

    This file contains one of two words: "on" or "auto".
    You can write those words to the file to change the
    device's setting.

    "on" means that the device should be resumed and
    autosuspend is not allowed.  (Of course, system
    suspends are still allowed.)

    "auto" is the normal state in which the kernel is
    allowed to autosuspend and autoresume the device.

    (In kernels up to 2.6.32, you could also specify
    "suspend", meaning that the device should remain
    suspended and autoresume was not allowed.  This
    setting is no longer supported.

(von http://www.kernel.org/doc/Documentation/usb/power-management.txt )

Ich denke, das Beste, was Sie tun können, ist, das Gerät vom Treiber zu trennen , damit keine Aktivität darauf auftritt, und das Gerät dann so zu konfigurieren, dass es so schnell wie möglich automatisch suspendiert wird ( echo auto > /sys/bus/usb/devices/X-X/power/control && echo 0 > /sys/bus/usb/devices/X-X/power/autosuspend_delay_ms).

Soweit ich die USB-Spezifikationen verstehe , bleibt jedoch auch beim Anhalten des Geräts ein gewisser Einschaltanschluss erhalten, sodass die LED möglicherweise nicht deaktiviert werden kann, wenn sie über ein "dummes" Schema betrieben wird (dh direkt an +5 V und GND angeschlossen ist) Stifte).

ein Land
quelle
Ich markiere dies als akzeptierte Antwort, da ich das Gerät vom Treiber trennen und die automatische Suspendierung konfigurieren konnte, was dazu führt, dass das Gerät heruntergefahren wird. Leider sind die Ziel-USB-Sticks (oder: ihre LEDs) direkt an +5 V und GND angeschlossen und können daher nicht ausgeschaltet werden.
Daniel Jour
3

Die Verwendung des Befehls eject sollte funktionieren.

Laufen Sie eject /dev/<devicename>und es sollte sich ausschalten.

Soandos
quelle
Leider funktioniert dies für meinen Teststick hier nicht :(
Daniel Jour
2
Kein Wunder, wenn Ihr USB-Stick kein CD-, Disketten-, Band- oder SCSI-Laufwerk ist. ejectfunktioniert nur mit diesen.
Dmitry Grigoryev