Todo el núcleo se carga en la memoria durante el arranque, normalmente junto con un initramfs
hoy en día. (Todavía es posible configurar un sistema para que arranque sin un initramfs
pero eso es inusual en computadoras de escritorio y servidores).
El initramfs
La función de es proporcionar la funcionalidad necesaria para montar los sistemas de archivos "reales" y continuar arrancando el sistema. Eso implica módulos del kernel y también varios binarios:necesita al menos udev
, tal vez algo de trabajo en red, y kmod
que carga módulos.
Los módulos se pueden cargar en el núcleo después del arranque, por lo que no hay una preparación especial del núcleo por parte del initramfs
. Se pueden almacenar en cualquier lugar:el initramfs
, /lib/modules
en el sistema de archivos real, en un árbol de desarrollo si está desarrollando un módulo... El initramfs
solo necesita contener los módulos que son necesarios para montar el sistema de archivos raíz (que contiene el resto).
Todo el kernel (pero no sus módulos) se cargará en la memoria. Si hay módulos que el kernel necesitará antes de que cualquier sistema de archivos esté disponible (esto generalmente significa los controladores para los sistemas de archivos y sus dispositivos), entonces esos módulos estarán en initramfs (en la memoria), y el kernel los cargará desde allí. Otros módulos se pueden cargar más tarde desde el sistema de archivos.
El kernel en las configuraciones modernas de Linux se basa en gran medida en módulos, es decir, el kernel propiamente dicho (cargado en el arranque en la RAM) incluye solo la funcionalidad mínima, todo el resto se compila como módulos (cargables en tiempo de ejecución). Para hacer que esto funcione incluso cuando, p. los dispositivos o sistemas de archivos necesarios para el arranque son módulos, un initramfs
se carga con el kernel (como su nombre lo indica, esta es un área de RAM con un sistema de archivos simple, montado en el arranque). Este sistema de archivos temporal está montado en /
y contiene programas de inicio y los módulos necesarios. Una vez que el inicio en initramfs
está hecho, Linux ejecuta un pivot_root(8)
, montando el verdadero /
y lanzando el initramfs
contenidos.
El punto de esta complejidad es que, p. una distribución puede compilar uno kernel (kernel mínimo y conjunto completo de módulos), y al instalar el kernel, cree un initramfs
adaptado al hardware y la configuración de la máquina de destino. Todo esto es necesario debido a la gran variedad de dispositivos y configuraciones de "Ordenadores personales".