www.mikrocontroller.net

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


Autor: Andreas Auer (Firma: Embedded Microtec) (andi) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: asdf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Auer (Firma: Embedded Microtec) (andi) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: asdf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Auer (Firma: Embedded Microtec) (andi) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok... besten Dank schonmal.

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

mfg
Andreas

Autor: Andreas Auer (Firma: Embedded Microtec) (andi) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Auer (Firma: Embedded Microtec) (andi) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jonny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Auer (Firma: Embedded Microtec) (andi) Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.