Como reconectar um dispositivo USB logicamente desconectado?

55

É possível que um dispositivo de armazenamento USB seja desconectado logicamente: o dispositivo ainda está conectado, mas é invisível do sistema operacional (por exemplo, não está listado em /proc/bus/usb). Talvez isso possa acontecer com outros tipos de USB ou outros dispositivos removíveis. Isso pode acontecer, por exemplo:

O que está acontecendo no driver ou no hardware e, o mais importante, (como) o dispositivo pode ser reconectado logicamente (sem conectá-lo e conectá-lo fisicamente)?

Observe que esta pergunta não é sobre montagem. No estado “logicamente desconectado”, o kernel acredita que não há nada no barramento USB (e, portanto, é claro que não há entrada /dev).

Gilles 'SO- parar de ser mau'
fonte
Shameless plug: trabalho resposta para o kernel 3.xe-se
Dmitry Grigoryev

Respostas:

21

Às vezes, é possível fazer um ciclo de energia na ramificação do barramento USB em que o dispositivo está conectado:

# echo suspend > /sys/bus/usb/devices/1-1/power/level
# echo auto > /sys/bus/usb/devices/1-1/power/level

O 1-1deve ser ajustado à sua configuração. Você pode ver em qual parte da árvore USB seu dispositivo está conectado executando lsusb -tantes de ejetar.

Você pode encontrar informações detalhadas na lista de discussão linux-usb, neste tópico por exemplo.

jon_d
fonte
6
"suspend" não funciona nos kernels depois da 2.6.36.
alexisdm
Assumindo dmesgque o ID do dispositivo esteja correto ("usb 9-4: USB desconecte [...]"), isso não funciona no Arch Linux mais recente. Não há caminho /sys/bus/usb/devices/9-4depois.
L0b0 21/03
11
1. dmesg: AVISO! poder / nível está obsoleto; use power / control em vez disso 2. superuser.com/questions/371068/…
socketpair
Também suspendnão é mais suportada em versões recentes do kernel ....
Gert van den Berg
6

Redefina o dispositivo ou o hub ao qual está conectado e o dispositivo deve reaparecer. Aqui está um pequeno programa para fazer isso:

http://marc.info/?l=linux-usb-users&m=116827193506484

Funciona na maioria das unidades USB que eu tentei, mas há exceções, como meu Kingston DT 101 II 4GB, que falha nos comandos INQUIRY e READ CAPACITY após a redefinição e permanece inutilizável até o ciclo de energia.

Você pode ligar e desligar o dispositivo sem desconectá-lo se ele receber energia da porta, e o hub USB suporta o controle de energia por porta. Aqui está um pequeno programa para controlar o poder:

http://marc.info/?l=linux-usb-devel&m=113724451205634

Infelizmente, quase nenhum hub USB suporta esse recurso, e é muito difícil encontrar um que o suporte. Os fabricantes não anunciam. Muitos hubs também mentem, por exemplo, se você fizer "lsusb -v", poderá ver "Comutação de energia por porta" anunciada em "wHubCharacteristic", mas, na realidade, não funciona. O chipset pode suportá-lo, mas era mais fácil / barato para o fabricante conectar os pinos de energia da porta diretamente à fonte de alimentação, em vez de passar pelo chipset.

user6223
fonte
5

Eu encontrei esta resposta para funcionar muito bem no meu sistema Gentoo. Lembre-se também de reativar seu dispositivo se ele for uma parte importante do seu sistema (por exemplo, mouse ou teclado).

sudo sh -c 'AUTHFILE="/sys/bus/usb/devices/5-2/authorized" ; echo 0 > "$AUTHFILE" ; sleep 1 ; echo 1 > "$AUTHFILE"'

Para ver o que você está desativando / reativando:

cat /sys/bus/usb/devices/5-2/product
Avio
fonte
Isso pareceu funcionar no meu sistema Fedora 25 moderno. Alguns dos outros métodos não são mais possíveis.
Xenithorb
5
udevadm info -a -n /dev/sdb

Agora verifique o Kernel. Por exemplo, se estiver conectado à Porta 2 do Front UIP, seria 1-1.2 e se estiver conectado à Porta 1 do Front UIP, seria 1-1.1.

Para a porta 2: para desconectar o USB:

echo '1-1.2' | tee /sys/bus/usb/drivers/usb/unbind

Para conectar o USB:

echo '1-1.2' | tee /sys/bus/usb/drivers/usb/bind
Udaya
fonte
3

Eu tentei a maioria das sugestões acima, mas elas não funcionaram para mim. Eu descobri como redefinir um dispositivo USB na linha de comando: https://askubuntu.com/a/290519

echo $i >/sys/bus/pci/drivers/ehci_hcd/bind

de onde $ivocê pode usar o ID do dispositivo apropriado /sys/bus/pci/drivers/ehci_hcd.

Kakanakov
fonte
Por favor, poste mais do que o link; inclua alguns detalhes para que as pessoas não precisem clicar para obter uma resposta.
precisa saber é o seguinte
-5

Não sei se entendi bem a sua pergunta, mas no meu sistema, se um dispositivo USB estiver conectado, mas não montado, eu posso 'vê-lo'

$> fdisk -l

Isso me diz a qual dispositivo está associado (ou seja, / dev / sdd1 ou algo assim), então eu o monto manualmente.

bev
fonte
5
Novamente: não, a questão não é sobre um sistema de arquivos se tornar inacessível (ou seja, desmontado), é sobre um dispositivo se tornar inacessível (o kernel não vê um dispositivo, então é claro que não há entrada /dev).
Gilles 'SO- stop be evil'