Datum: 24.02.2008 20:24
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
Datum: 24.02.2008 20:35
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.
Datum: 24.02.2008 20:59
> 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.
Datum: 24.02.2008 21:32
@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
Datum: 24.02.2008 21:38
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.
Datum: 24.02.2008 21:43
Ok... besten Dank schonmal. @yalu: Hab nochmal nach "mmcblk" "gegrept". IMHO heisst das Device immer noch "mmcblk". mfg Andreas
Datum: 24.02.2008 23:01
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
Datum: 24.02.2008 23:20
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.
Datum: 25.02.2008 09:28
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
Datum: 09.05.2008 11:48
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
Datum: 09.05.2008 12:11
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
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel