web-dev-qa-db-pt.com

Existe uma maneira de desligar um dispositivo USB usando software?

Existe uma maneira de desligar um dispositivo USB (específico) completamente usando o software de uma máquina Linux?

Quero usar isso para desligar (de forma que o LED fique apagado) um (único) stick USB.

Você conhece algum método para conseguir isso? Por exemplo. usando/sys/bus/usb ou algo parecido?

11
Daniel Jour

Se sua máquina executa um kernel antigo, você pode emitir echo suspend > /sys/bus/usb/devices/X-X/power/level para forçar a suspensão do dispositivo.

No entanto, desde 2.6.32, isso não é mais possível:

Podemos categorizar os eventos de gerenciamento de energia em duas classes amplas: externas e internas. Os eventos externos são aqueles acionados por algum agente fora da pilha USB: suspensão/retomada do sistema (acionada pelo espaço do usuário), retomada dinâmica manual (também acionada pelo espaço do usuário) e ativação remota (acionada pelo dispositivo). Eventos internos são aqueles disparados dentro da pilha USB : autosuspend e autoresume. Observe que todos os eventos de suspensão dinâmica são internos ; agentes externos não têm permissão para emitir suspensões dinâmicas.

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.

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

Acho que a melhor coisa que você pode fazer é desvincular o dispositivo do driver , para que não haja atividade nele e, em seguida, configurar o dispositivo para suspender automaticamente o mais rápido possível (echo auto > /sys/bus/usb/devices/X-X/power/control && echo 0 > /sys/bus/usb/devices/X-X/power/autosuspend_delay_ms).

No entanto, tanto quanto eu entendo especificações USB , mesmo se você suspender o dispositivo, um pouco de energia na porta permanecerá, então pode ser impossível desativar o led se ele for alimentado por um esquema 'burro' (ou seja conectado diretamente aos pinos de + 5V e GND).

10
aland

Usar o comando ejetar deve funcionar.

Corre eject /dev/<devicename> e deve desligar.

3
soandos