Das rootfs ist ein squashfs-Image und mein Bootloader lädt es in eine Adresse im SDRAM. Welche Parameter muss ich an den Kernel übergeben, damit er die Rootfs von dort einbinden kann? Squashfs-Unterstützung ist integriert und funktioniert bereits mit
root=/dev/mtdblock2 rootfstype=squashfs
zum Booten aus dem Flash.
BEARBEITEN: Dies ist ein MIPS-basiertes eingebettetes Gerät, das einen benutzerdefinierten Bootloader verwendet. Normalerweise extrahiert der Bootloader den komprimierten Kernel aus dem Flash in das SDRAM und mountet dann / dev / mtdblock2 als rootfs. Ich versuche, den Bootloader so zu verbessern, dass er ein Image in seinen RAM herunterladen und booten kann, ohne in den Flash zu schreiben.
Ich kann nicht herausfinden, wie Linux ein Dateisystem-Image im RAM als rootfs mounten soll.
Antworten:
Ich würde ein initramfs verwenden. ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )
Viele Linux-Distributionen verwenden eine initramfs (nicht mit einem initrd verwechselt werden, sie sind unterschiedlich) während des Startvorgangs, meistens in der Lage sein, Userspace-Programme starten sehr früh im Boot-Prozess. Sie können es jedoch für beliebige Zwecke verwenden.
Der Vorteil eines initramfs gegenüber einem initrd besteht darin, dass ein initramfs ein tmpfs-Dateisystem verwendet, während ein initrd ein RAM-Block-Gerät verwendet. Der Hauptunterschied besteht darin, dass Sie für eine initrd den gesamten Speicherplatz für das Dateisystem vorbelegen müssen, auch wenn Sie nicht den gesamten Speicherplatz verwenden. Wenn Sie also nicht den Speicherplatz des Dateisystems verwenden, verschwenden Sie RAM, was auf einem eingebetteten Gerät häufig eine knappe Ressource ist. Tmpfs ist ein Dateisystem, dem der Arbeitsspeicher ausgeht, das jedoch nur so viel Arbeitsspeicher verwendet, wie derzeit im Dateisystem verwendet wird. Wenn Sie also eine Datei aus einem tmpfs löschen, wird dieser RAM sofort freigegeben.
Normalerweise ist ein initramfs temporär und wird nur verwendet, um einige Programme sehr früh im Startprozess auszuführen. Nachdem diese Programme ausgeführt wurden, wird die Steuerung an das reale Dateisystem übergeben, das auf einer physischen Festplatte ausgeführt wird. Sie müssen dies jedoch nicht tun. Nichts hindert Sie daran, auf unbestimmte Zeit aus den initramfs herauszulaufen.
quelle
Sind die Optionen rd_start und rd_size ausreichend?
Anscheinend hat der ARM-Port eine Syntax für die Option initrd :
quelle
Ich verwende den
phram
Treiber für diesen Zweck: Er emuliert ein MTD-Gerät mit physischem Speicher. Das bedeutet, dass Sie zum Testen / Entwickeln genau dasselbe Rootfs-Image verwenden können, das Sie später auf den echten Flash brennen werden. Die notwendige Magie auf der Kernel-Kommandozeile wäre so etwas wieBeachten Sie, dass Sie auch das
memmap
Argument benötigen , um sicherzustellen, dass der Kernel nicht versucht, diesen Speicher für sich selbst zu verwenden. 9MB ist, wie groß mein rootfs ist (oder war). Das \ before $ wird in meinem Bootloader benötigt, möglicherweise nicht in Ihrem. Die Adresse, die ich dort gewählt habe, ist willkürlich, da ich nicht weiß, wie der physische Speicher auf Ihrem Gerät ausgelegt ist. Wählen Sie also eine Adresse aus, die für Sie sinnvoll ist. Ich gehe davon aus, dass Sie zuvor TFTP oder etwas verwendet haben, um Ihre Rootfs unter dieser Adresse zu ladenquelle