Czy istnieje sposób na wyłączenie urządzenia USB za pomocą oprogramowania?


11

Czy istnieje sposób, aby całkowicie wyłączyć (określone) urządzenie USB za pomocą oprogramowania z komputera z systemem Linux?

Chcę tego użyć do wyłączenia zasilania (aby dioda LED była wyłączona) (pojedynczej) pamięci USB.

Czy znasz metodę, aby to osiągnąć? Np. Używając / sys / bus / usb lub podobnego?


Tak. Po prostu odmontuj urządzenie.
iglvzx

1
Nie, to nie pomaga. Istnieje również możliwość, że na patyku nie ma użytecznych przegród (które można by zamontować).
Daniel Jour

W przypadku dysku flash jedynym sposobem na usunięcie dysku jest echo 1 > /sys/block/sd<letter[s]>/device/delete... (może to być wysunięcie ...) MOŻE to spowodować, że urządzenie zostanie (miękkie) „wyłączone” ... (jeśli działa na dyskach, nie będzie działać na urządzeniach innych niż dyskowe ..)
Gert van den Berg

Odpowiedzi:


10

Jeśli na komputerze działa stare jądro, możesz echo suspend > /sys/bus/usb/devices/X-X/power/levelwymusić zawieszenie urządzenia.

Jednak od wersji 2.6.32 nie jest to już możliwe:

Zdarzenia zarządzania energią możemy podzielić na dwie szerokie klasy: zewnętrzną i wewnętrzną. Zdarzenia zewnętrzne to te, które są wyzwalane przez jakiegoś agenta spoza stosu USB: zawieszanie / wznawianie systemu (uruchamiane przez przestrzeń użytkownika), ręczne wznawianie dynamiczne (również uruchamiane przez przestrzeń użytkownika) i zdalne wybudzanie (uruchamiane przez urządzenie). Zdarzenia wewnętrzne to zdarzenia uruchamiane w stosie USB : automatyczne zawieszanie i automatyczne wznawianie. Zauważ, że wszystkie dynamiczne zdarzenia zawieszenia są wewnętrzne ; agenci zewnętrzni nie mogą wydawać dynamicznych zawieszeń.

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.

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

Myślę, że najlepszą rzeczą, jaką możesz zrobić, jest usunięcie powiązania urządzenia ze sterownikiem , aby nie było na nim żadnej aktywności, a następnie skonfigurowanie urządzenia do automatycznego zawieszania tak szybko, jak to możliwe ( echo auto > /sys/bus/usb/devices/X-X/power/control && echo 0 > /sys/bus/usb/devices/X-X/power/autosuspend_delay_ms).

Jednak, o ile rozumiem specyfikacje USB , nawet jeśli zawiesisz urządzenie, pozostanie trochę zasilania na porcie, więc wyłączenie diody LED może być niemożliwe, jeśli jest zasilane przez „głupi” schemat (tj. Bezpośrednio podłączony do + 5 V i GND szpilki).


Zaznaczam to jako zaakceptowaną odpowiedź, ponieważ mogłem odłączyć urządzenie od sterownika i skonfigurować automatyczne zawieszanie, co prowadzi do wyłączenia urządzenia. Niestety, docelowe pamięci USB (lub: ich diody LED) są bezpośrednio podłączone do + 5 V i GND, a zatem nie można ich wyłączyć.
Daniel Jour

3

Korzystanie z polecenia wysuwania powinno działać.

Uruchom eject /dev/<devicename>i powinien się wyłączyć.


Niestety nie działa to tutaj dla mojego testera :(
Daniel Jour

2
Nie jest to zaskakujące, jeśli pamięć USB nie jest dyskiem CD, dyskietką, taśmą lub SCSI. ejectdziała tylko z nimi.
Dmitrij Grigoryev,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.