GNU/Linux >> Tutoriales Linux >  >> Linux

¿Es posible arrancar el kernel de Linux sin crear una imagen initrd?

initrd/initramfs es opcional y no un requisito. bzImage es la imagen pura del kernel y puede ser iniciada directamente por el gestor de arranque. Sin embargo, podría ser necesario ejecutar algunas tareas (cargar módulos del sistema de archivos, controladores para acceder al disco, montar el sistema de archivos raíz desde algún medio intercambiable sin nombre/ruta fijos, etc.) que normalmente requerirían acceso a un sistema de archivos y herramientas de espacio de usuario.

Eso es lo que initramfs es para:Es un archivo CPIO que se adjunta a la imagen del kernel (la imagen del kernel es el contenedor para initramfs y no al revés) ya sea en la imagen del kernel en sí o por el gestor de arranque en el momento del arranque.

Ese archivo CPIO contiene un rootfs inicial con los módulos necesarios para configurar todos los dispositivos para acceder al sistema de archivos raíz adecuado y algunos programas para identificar esos dispositivos, cargar los módulos, realizar otras tareas de inicio, volver a montar el sistema de archivos raíz adecuado en / e iniciar /sbin /iniciar

initrd es similar, con la principal diferencia de que es una imagen del sistema de archivos, que puede estar y generalmente está comprimida. El núcleo debe ser compatible con el sistema de archivos utilizado y montará esta imagen como / inicial.

Dado que CPIO es más simple en varios órdenes de magnitud, se prefiere initramfs a initrd, ya que esto ahorra el requisito de que se integren módulos de sistema de archivos y también facilita la creación de initramfs. En lugar de tener que crear una imagen ext2, montar un dispositivo de bucle y llenarla, todo se reduce a una simple creación de archivo, similar al uso de tar.

Sin embargo, si compila su kernel con todos los controladores y módulos necesarios integrados en la imagen del kernel, y su dispositivo de sistema de archivos raíz tiene un nombre fijo en el sistema, no necesita un initramfs ya que el kernel puede hacer las cosas por sí mismo.


Ejemplo de QEMU mínimo + Buildroot

Aquí hay un ejemplo concreto mínimo que muestra que initrd no es obligatorio:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/0b4f156b1b536a89c90882ed8ce551abcd3780af#initrd

Con esa configuración, podemos ejecutar fácilmente dos comandos QEMU de tipo:

qemu-system-x86_64 -drive file=rootfs.ext2

y:

qemu-system-x86_64 -initrd rootfs.cpio

donde:

  • rootfs.ext2 y rootfs.cpio son básicamente el mismo sistema de archivos raíz, pero en diferentes formatos
  • el primer comando tiene un disco duro y no -initrd
  • el segundo comando un -initrd pero sin disco duro

En ambos casos, Linux arranca bien, excepto que en el -initrd sistema, las escrituras de archivos no son persistentes ya que todo está en la memoria.


Linux
  1. Módulos del kernel de Linux sin los que no podemos vivir

  2. El kernel de Linux:las 5 principales innovaciones

  3. El ciclo de vida de las pruebas del kernel de Linux

  4. Esperando la configuración de red de Linux en el ramdisk inicial (initrd)

  5. Linux:¿el encabezado de Vmlinux contiene la longitud de la imagen del kernel?

Analizar el kernel de Linux con ftrace

Cómo verificar la versión del kernel en Linux

Cómo cambiar la pantalla de inicio de Linux

Historia de los parches en vivo del kernel de Linux

¿Cómo carga Linux la imagen 'initrd'?

¿Es posible reiniciar un sistema operativo Linux sin reiniciar el hardware?