Existe uma maneira de desligar um dispositivo USB usando software?

11

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

Quero usar isso para desligar (de modo que o LED apague) um pendrive USB (único).

Você conhece algum método para conseguir isso? Por exemplo, usando / sys / bus / usb ou similares?

Daniel Jour
fonte
Sim. Simplesmente desmonte o dispositivo.
iglvzx
1
Não, isso não ajuda. Também existe a possibilidade de não haver partições utilizáveis ​​(que podem ser montadas) no stick.
Daniel Jour
Para uma unidade flash, a única maneira de remover o disco é echo 1 > /sys/block/sd<letter[s]>/device/delete... (a ejeção pode estar fazendo isso ...) PODE resultar no dispositivo (macio) "desligado" ... (se funcionar para discos, não vai funcionar para dispositivos não-disco ..)
Gert van den Berg

Respostas:

10

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

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

Podemos categorizar eventos de gerenciamento de energia em duas grandes classes: externa e interna. 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), retoma dinâmica manual (também acionada pelo espaço do usuário) e ativação remota (acionada pelo dispositivo). Eventos internos são aqueles acionados na pilha USB : suspensão automática e retoma automática. 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.

(em 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 e, em seguida, configure 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 as especificações USB , mesmo se você suspender o dispositivo, alguma porta de energia permanecerá, portanto, pode ser impossível desativar o led se ele for alimentado por um esquema 'burro' (isto é, diretamente conectado a + 5V e GND pinos).

uma terra
fonte
Estou marcando esta como a resposta aceita porque consegui desvincular o dispositivo do driver e configurar a suspensão automática, o que leva ao desligamento do dispositivo. Infelizmente, os dispositivos USB direcionados (ou: seus LEDs) estão diretamente conectados a + 5V e GND e, portanto, não podem ser desligados.
precisa saber é o seguinte
3

O uso do comando ejetar deve funcionar.

Execute eject /dev/<devicename>e ele deve desligar.

soandos
fonte
Infelizmente, isso não funciona para o meu teste aqui :(
Daniel Jour
2
O que não surpreende se o seu pendrive não for uma unidade de CD, disquete, fita ou SCSI. ejectsó funciona com estes.
Dmitry Grigoryev