GNU/Linux >> Tutoriels Linux >  >> Linux

Notre système Linux intégré ne reconnaîtra pas un périphérique USB s'il est branché avant la mise sous tension. Suggestions?

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.


Linux
  1. 4 façons utiles de connaître le nom du périphérique USB branché sous Linux

  2. Comment identifier le chipset d'un périphérique USB sous Linux ?

  3. Comment obtenir des informations sur le fournisseur et le produit USB par programmation sous Linux ?

  4. Contrôler une alimentation USB (on/off) avec Linux

  5. Pourquoi avons-nous besoin d'un bootloader dans un appareil embarqué ?

Comment trouver l'utilisation de la bande passante d'un périphérique USB sous Linux

Création d'un système de bureau Linux multi-boot

Comment ajouter un nouveau périphérique au système de fichiers BTRFS sous Linux

Comment savoir si votre système possède un port USB 3.0 sous Linux [Astuce rapide]

Haut débit USB :comment connecter des périphériques modem USB sous Linux

Linux :il ne reste plus d'espace sur l'appareil alors que la commande df affiche beaucoup d'espace libre