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.
Respuestas:
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.
fuente
¿ Son suficientes las opciones rd_start y rd_size ?
Parece que el puerto ARM puede tener una sintaxis para la opción initrd :
fuente
Utilizo el
phram
controlador 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í comoTenga en cuenta que también necesita el
memmap
argumento 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ónfuente