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.