¿Cómo volver a conectar un dispositivo USB desconectado lógicamente?

55

Es posible que un dispositivo de almacenamiento USB se desconecte lógicamente: el dispositivo todavía está enchufado, pero es invisible para el sistema operativo (por ejemplo, no está en la lista /proc/bus/usb). Tal vez esto también le pueda pasar a otros tipos de USB u otros dispositivos extraíbles. Esto puede suceder por ejemplo:

¿Qué sucede en el controlador o en el hardware y, lo que es más importante, (cómo) se puede volver a conectar lógicamente el dispositivo (sin enchufarlo físicamente y volver a conectarlo)?

Tenga en cuenta que esta pregunta no se trata de montaje. En el estado "desconectado lógicamente", el núcleo cree que no hay nada en el bus USB (y, por supuesto, no hay ninguna entrada debajo /dev).

Gilles 'SO- deja de ser malvado'
fuente
Plug descarado: la respuesta funciona para el kernel 3.xy superior
Dmitry Grigoryev

Respuestas:

21

A veces es posible hacer un ciclo de encendido en la rama del bus USB donde está conectado el dispositivo:

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

El 1-1debe ajustarse a su configuración. Puede ver a qué parte del árbol USB está conectado su dispositivo ejecutando lsusb -tantes de expulsarlo.

Puede encontrar información detallada en la lista de correo linux-usb, este hilo por ejemplo.

jon_d
fuente
66
"suspender" no funciona en los núcleos después de 2.6.36.
alexisdm
Suponiendo que dmesginforma la identificación correcta del dispositivo ("usb 9-4: desconexión [...] USB"), esto no funciona en la última versión de Arch Linux. No hay camino /sys/bus/usb/devices/9-4después.
l0b0
1
1. dmesg: ¡ADVERTENCIA! potencia / nivel está en desuso; el uso de energía / control en vez 2. superuser.com/questions/371068/...
socketpair
Tampoco suspendes compatible con las versiones recientes del kernel ...
Gert van den Berg
6

Reinicie el dispositivo o el concentrador al que está conectado y el dispositivo debería reaparecer. Aquí hay un pequeño programa para hacer eso:

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

Funciona para la mayoría de las unidades USB que he probado, pero hay excepciones, como mi Kingston DT 101 II 4GB, que falla los comandos INQUIRY y READ CAPACITY después del reinicio, y permanece inutilizable hasta que se apaga y enciende.

Puede apagar y encender el dispositivo sin desconectarlo si recibe energía del puerto y su concentrador USB admite el control de energía por puerto. Aquí hay un pequeño programa para controlar el poder:

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

Desafortunadamente, casi ningún concentrador USB admite esta función, y es muy difícil encontrar uno que lo admita. Los fabricantes no lo anuncian. Muchos centros también mienten al respecto, por ejemplo, si hace "lsusb -v", puede ver "Cambio de alimentación por puerto" anunciado en "wHubCharacteristic", pero en realidad no funciona. El chipset puede admitirlo, pero fue más fácil / más barato para el fabricante conectar los pines de alimentación del puerto directamente a la fuente de alimentación en lugar de pasar por el chipset.

usuario6223
fuente
5

Encontré que esta respuesta funciona muy bien en mi sistema Gentoo. Recuerde también volver a habilitar su dispositivo si es una parte importante de su sistema (por ejemplo, mouse o teclado).

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

Para ver lo que está deshabilitando / volviendo a habilitar:

cat /sys/bus/usb/devices/5-2/product
Avio
fuente
Esto pareció hacer el truco en mi moderno sistema Fedora 25. Algunos de los otros métodos ya no son posibles.
xenithorb
5
udevadm info -a -n /dev/sdb

Ahora verifique si hay Kernel. Por ejemplo, si está conectado al puerto 2 de UIP frontal, entonces sería 1-1.2 y si está conectado al puerto 1 de UIP frontal, sería 1-1.1.

Para el puerto 2: para desconectar el USB:

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

Para conectar USB:

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

He intentado la mayoría de las sugerencias anteriores, pero no funcionaron para mí. Encontré cómo restablecer un dispositivo USB desde la línea de comandos: https://askubuntu.com/a/290519

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

desde donde $ipuede usar la ID de dispositivo adecuada /sys/bus/pci/drivers/ehci_hcd.

Kakanakov
fuente
Por favor, publique más que el enlace; incluya algunos detalles para que las personas no tengan que hacer clic para obtener una respuesta.
jasonwryan
-5

No estoy seguro de comprender bien su pregunta, pero en mi sistema si un dispositivo usb está enchufado pero no montado, puedo "verlo"

$> fdisk -l

Eso me dice con qué dispositivo está asociado (es decir, / dev / sdd1 o algo así), luego lo monto manualmente.

bev
fuente
55
Nuevamente: no, la pregunta no es sobre un sistema de archivos que se vuelve inaccesible (es decir, desmontado), se trata de un dispositivo que se vuelve inaccesible (el núcleo no ve un dispositivo, por lo que, por supuesto, no hay ninguna entrada debajo /dev).
Gilles 'SO- deja de ser malvado'