Hallo Nachdem hier doch einige Erfahrungen mit dem AT91RM9200 Controller von Atmel haben, kann mir bestimmt jemand weiterhelfen! Und zwar hab ich ein kleines AT91RM9200 Board gebaut auf dem Linux (Kernel 2.6.17.14) läuft. Hab jedoch noch ein Problem mit dem USB Host Interface und möchte deshalb eine neuere Kernel Version versuchen, da es sich vielleicht um einen Software Fehler im USB Host Treiber des 2.6.17.14er Kernel handelt. Zur Konfiguration meines Boards: * Linux Kernel wird aus dem Dataflash von U-Boot geladen (funktioniert) * Linux Kernel lädt die benötigten Treiber und soll dann auf eine SD Karte zugreifen, auf der das Root Filesystem liegt. (funktioniert mit 2.6.17.14 einwandfrei)! Mein Problem ist nun, dass die neueren Kernel Version (probiert hab ich 2.6.21, 2.6.23, 2.6.24 jeweils gepatcht und ungepatcht) zwar beginnen zu booten, jedoch auf die SD Karte nicht zugreifen können (Meldung (in etwa): "einen richtigen Parameter für 'root=' angeben"). Als Parameter hab ich "root=mmcblk0p1" angegeben. Hat sich dieser vielleicht geändert?? Der SD Karten Treiber hat sich ab Version 2.6.17.14 extrem geändert (sieht neu programmiert aus - etwas klarer und schöner strukturiert). Geladen wird er... IMHO sieht es so aus, als würde die Initialisierung der Karte nicht fertig durchgeführt (d.h. der Kernel möchte zu früh auf die Karte zugreifen). Keine Ahnung, ob das sein kann?!?! Vielleicht hat jemand ein ähnliches Problem gehabt bzw. gelöst! Bin für jeden Tipp dankbar! mfg Andreas
HI Andreas, ich kenn mich nur etwas mit Linux aus, aber nicht mit ARMs. Wenn er versucht auf das rootfs zu zugreifen bevor die treiber geladen sind, hilft es oft, eine initrd zu verwenden. so können die treiber & hilfsprogramm geladen werden, bevor zugriff auf das rootfs möglich ist. Vielleicht ist das die Lösung für dein Problem? Auch wenn es mit Kanone auf Spatzen geschossen ist.
> Als Parameter hab ich "root=mmcblk0p1" angegeben. Hat sich dieser > vielleicht geändert?? > > Der SD Karten Treiber hat sich ab Version 2.6.17.14 extrem geändert > (sieht neu programmiert aus - etwas klarer und schöner > strukturiert). Wenn du den Treiber schon so genau angeschaut hast, hättest du doch herausfinden müssen, welche Device-Namen er verwendet. Dass sich solche Namen ändern, passiert schon hin und wieder.
@asdf: Das wäre noch eine Idee. Da ich bis jetzt aber wenig mit initrd zu tun hatte (und ich mich deshalb damit wenig auskenne), könnt ich auch versuchen über NFS zu booten. Mal schauen! @yalu: Tja... das dachte ich auch, dass dort irgendwo stehen sollte, welche Namen die Partitionen bekommen. Aber dem ist nicht so... die Namen setzen sich ja meist dynamisch zusammen. Ich konnte da zumindest nichts entdecken! mfg Andreas
Wenn die namen dynamisch vergeben werden dann könnte udev dazwischen funken, z.B. andere Reihenfolge. initrd ist garnicht sooooo schwierig. Ich lasse das immer von genkernel machen, da muss ich nicht denken. Ansonsten tutorial lesen & fertige skripte verwenden. gentoo-wiki ist dabei meine Quelle der Wahl, schneller kommt man nicht zum ERgebnis.
Ok... besten Dank schonmal. @yalu: Hab nochmal nach "mmcblk" "gegrept". IMHO heisst das Device immer noch "mmcblk". mfg Andreas
Ich hab jetzt nochmal probiert per NFS zu booten. Hat auch funktioniert. Und die SD Karte wird auch geladen... d.h. die Partition, von der er vorher nicht starten konnte, erkennt er jetzt. Liegt also wirklich daran, dass der MMC/SD Treiber die Karte noch nicht initialisiert hat, bevor der Kernel zugreift. Das sollte aber sicher nicht so sein! Gibts im Kernel Mechanismen, die es erlauben, dass man wartet, bis bestimmte Treiber geladen sind?? mfg Andreas
Woher wird überhaupt der SD-Karten-Treiber geladen? Vom Dataflash? Ist darauf ein Filesystem? Wieso kompilierst du den SD-Karten-Treiber nicht einfach fest in den Kernel? Du brauchst ihn ja offensichtlich immer, somit gibt es keinen Grund, ihn als Modul zu laden. Auch eine Initrd erübrigt sich dann.
Ich hab den Treiber fest im Kernel drinnen. Er wird nicht als Modul geladen. Es ist jedoch so, dass der Code noch nicht ganz abgearbeitet ist, wenn der Kernel die Root-Partition laden will. D.h. die Karte ist wahrscheinlich noch nicht initialisiert! Ich weiß momentan nur nicht, wie ich es anstellen soll, dass der Kernel noch ein bisschen wartet bis die SD Karte initialisiert ist! mfg Andreas
du kannst in u-boot mit der variable bootargs den parameter rootdelay=4 eintragen. dann wird 4 sekunden gewartet bevor von der sd-karte geladen wird. gruß Johann
Das hört sich interessant an. Wird der Parameter rootdelay=4 an den Kernel weitergegeben, oder ist das eine Anweisung für U-Boot?? mfg Andreas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.