
vmlinuxes un archivo ejecutable enlazado estáticamente que contiene el núcleo de Linux en uno de los formatos de archivo de objeto admitidos por Linux, que incluye el formato ejecutable y enlazable (ELF) y el formato de archivo de objeto común (COFF). El archivo puede ser necesario para la depuración del núcleo , la generación de tablas de símbolos u otras operaciones, pero debe hacerse arrancable antes de usarse como núcleo de un sistema operativo agregando un encabezado de arranque múltiple , un sector de arranque y rutinas de configuración.
vmlinux
Etimología
Tradicionalmente, las plataformas UNIX llamaban al núcleo imagen /unix. Con el desarrollo de la memoria virtual , a los núcleos que soportaban esta característica se les dio el vmprefijo - para diferenciarlos. El nombre vmlinuxes una mutación de vmunix , mientras que vmlinuzla letra zal final denota que está comprimido (por ejemplo gzipped ). [1]
Ubicación
Tradicionalmente, el núcleo estaba ubicado en el directorio raíz de la jerarquía del sistema de archivos; sin embargo, como el gestor de arranque debe utilizar controladores BIOS para acceder al disco duro , las limitaciones en algunos sistemas i386 significaban que solo los primeros 1024 cilindros del disco duro eran direccionables.
Para superar esto, los distribuidores de Linux alentaron a los usuarios a crear una partición al comienzo de sus unidades específicamente para almacenar archivos relacionados con el cargador de arranque y el núcleo. GRUB , LILO y SYSLINUX son cargadores de arranque comunes .
Por convención, esta partición se monta en la jerarquía del sistema de archivos como /boot. Esto se estandarizó posteriormente mediante el Estándar de jerarquía del sistema de archivos (FHS), que ahora requiere que la imagen del núcleo de Linux se ubique en /o /boot, aunque no existe ninguna restricción técnica que lo imponga. [2]
Compresión
Tradicionalmente, al crear una imagen de kernel arrancable , el kernel también se comprime usando gzip o, desde Linux 2.6.30, [3] usando LZMA o bzip2 , lo que requiere que se incluya un pequeño fragmento de descompresión en la imagen resultante. El fragmento de descompresión descomprime el código del kernel, en algunos sistemas imprime puntos en la consola para indicar el progreso, y luego continúa el proceso de arranque. Más tarde se agregó soporte para compresión LZO , [4] xz , [5] LZ4 [6] y zstd [7] .
La rutina de descompresión es un factor insignificante en el tiempo de arranque y, antes del desarrollo de bzImage , las restricciones de tamaño de algunas arquitecturas, especialmente i386, eran extremadamente limitantes, lo que hacía que la compresión fuera una necesidad.
En la arquitectura SPARC , el archivo vmlinux se comprime usando gzip simple , porque el cargador de arranque SILO descomprime de forma transparente las imágenes comprimidas con gzip.
El nombre del archivo de la imagen de arranque no es importante, pero muchas distribuciones populares usan vmlinuz .
bzImage

A medida que el núcleo de Linux fue madurando, el tamaño de los núcleos generados por los usuarios creció más allá de los límites impuestos por algunas arquitecturas, donde el espacio disponible para almacenar el código comprimido del núcleo es limitado. El formato bzImage ( big zImage ) fue desarrollado para superar esta limitación dividiendo el núcleo en regiones de memoria no contiguas . [ cita requerida ]
bzImage se comprimía con gzip hasta Linux 2.6.30, [3] que introdujo más algoritmos. Aunque el bz prefijo puede sugerir que se utiliza la compresión bzip2 , no es así. [1] (El paquete bzip2 suele distribuirse con herramientas con el prefijo bz, como bzless, bzcat, etc.)
El archivo bzImage tiene un formato específico. Contiene +++ concatenados bootsect.o. setup.o[ 8 ] contiene el archivo vmlinux comprimido en gzip en su sección de datos. El script misc.oque se encuentra en las fuentes del kernel descomprime una imagen del kernel. Algunas distribuciones (por ejemplo, Red Hat y clones) pueden venir con un RPM que contiene el archivo para el RPM del kernel correspondiente y, por lo general, se instala en o .
piggy.o piggy.oextract-vmlinuxscripts/kernel-debuginfo vmlinux/usr/lib/debug/lib/modules/`uname -r`/vmlinux/usr/lib/debug/lib64/modules/`uname -r`/vmlinux
Véase también
Notas y referencias
- ^ ab "Definición de vmlinuz". www.linfo.org . Bellevue Linux. 29 de marzo de 2005 . Consultado el 21 de junio de 2015 .
- ^ "Sección 3.5.2 — /boot : Archivos estáticos del gestor de arranque". FHS 2.3. 2004-01-29 . Consultado el 2014-03-11 .
El núcleo del sistema operativo debe estar ubicado en / o /boot.
- ^ ab Linux 2.6.30, publicado el 9 de junio de 2009, agregó soporte para comprimir la imagen del kernel con los algoritmos LZMA y bzip2 [1]
- ^ Linux 2.6.33, lanzado el 24 de febrero de 2010, agregó soporte para comprimir la imagen del kernel con LZO [2]
- ^ Linux 2.6.38, lanzado el 14 de marzo de 2011, agregó soporte para comprimir la imagen del kernel con xz [3]
- ^ Linux 3.11, lanzado el 2 de septiembre de 2013, agregó soporte para comprimir la imagen del kernel con LZ4 [4]
- ^ Linux 5.9, lanzado el 11 de octubre de 2020, agregó soporte para comprimir la imagen del kernel, initrd e initramfs con zstd [5]
- ^ Yann Droneaud (28 de septiembre de 1999). "Re: Descompresión de bzImage". LKML (lista de correo).
La zImage contiene bootsect.o + setup.o + misc.o + piggy.o
Lectura adicional
- Alavoor Vasudevan (15 de agosto de 2003). "10. Información sobre los archivos del núcleo". El CÓMO del núcleo de Linux. Archivado desde el original el 10 de octubre de 2017. Consultado el 11 de marzo de 2014 .
- Daniel Pierre Bovet (3 de enero de 2013). "Secciones especiales en binarios de Linux". LWN.net .
todas las secciones especiales que aparecen en el núcleo de Linux terminan empaquetadas en uno de los segmentos definidos en el encabezado ELF de vmlinux. Cada sección especial cumple un propósito particular.
Enlaces externos
- Proceso de arranque