Bringe dies zur Vervollständigung von den Toten zurück.
Die Details sind verschwommen, aber wie sich herausstellte, stürzte das Gerät selbst beim Booten ab. Ich glaube, es hatte mit uBoot erzeugtem Geschwätz auf der USB-Leitung zu tun. Im Wesentlichen hat uBoot alle Hardwareleitungen (einschließlich USB) abgefragt, um ein bootfähiges Image zu finden. Diese Abfrage sollte harmlos sein, aber die Firmware auf unserem USB-Gerät konnte damit nicht umgehen und stürzte sofort ab, wodurch es bis zu einem Hard-Reset (physisches Trennen des Geräts und erneutes Einstecken) funktionsunfähig wurde.
Wir haben diesen Fehler dem Gerätehersteller gemeldet, aber wir haben keinen Hinweis darauf erhalten, dass die Behebung des Problems (das anscheinend nur uns betraf) Priorität hätte, also haben wir auf eine Behebung von 0,50 $ zurückgegriffen.
Die Art und Weise, wie wir das gelöst haben, war ziemlich kreativ, hat aber einwandfrei funktioniert. Wir haben ein einfaches GPIO-gesteuertes Relais gebaut und die USB-Stromleitung durch dieses Relais gespleißt. Im Wesentlichen wurde das System mit ausgeschaltetem Relais gestartet, und daher wurde das USB-Gerät nicht mit Strom versorgt. Das System startete normal, und in unserem Startskript haben wir einfach die GPIO-Leitung umgeschaltet, um das Relais zu aktivieren. Das USB-Gerät konnte normal hochgefahren werden, ohne Störungen durch uBoot.
Es hört sich so an, als hätte das Gerät beim ersten Start versucht, mit dem Betriebssystem zu chatten, und da der Stack zu diesem Zeitpunkt noch nicht bereit war, hat es sich vom Hub "abgemeldet". Erwägen Sie, am Ende des Startvorgangs einen Abschnitt hinzuzufügen, um den Treiber zu löschen und ein Neuladen zu erzwingen. (modprobe -vr ehci_hcd; modprobe -v ehci_hcd
wenn USB2.0, uhci_hcd
wenn USB1.x)
Eine andere Möglichkeit besteht darin, dass Gumstix beim Herunterfahren das Gerät angewiesen hat, in den Energiesparmodus zu wechseln, der vom Gerät möglicherweise nicht ordnungsgemäß unterstützt wird. Windows kann dort Dinge anders machen als Windows, was möglicherweise alles ist, was der Anbieter getestet hat. Um dies zu testen, müssen Sie möglicherweise den Gerätetreiber anweisen, Geräte während des Systemneustarts nicht anzuhalten oder auszuschalten. Sehen Sie sich die Linux-Kernel-Dokumentation zum Energiesparen im USB-Abschnitt an, um loszulegen.