Come posso avviare Linux con un rootfs nella RAM?


16

Il rootfs è un'immagine di squashfs e il mio bootloader lo sta caricando in qualche indirizzo in SDRAM. Quali parametri devo passare al kernel in modo che possa montare i rootfs da lì? Il supporto di Squashfs è integrato e funziona già

root=/dev/mtdblock2 rootfstype=squashfs  

per l'avvio dal flash.

EDIT: si tratta di un dispositivo incorporato basato su MIPS, che utilizza un bootloader personalizzato. Normalmente, il bootloader estrae il kernel compresso dal flash nella SDRAM, quindi il kernel monta / dev / mtdblock2 come rootfs. Sto cercando di migliorare il bootloader in modo che possa scaricare un'immagine nella sua RAM e avviare senza scrivere sul flash.

Non riesco a capire come fare in modo che Linux monti un'immagine del filesystem nella RAM come rootfs.


Descrivi meglio cosa stai cercando di ottenere se sai già che squashfs funziona. Come fai a sapere che funziona? Che succede? E, soprattutto, cosa non funziona nel modo desiderato?
rozcietrzewiacz,

1
Inoltre, quale bootloader utilizza il dispositivo?
rozcietrzewiacz,

Penso che se usi memdisk (da SYSLINUX) come kernel, carica l'intera immagine in memoria e poi si avvia da essa
golimar

Risposte:


10

Vorrei usare un initramfs. ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

Molte distribuzioni Linux usano un initramfs (da non confondere con un initrd, sono diverse) durante il processo di avvio, principalmente per poter avviare programmi di spazio utente molto presto nel processo di avvio. Tuttavia, puoi usarlo per quello che vuoi.

Il vantaggio di un initramfs su un initrd è che un initramfs usa un filesystem tmpfs mentre un initrd usa un dispositivo a blocchi di ram. La differenza chiave qui è che per un initrd, devi preallocare tutto lo spazio per il filesystem, anche se non utilizzerai tutto quello spazio. Quindi, se non si utilizza lo spazio del filesystem, si spreca ram, che su un dispositivo incorporato, è spesso una risorsa scarsa. Tmpfs è un filesystem che esaurisce ram, ma usa solo la ram che è attualmente in uso sul filesystem. Quindi, se si elimina un file da un tmpfs, quel ram viene immediatamente liberato.

Ora normalmente un initramfs è temporaneo, usato solo per eseguire alcuni programmi molto presto nel processo di avvio. Dopo l'esecuzione di tali programmi, il controllo viene passato al filesystem reale in esecuzione su un disco fisico. Tuttavia, non è necessario farlo. Non c'è nulla che ti impedisca di rimanere a corto di initramfs indefinitamente.


Quindi, in realtà, ho provato a configurare un sistema che "esaurisce indefinitamente gli initramfs". Il sistema è attivo per la maggior parte, ma ho avuto dei problemi - mi chiedo se potresti essere in grado di far luce? Domanda pubblicata qui
dtmland il


0

Uso il phramdriver per questo scopo: emula un dispositivo MTD usando la memoria fisica, il che significa che puoi usare esattamente la stessa immagine di rootfs per test / sviluppo che successivamente brucerai sul vero flash. La magia necessaria sulla riga di comando del kernel sarebbe qualcosa di simile

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

Nota che hai anche bisogno memmapdell'argomento per assicurarti che il kernel non tenti di usare quella memoria per se stesso. 9 MB è quanto è grande (o era) il mio rootfs. Il \ before $ è necessario nel mio bootloader, potrebbe non essere nel tuo. L'indirizzo che ho scelto lì è arbitrario, perché non so come sia disposta la memoria fisica sul tuo dispositivo, quindi scegline uno che abbia senso per te. Presumo che tu abbia usato tftp o qualcosa del genere per caricare i tuoi rootfs a quell'indirizzo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.