Ramenez ceci d'entre les morts pour l'achèvement.
Les détails sont flous, mais il s'avère que l'appareil lui-même plantait au démarrage. Je pense que cela a à voir avec le bavardage généré par uBoot sur la ligne USB. Essentiellement, uBoot a interrogé toutes les lignes matérielles (y compris USB) pour trouver une image amorçable. Cette interrogation devrait être inoffensive, mais le micrologiciel de notre périphérique USB n'a pas pu le gérer et s'est écrasé immédiatement, le rendant inutilisable jusqu'à une réinitialisation matérielle (débranchement physique du périphérique et rebranchement).
Nous avons signalé ce bogue au fabricant de l'appareil, mais nous n'avons reçu aucune indication que le correctif du problème (qui ne nous concernait apparemment que nous) serait une priorité, nous avons donc eu recours à un correctif de 0,50 $.
La façon dont nous avons résolu ce problème était assez créative, mais a parfaitement fonctionné. Nous avons construit un simple relais contrôlé par GPIO et épissé la ligne d'alimentation USB via ce relais. Essentiellement, le système a démarré avec le relais "off", et donc pas d'alimentation vers le périphérique USB. Le système a démarré normalement et dans notre script de démarrage, nous avons simplement basculé la ligne GPIO pour activer le relais. Le périphérique USB était libre de démarrer normalement, sans aucune interférence de uBoot.
Il semble que l'appareil ait essayé de discuter avec le système d'exploitation au premier démarrage et que la pile n'étant pas prête à ce moment-là, elle s'est "déconnectée" du concentrateur. Envisagez d'ajouter une section à la fin du processus de démarrage pour supprimer le pilote et forcer un rechargement. (modprobe -vr ehci_hcd; modprobe -v ehci_hcd
si USB2.0, uhci_hcd
si USB1.x)
Une autre possibilité est que lorsque le Gumstix s'est éteint, il a dit à l'appareil de passer en mode d'économie d'énergie, ce qui peut être mal pris en charge par l'appareil. Windows peut y faire des choses différentes de Windows, ce qui peut être tout ce que le fournisseur a testé. Pour tester cela, vous devrez peut-être indiquer au pilote de périphérique de ne pas suspendre ou éteindre les périphériques lors des redémarrages du système. Consultez la documentation du noyau Linux sur l'économie d'énergie dans la section USB pour commencer.