Forum: Mikrocontroller und Digitale Elektronik MTD / JFFS2 - Hilfe bei ersten Schritten


von Themistoklis M. (zardoz7)


Lesenswert?

Hallo!

Ich betreibe eine Platine mit einem ARM (AT91RM9200) und externem RAM 
(256 MBit) und seriell angebunden Flash (AT45DB642D).

Es befinden sich auf dem System ein Flash-Loader, ein Linux-Loader, der 
Kernel und ein gepacktes rootfs.

Momentan startet das System, indem der Flash-Loader, den Linux-Loader, 
Kernel und gepacktes rootfs in den RAM lädt und dann den Kernel 
ausführt.

Dieser entpackt im weiteren Verlauf die erkannte RAM-Disk und mountet 
sie.

Danach wird eine Konsole gestartet und ggf. eine Anwendung.

Nun habe ich keinerlei Möglichkeit Daten permanent auf dem System zu 
speichern.

Als Möglichkeit dachte ich mir JFFS2 auf dem Flash einzurichten.

Ich gehe so vor:
Über cmdline lasse ich eine mtd erstellen:
...
mtdparts=AT45DB642.spi0:0x100000@0x684400(jffs2_disk)
...
Worauf muss ich hier achten?
Da laut Manual auf dem Flash "Page Erase" erfolgen kann, gehe mal davon 
aus, dass das MTD nur auf Page-Grenzen liegen muss. Muss ich evtl. doch 
Block-Grenzen waren?
Woher "weiß" der MTD-Treiber von den Seiten-, Block- und Sektor-Größen?
Woher weiß dieser was die kleinste löschbare Einheit ist?
Wird das evtl. erst durch den jffs2-Treiber gehandhabt?

Danach erstelle ich mit den mtdtools ein leeres jffs.image aus einem 
leeren Ordner.
Ich gebe dazu auf dem Host ein:
mkfs.jffs2 -r src/ -o image --eraseblock=0x400 --pad=0x100000 -l
Worauf muss ich nun achten? Was hat es sich mit den "cleanmarker" auf 
sich?

Folgende Ausgaben kommen von meinem System:
Bei Einrichten des MTD:
...
at91_dataflash: AT45DB642 detected [spi0] (8650752 bytes)
1 cmdlinepart partitions found on MTD device AT45DB642.spi0
Creating 1 MTD partitions on "AT45DB642.spi0":
0x00684400-0x00784400 : "jffs2_disk"
mtd: partition "jffs2_disk" doesn't start on an erase block boundary -- 
force read-only
...
Was will es mir hier sagen? Was ist ein "erase block boundary"?
Mein image fängt jedenfalls mit 19 85 20 03 (bzw. 85 19 03 20 auf dem 
Host) an, also ein cleanmarker node; danach folgen dirent und inode

Wenn ich später das mtdblock mounte kommt folgende Meldung:
...
~ # mount -t jffs2 /dev/mtdblock/0 mnt/nfs/
jffs2: Flash size not aligned to erasesize, reducing to 1023KiB
JFFS2 flash size adjusted to 1047552KiB
JFFS2 write-buffering enabled buffer (1056) erasesize (8448)
CLEANMARKER node found at 0x00000000 has totlen 0xc != normal 0x0
...
Was macht es hier? Was bedeutet das mit dem "reducing to 1023KiB"? Und 
wieso stimmt die Lände der cleanmarker nicht?

Ihr seht ich bin wirklich relativ am Anfang was jffs2 angeht aber habe 
versucht das Thema zu verstehen.
Trotzdem brauche ich dringend eure Hilfe!

Danke!!

Gruß, Themis

von Themistoklis M. (zardoz7)


Lesenswert?

Bin ich hier zu off-topic?

Keine Vorschläge?

Besonders was das "read-only" anbelangt?

Gruß,
Themis

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.