Forum: Mikrocontroller und Digitale Elektronik AT91RM9200 und Linux Kernel > 2.6.17


von Andreas A. (Firma: Embedded Microtec) (andi) Flattr this


Lesenswert?

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

von asdf (Gast)


Lesenswert?

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.

von yalu (Gast)


Lesenswert?

> 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.

von Andreas A. (Firma: Embedded Microtec) (andi) Flattr this


Lesenswert?

@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

von asdf (Gast)


Lesenswert?

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.

von Andreas A. (Firma: Embedded Microtec) (andi) Flattr this


Lesenswert?

Ok... besten Dank schonmal.

@yalu:
Hab nochmal nach "mmcblk" "gegrept". IMHO heisst das Device immer noch 
"mmcblk".

mfg
Andreas

von Andreas A. (Firma: Embedded Microtec) (andi) Flattr this


Lesenswert?

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

von yalu (Gast)


Lesenswert?

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.

von Andreas A. (Firma: Embedded Microtec) (andi) Flattr this


Lesenswert?

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

von Jonny (Gast)


Lesenswert?

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

von Andreas A. (Firma: Embedded Microtec) (andi) Flattr this


Lesenswert?

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
Noch kein Account? Hier anmelden.