Nios II uClinux SD als root-file-system

OP #3999230
Lesenswert?

Hallo,

auf meinem DE2-114 Board läuft uClinux für den Nios II. Ich kann eine 
SD-Karte mounten und Dateien lesen und schreiben. Nun möchte ich gerne, 
dass die SD-Karte als root-file-system fungiert.

Dazu habe ich die Schritte aus dem Altera-Wiki befolgt 
(http://www.alterawiki.com/wiki/Root_Device).

In Schritt 7 sthet nun:
[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support <== 
unselect

Wenn ich nun "make" mache, dann wird das "vmImage" erstellt aber kein 
"zImage". Fehlermeldung:
"*** No rule to make target `image.zimage.all'"

Wie bekomme ich nun den Kernel auf das Bord? Irgendwie muss die cpu ja 
den Kernel laden und die SD-Karte mounten. Ich bin ganz neu in dem Thema 
und weiß nicht wie ich nun weiter vorgehen soll.

Ich hoffe Ihr könnt mir irgendwie weiter helfen.

Mit freundlichem Gruß Jan
#3999256
Lesenswert?

Eine RAM-Disk brauchst du dafür nicht zwangsläufig. Wichtig ist nur, 
dass die SD/MMC-Treiber fest in den Kernel mit einkompiliert sind. Sonst 
hast du das Henne-Ei-Problem. Also in der Kernel-Konfiguration gucken, 
dass ein Stern (*) vor den Treibern steht und kein "M".

Gruß
Marius
OP #3999274
Lesenswert?

Danke schon mal für deine Antwort! :)

Die treiber habe ich fest im Kernel:

<*> SPI support ->
   <*> Altera SPI Controler
   -*- Utilities for Bitbanging SPI masters

<*> MMC/SD/SDIO card support ->
   <*> MMC block device driver
   (8) Number of minors per block device
   [*] Use bounce buffer for simple hosts
   <*> MMC/SD/SDIO over SPI

Die SD-Karte habe ich so formatiert:
$ mke2fs /dev/sdb
$ mount /dev/sdb /mnt
$ cd /mnt
$ zcat /path/to/initramfs_data.cpio | cpio -id
$ cd /
$ umount /mnt

Muss ich in Qsys ein onchip-ram implementieren und ein .hex-file 
zuweisen, dass irgendwie den Kernel in das sdram kopiert? Ein "zImage" 
genneriert er mir ja nicht :/
OP #4000916
Lesenswert?

Ich kopiere das zImage momentan direkt in den sdram, also brauche ich im 
Moment keinen BootLoader.

Das Problem ist, dass die Kernel Commands (bootargs = "debug 
console=ttyAL0,115200 rootfstype=ext3 root=/dev/mmcblk0p1 rootwait rw") 
nur ausgeführt werden wenn keine init-Datei im initramfs vorhanden ist.
Wenn ich vor dem Build des Kernels den ordner "INI" in "INI_" umbennene, 
dann kann er diesen nicht mit kompilieren und die SD-Karte wird als 
rootfs eingebunden. Das kann ja aber nicht die "saubere" Lösung sein. 
Wie kann ich also das erzeugen der INI-Datei unterbinden?

mfG Jan
Gast #4001345
Lesenswert?

Moin,

Das scheint mir irgendein alteraspezifisches Problem zu sein. Wenn man 
das nicht loesen will, dann wuerd' mir noch die Moeglichkeit einfallen, 
mittels "switch_root" (busybox oder auch util-linux)  Kommando aus dem 
initramfs auf ein anderes rootfs "umzuschalten".

Gruss
WK
OP #4004810
Lesenswert?

Er ignoriert die Kernel-Commandline nicht komplett, aber er guckt halt 
ob ein init-file vorhanden ist und nur wenn das nicht da ist verwendet 
er "root=/dev/mmcblk0p1". Das habe ich hier gelesen 
(http://famschmid.net/uclinuxtutorial_nios.html#initramfs) und das 
stimmt auch. Die frage ist nun, wie stelle ich ein, dass kein init-file 
erstellt wird?
In der Kernel-Config gibt es unter "Core Applications" die Option 
"init", jedoch macht es keinen Unterschied ob ich diese aktiviere oder 
nicht.
OP #4005497
Lesenswert?

Ich habe es jetzt hinbekommen :)

ich musst zwischendurch mal "make clean" machen, da er sonst die 
einstellung "[ ] init" nicht beachtet hat.

Der nächste Schritt ist nun einen Bootloader zu implementirern, welcher 
das "zImage" von der SD-Karte in den SDRAM schiebt und startet..
OP #4038773
Lesenswert?

Nachtrag:

Der schöne Weg ist:

[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support <==
unselect

Wenn dann kein zImage erzeugt wird -> "LINUXTARGET=zImage make linux".

Wichtig, bei mmc over spi "rootwait" in den Kernal Command String 
setzen, da die SD-Karte lange braucht um zu regieren..

Nur falls mal jemand das gleiche Problem haben sollte ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren