Das Innenleben des USB-Gadget-Treibers

Geschrieben von MMind am Dienstag, 25. Januar 2011 in Oyo

Wir sind ja momentan noch dabei den USB-Gadget-Treiber zum Laufen zu bringen. Deswegen habe ich heute mal versucht herauszufinden was sich überhaupt geändert hat auf dem Weg von smdk2416 zu Oyo und Verwandtschaft.

Kernelversionen

Der Oyo-Kernel basiert ja auf einem Fork des Kernels 2.6.21.5, der um die Unterstützung für die s3c-SoCs erweitert wurde, und dann von Qisda-Entwicklern so verbastelt wurde, dass er auf den Oyo passt.

Um vernünftige Vergleiche anstellen zu können benötigt man natürlich einen originalen s3c-linux-Abzug. Leider konnte ich bis jetzt keinen solchen finden ausser als Teil eines Linux-Cross-Reference-Projektes.

Der s3c-linux-Quelltext der dort verzeichnet ist, hat die Samsung-Version 4-3-0 vom 29.4.2008. Der Oyo-Kernel basiert hingegen auf der Version 4-6-0 vom 28.7.2008. Aber hoffentlich haben sich die 3 Monate Entwicklungszeit nicht zu sehr im USB-Gadget-Treiber niedergeschlagen.

Die Inhalte aus dem Cross-Reference-Projekt sind leider auch html-isiert und mit Zeilennummern versehen. Aber das Speichern der gerenderten Seite kombiniert mit etwas sed-Magie konnte auch dieses Problem lösen.

sed -E 's/^[0-9]+ //' s3c-udc-hs.c | sed -E 's/^ [0-9]+ //' | sed -E 's/^ [0-9]+ //' > s3c.c

Der Vergleich

Mein erster diff gegen das Oyo-Pendant der s3c-udc-hs.c fiel sehr ernüchternd aus, da im Oyo-Kernel so viel rumgeschmiert wurde, dass eigentlich kein ordentlicher diff möglich ist.

Der Kernel vom Asus DR-900 hingegen sieht eigentlich sehr aufgeräumt aus und produziert damit auch einen ganz übersichtlichen diff.

Mein Problem ist nun aber noch zu verstehen was dort eigentlich passiert :-) . Falls also ein fachkundiger Kernelentwickler zufällig hier vorbeischaut, habe ich meine diffs mal in einem Archiv bereitgestellt udc-diff.tar.gz.

Kleines Update

Ich habe jetzt bei den OpenEmbedded-Entwicklern Quellen zu einem aktuelleren s3c-linux gefunden. Dies ist zwar neuer als Unseres aber der s3c-udc-hs-Treiber ist scheinbar die selbe Version wie in den Oyo/Asus-Quellen.

Ich habe das Archiv mit neueren Diffs aktualisiert, sodass die eigentlichen Änderungen noch besser zu sehen sind.

0 Kommentare Mehr...

GPIObusters

Geschrieben von MMind am Donnerstag, 20. Januar 2011 in Oyo

Die sogenannten »General Purpose Input/Outputs« sind freie Pins eines Chips die mit relativ beliebigen Zielen verbunden sind und dann softwareseitig manipuliert werden können. Dabei variiert die Signalrichtung je nach Anwendungsfall. Das heißt Input-Pins liefern entweder eine 0 eine 1 im Kernel ab, je nachdem was das Verbindungsziel gerade tut und Output-Pins werden im Kernel mit einem ebensolchen Wert gesetzt um zum Beispiel Sachen ein- bzw. auszuschalten.

Eben diese GPIOs jage ich jetzt die letzten Tage verstärkt um unser Portierunternehmen etwas voranzubringen. Die Ergebnisse lagern in einer speziellen Wiki-Seite.

Wenn aber bei der Suche nach den GPIOs durch den original Kernelquelltext von Oyo und Asus-Reader kriecht, sieht man Dinge die man eigentlich nie sehen wollte. Mit der Tatsache dass Teile der Ladelogik im Keypad-Treiber stecken hatte ich mich inzwischen abgefunden. Aber WLan-ioctls im hsmmc-Treiber untergebracht — irgendwann muss doch der Tiefpunkt mal erreicht sein :-) . Mich würde es an dieser Stelle nicht mal mehr wundern, wenn die Qisda-Mitarbeiter über den Kernelcode auch Kochrezepte getauscht hätten.

Aber etwas gutes hat die Sucherei dennoch — mit etwas Glück habe ich die Ursache unseres nicht funktionierenden USBs gefunden. Dort war der Stand, dass alles geladen wurde, sich aber trotzdem nichts tat. Denn am GPIO GPB4, den der smdk2416-Code zum ein- und ausschalten des Ports nutzt, hängt bei uns ein Teil des Ladechips.

0 Kommentare Mehr...

Es lebt

Geschrieben von MMind am Dienstag, 4. Januar 2011 in Oyo

sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
s3c-sdhci s3c-sdhci.0: clock source 0: hsmmc (133333333 Hz)
s3c-sdhci s3c-sdhci.0: clock source 1: hsmmc (133333333 Hz)
s3c-sdhci s3c-sdhci.0: clock source 2: hsmmc-if (96000000 Hz)
mmc0: SDHCI controller on samsung-hsmmc [s3c-sdhci.0] using ADMA
s3c-sdhci s3c-sdhci.1: clock source 0: hsmmc (133333333 Hz)
s3c-sdhci s3c-sdhci.1: clock source 1: hsmmc (133333333 Hz)
s3c-sdhci s3c-sdhci.1: clock source 2: hsmmc-if (96000000 Hz)
mmc0: mmc_rescan: trying to init card at 400000 Hz
mmc1: SDHCI controller on samsung-hsmmc [s3c-sdhci.1] using ADMA
TCP cubic registered
Registering the dns_resolver key type
Waiting 30sec before mounting root device...
mmc0: new high speed SDHC card at address 0002
mmcblk0: mmc0:0002 S04GC 3.76 GiB 
 mmcblk0: p1 p2
mmc1: mmc_rescan: trying to init card at 400000 Hz
mmc1: new high speed MMC card at address 0001
mmcblk1: mmc1:0001 HYNIX 1.88 GiB 
 mmcblk1: p1 p2 p3
sagt eigentlich schon alles. :-)

Jetzt muss ich nur noch den linux-samsung-Maintainer nervern, dass diese Patches in den richtigen Kernel wandern.

1 Kommentar Mehr...

Such den Patch - ein sehr zeitiges Ostern

Geschrieben von MMind am Dienstag, 4. Januar 2011 in Oyo

So verfahren, wie zuerst gedacht, stellt sich die Situation gar nicht dar. Es scheint nämlich dass Yauhen Kharuzhy bereits die ganze Arbeit geleistet und seine Änderungen an die linux-arm-kernel Mailingliste geschickt hat.

Dort werden die Patches von den Betreuern unter die Lupe genommen, kommentiert und gegebenenfalls in den Kernel aufgenommen. In unserem Fall haben es aber bis jetzt nicht alle dieser Patches in den eigentlichen Kernel geschafft. Ob der Betreuer einfach noch keine Zeit hatte oder die Patches im Weihnachtstrubel untergegangen sind weiß ich nicht.

Auf alle Fälle hieß es jetzt sich durch das Archiv der Mailingliste zu wühlen um die betreffenden Patches zu finden und im Anschluss zu prüfen welche in unserem Kernel noch fehlen.

Für interessierte hier das Ergebnis:

  • http://www.spinics.net/lists/arm-kernel/msg105416.html
  • http://www.spinics.net/lists/arm-kernel/msg105415.html
  • http://www.spinics.net/lists/arm-kernel/msg105412.html
  • http://www.spinics.net/lists/arm-kernel/msg105418.html
  • http://www.spinics.net/lists/arm-kernel/msg105420.html
  • http://www.spinics.net/lists/arm-kernel/msg105476.html

Nun heißt es testen.

0 Kommentare Mehr...

Debian auf dem Oyo - zweiter Versuch

Geschrieben von MMind am Sonntag, 2. Januar 2011 in Oyo

Nachdem der Kernel 2.6.21 zwar startete aber mit ihm eigentlich nichts anzufangen war haben wir dann versucht einen aktuellen Kernel zu starten.

Auch dieser Versuch war leider erstmal nicht von Erfolg gekrönt.

Das "System-on-a-chip" S3C2416 besitzt 2 sogenannte HSMMC-Kanäle die aktuelle Linux-Kernel über die Infrastruktur für MMC-Karten ansprechen. Am ersten dieser Kanäle hängt die internen 2GB Flash-Speicher und am zweiten der MicroSD-Slot.

Und gerade dieser zweite Kanal, den wir für den Start des Systems von der MicroSD-Karte brauchen, macht Probleme:

sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
s3c-sdhci s3c-sdhci.0: clock source 0: hsmmc (133333333 Hz)
s3c-sdhci s3c-sdhci.0: clock source 1: hsmmc (133333333 Hz)
s3c-sdhci s3c-sdhci.0: clock source 2: hsmmc-if (96000000 Hz)
mmc0: SDHCI controller on samsung-hsmmc [s3c-sdhci.0] using ADMA
s3c-sdhci s3c-sdhci.1: failed to get io clock
mmc0: mmc_rescan: trying to init card at 400000 Hz
s3c-sdhci: probe of s3c-sdhci.1 failed with error -2

Also heißt es weitersuchen.

0 Kommentare Mehr...

Seite 1 von 1, insgesamt 5 Einträge

Suche

Nach Einträgen suchen in Outside the Walled Garden:

Das Gesuchte nicht gefunden? Gib einen Kommentar in einem Eintrag ab oder nimm per E-Mail Kontakt auf!