Wie kann ich Linux mit rootfs im RAM booten?


16

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.


Bitte beschreiben Sie besser, was Sie erreichen möchten, wenn Sie bereits wissen, dass Squashfs funktioniert. Woher weißt du, dass es funktioniert? Was geschieht? Und vor allem: Was funktioniert nicht so , wie Sie es möchten?
Rozcietrzewiacz

1
Auch was Bootloader verwendet das Gerät?
rozcietrzewiacz

Ich denke, wenn Sie memdisk (von SYSLINUX) als Kernel verwenden, lädt es das gesamte Image in den Speicher und bootet dann von ihm
Golimar

Antworten:


10

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.


So habe ich ein System - Setup tatsächlich versucht , das läuft „aus Initramfs auf unbestimmte Zeit“. Das System ist für den größten Teil, aber ich habe ein paar Probleme hat - ich frage mich , wenn Sie etwas Licht zu vergießen vielleicht in der Lage? Frage hier gepostet
dtmland


0

Ich verwende den phramTreiber 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 wie

phram.phram=rootfs,0x100000,9Mi root=/dev/mtdblock0 memmap=9M\$100000

Beachten Sie, dass Sie auch das memmapArgument 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 laden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.