GNU/Linux >> Linux Esercitazione >  >> Linux

Il nostro sistema Linux integrato non riconoscerà un dispositivo USB se è collegato prima dell'accensione. Suggerimenti?

Riportandolo dalla morte per il completamento.

I dettagli sono sfocati, ma a quanto pare il dispositivo stesso si bloccava all'avvio. Credo che avesse a che fare con le chiacchiere generate da uBoot sulla linea USB. In sostanza, uBoot ha interrogato tutte le linee hardware (incluso USB) per trovare un'immagine avviabile. Questo polling dovrebbe essere innocuo, ma il firmware sul nostro dispositivo USB non è stato in grado di gestirlo e si è bloccato immediatamente, rendendolo inutilizzabile fino a un hard reset (scollegando fisicamente il dispositivo e ricollegandolo).

Abbiamo segnalato questo bug al produttore del dispositivo, ma non abbiamo ricevuto alcuna indicazione che la correzione del problema (che apparentemente riguardava solo noi) sarebbe stata una priorità, quindi abbiamo fatto ricorso a una correzione di $ 0,50.

Il modo in cui l'abbiamo risolto è stato piuttosto creativo, ma ha funzionato perfettamente. Abbiamo costruito un semplice relè controllato da GPIO e collegato la linea di alimentazione USB attraverso questo relè. In sostanza, il sistema si è avviato con il relè "spento" e quindi senza alimentazione al dispositivo USB. Il sistema si è avviato normalmente e nel nostro script di avvio abbiamo semplicemente attivato la riga GPIO per attivare il relè. Il dispositivo USB era libero di avviarsi normalmente, senza interferenze da parte di uBoot.


Sembra che il dispositivo abbia provato a chattare con il sistema operativo al primo avvio e poiché lo stack non era pronto in quel momento, si è "disconnesso" dall'hub. Prendi in considerazione l'aggiunta di una sezione alla fine del processo di avvio per eliminare il driver e forzare un ricaricamento. (modprobe -vr ehci_hcd; modprobe -v ehci_hcd se USB 2.0, uhci_hcd se USB1.x)

Un'altra possibilità è che quando il Gumstix si è spento, ha detto al dispositivo di entrare in modalità di risparmio energetico che potrebbe essere supportata in modo improprio dal dispositivo. Windows potrebbe fare cose diverse lì rispetto a Windows, che potrebbe essere tutto ciò su cui il fornitore ha testato. Per verificarlo, potrebbe essere necessario dire al driver del dispositivo di non sospendere o spegnere i dispositivi durante il riavvio del sistema. Consulta la documentazione del kernel Linux sul risparmio energetico nella sezione USB per iniziare.


Linux
  1. 4 Modo utile per conoscere il nome del dispositivo USB collegato in Linux

  2. Linux – Udev non rinomina il dispositivo USB Ethernet?

  3. Come puoi identificare il chipset di un dispositivo USB in Linux?

  4. Perché abbiamo bisogno di un bootloader in un dispositivo integrato?

  5. Come posso essere sicuro di aver collegato un dispositivo a una porta USB 3?

Come trovare l'utilizzo della larghezza di banda del dispositivo USB su Linux

Creazione di un sistema desktop Linux multi-boot

Come aggiungere un nuovo dispositivo al file system BTRFS in Linux

Come sapere se il tuo sistema ha una porta USB 3.0 in Linux [Suggerimento rapido]

Banda larga USB:come collegare dispositivi modem USB su Linux

Linux:nessuno spazio rimasto sul dispositivo mentre il comando df mostra molto spazio libero