¿Cómo tengo el arranque de Linux con un rootfs en RAM?

16

El rootfs es una imagen de squashfs y mi gestor de arranque lo está cargando en alguna dirección en SDRAM. ¿Qué parámetros necesito pasar al kernel para que pueda montar los rootfs desde allí? El soporte de Squashfs está integrado y ya funciona con

root=/dev/mtdblock2 rootfstype=squashfs  

para arrancar desde el flash.

EDITAR: Este es un dispositivo integrado basado en MIPS, que utiliza un cargador de arranque personalizado. Normalmente, el gestor de arranque extrae el núcleo comprimido del flash en la SDRAM, y luego el núcleo se monta / dev / mtdblock2 como rootfs. Estoy tratando de mejorar el gestor de arranque para que pueda descargar una imagen a su RAM y arrancar sin escribir en la memoria flash.

No puedo entender cómo hacer que Linux monte una imagen del sistema de archivos en la RAM como rootfs.

Atilla Filiz
fuente
Describa mejor, qué está tratando de lograr, si ya sabe que squashfs funciona. ¿Cómo sabes que funciona? ¿Lo que pasa? Y lo más importante, ¿qué no funciona de la manera que quieres?
rozcietrzewiacz
1
Además, ¿qué gestor de arranque utiliza el dispositivo?
rozcietrzewiacz
Creo que si usas memdisk (de SYSLINUX) como kernel, carga toda la imagen en la memoria y luego arranca desde ella
golimar

Respuestas:

10

Yo usaría un initramfs. ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

Muchas distribuciones de Linux usan un initramfs (que no debe confundirse con un initrd, son diferentes) durante el proceso de arranque, principalmente para poder iniciar programas de espacio de usuario muy temprano en el proceso de arranque. Sin embargo, puedes usarlo para lo que quieras.

El beneficio de un initramfs sobre un initrd es que un initramfs usa un sistema de archivos tmpfs mientras que un initrd usa un dispositivo de bloque de ram. La diferencia clave aquí es que para un initrd, debe preasignar todo el espacio para el sistema de archivos, incluso si no va a utilizar todo ese espacio. Por lo tanto, si no utiliza el espacio del sistema de archivos, desperdiciará ram, que en un dispositivo integrado, a menudo es un recurso escaso. Tmpfs es un sistema de archivos que se queda sin memoria RAM, pero solo usa tanta memoria RAM como la que se usa actualmente en el sistema de archivos. Entonces, si elimina un archivo de un tmpfs, ese ram se libera inmediatamente.

Ahora normalmente un initramfs es temporal, solo se usa para ejecutar algunos programas extremadamente temprano en el proceso de arranque. Después de ejecutar esos programas, el control se transfiere al sistema de archivos real que se ejecuta en un disco físico. Sin embargo, no tienes que hacer eso. No hay nada que le impida quedarse sin initramfs indefinidamente.

Patricio
fuente
Así que realmente he estado tratando de configurar un sistema que se ejecuta "fuera de initramfs indefinidamente". El sistema está funcionando en su mayor parte, pero he tenido algunos problemas. Me pregunto si podría arrojar algo de luz. Pregunta publicada aquí
dtmland 01 de
0

Utilizo el phramcontrolador para este propósito: emula un dispositivo MTD que usa memoria física, lo que significa que puede usar exactamente la misma imagen de rootfs para pruebas / desarrollo que luego grabará en el flash real. La magia necesaria en la línea de comando del núcleo sería algo así como

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

Tenga en cuenta que también necesita el memmapargumento para asegurarse de que el núcleo no intente usar esa memoria por sí mismo. 9MB es el tamaño de mi rootfs (o era). El \ before $ es necesario en mi gestor de arranque, puede que no esté en el tuyo. La dirección que he elegido allí es arbitraria, porque no sé cómo se almacena la memoria física en su dispositivo, así que elija una que tenga sentido para usted. Supongo que anteriormente usó tftp o algo para cargar sus rootfs en esa dirección

telent
fuente