Come riconnettere un dispositivo USB logicamente disconnesso?


55

È possibile che un dispositivo di archiviazione USB venga disconnesso logicamente: il dispositivo è ancora collegato, ma è invisibile dal sistema operativo (ad es. Non è elencato sotto /proc/bus/usb). Forse questo può accadere anche ad altri tipi di USB o altri dispositivi rimovibili. Questo può succedere ad esempio:

Cosa sta succedendo nel driver o nell'hardware e, soprattutto, (come) il dispositivo può essere ricollegato logicamente (senza scollegarlo fisicamente e rientrare)?

Si noti che questa domanda non riguarda il montaggio. Nello stato "logicamente disconnesso", il kernel crede che non ci sia nulla sul bus USB (e quindi ovviamente non c'è voce sotto /dev).


Risposte:


21

A volte è possibile eseguire un ciclo di accensione sul ramo del bus USB in cui è collegato il dispositivo:

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

La 1-1deve essere regolato alla configurazione. Puoi vedere a quale parte dell'albero USB il tuo dispositivo è collegato eseguendo lsusb -tprima di espellerlo.

Puoi trovare informazioni dettagliate sulla mailing list linux-usb, questo thread per esempio.


6
"suspend" non funziona sui kernel dopo la 2.6.36.
alexisdm,

Supponendo di dmesgriportare l'ID dispositivo corretto ("usb 9-4: USB disconnect [...]"), questo non funziona con Arch Linux più recente. Non c'è nessun percorso /sys/bus/usb/devices/9-4dopo.
l0b0

1
1. dmesg: ATTENZIONE! potenza / livello è deprecato; usa invece power / control 2. superuser.com/questions/371068/…
socketpair il

Inoltre suspendnon è più supportato nelle recenti versioni del kernel ....
Gert van den Berg,

6

Ripristina il dispositivo o l'hub a cui è collegato e il dispositivo dovrebbe riapparire. Ecco un piccolo programma per farlo:

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

Funziona con la maggior parte delle unità USB che ho provato, ma ci sono eccezioni, come il mio Kingston DT 101 II da 4 GB, che fallisce i comandi INQUIRY e READ CAPACITY dopo il ripristino e rimane inutilizzabile fino al ciclo di accensione.

È possibile spegnere e riaccendere il dispositivo senza scollegarlo se viene alimentato dalla porta e l'hub USB supporta il controllo dell'alimentazione per porta. Ecco un piccolo programma per controllare la potenza:

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

Sfortunatamente, quasi nessun hub USB supporta questa funzione ed è molto difficile trovarne uno che la supporti. I produttori non lo pubblicizzano. Anche molti hub mentono al riguardo, ad esempio se fai "lsusb -v" puoi vedere "Commutazione dell'alimentazione per porta" pubblicizzata in "wHubCharacteristic", ma in realtà non funziona. Il chipset potrebbe supportarlo, ma per il produttore è stato più semplice / economico collegare i pin di alimentazione della porta direttamente all'alimentatore invece di passare attraverso il chipset.


5

Ho trovato questa risposta che funziona perfettamente sul mio sistema Gentoo. Ricorda inoltre di riattivare il dispositivo se è un componente importante del tuo sistema (ad es. Mouse o tastiera).

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

Per vedere cosa stai disabilitando / riattivando:

cat /sys/bus/usb/devices/5-2/product

Questo sembrava fare il trucco sul mio moderno sistema Fedora 25. Alcuni degli altri metodi non sono più possibili.
Xenithorb,

5
udevadm info -a -n /dev/sdb

Ora controlla il kernel. Ad esempio, se è collegato alla porta 2 di Front UIP, allora sarebbe 1-1.2 e se è collegato alla porta 1 di Front UIP, allora sarebbe 1-1.1.

Per la porta 2: per disconnettere USB:

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

Per connettere USB:

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

3

Ho provato la maggior parte dei suggerimenti di cui sopra, ma non hanno funzionato per me. Ho trovato come ripristinare un dispositivo USB dalla riga di comando: https://askubuntu.com/a/290519

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

da cui $iè possibile utilizzare l'ID dispositivo appropriato da /sys/bus/pci/drivers/ehci_hcd.


Si prega di pubblicare più del link; includi alcuni dettagli in modo che le persone non debbano fare clic per ottenere una risposta.
Jasonwryan,


-5

Non sono sicuro di comprendere correttamente la tua domanda, ma sul mio sistema se un dispositivo USB è collegato ma non è montato, posso "vederlo" da

$> fdisk -l

Questo mi dice a quale dispositivo è associato (cioè / dev / sdd1 o qualcosa del genere), quindi lo monto manualmente.


5
Ancora: no, la domanda non riguarda il fatto che un filesystem diventi inaccessibile (cioè non montato), si tratta di un dispositivo che diventa inaccessibile (il kernel non vede un dispositivo, quindi ovviamente non c'è voce sotto /dev).
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.