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?


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).


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.