GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unser eingebettetes Linux-System erkennt ein USB-Gerät nicht, wenn es vor dem Einschalten angeschlossen ist. Anregungen?

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.


Linux
  1. 4 Nützliche Möglichkeiten, den Namen des angeschlossenen USB-Geräts unter Linux zu ermitteln

  2. Linux – Udev benennt USB-Ethernet-Gerät nicht um?

  3. Wie können Sie den Chipsatz eines USB-Geräts unter Linux identifizieren?

  4. Steuern einer USB-Stromversorgung (ein/aus) mit Linux

  5. Warum brauchen wir einen Bootloader in einem eingebetteten Gerät?

So ermitteln Sie die Bandbreitennutzung von USB-Geräten unter Linux

Erstellen eines Multi-Boot-Linux-Desktop-Systems

So fügen Sie unter Linux ein neues Gerät zum BTRFS-Dateisystem hinzu

So erkennen Sie, ob Ihr System unter Linux über einen USB 3.0-Anschluss verfügt [Kurztipp]

USB-Breitband:So verbinden Sie USB-Modemgeräte unter Linux

Linux:Kein Speicherplatz mehr auf dem Gerät, während der df-Befehl viel freien Speicherplatz anzeigt