Vmlinux

vmlinux
es un archivo ejecutable vinculado estáticamente que contiene el kernel de Linux en uno de los formatos de archivo objeto admitidos por Linux, que incluye el formato ejecutable y vinculable (ELF) y Formato de archivo de objeto común (COFF). El archivo vmlinux
puede ser necesario para la depuración del kernel, la generación de tablas de símbolos u otras operaciones, pero debe poder iniciarse antes de usarse como kernel del sistema operativo agregando un encabezado de arranque múltiple, un sector de arranque y rutinas de configuración.
Etymology
Tradicionalmente, las plataformas UNIX llamaban a la imagen del núcleo /unix
. Con el desarrollo de la memoria virtual, a los núcleos que admitían esta característica se les dio el prefijo vm
- para diferenciarlos. El nombre vmlinux
es una mutación de vmunix, mientras que en vmlinuz
la letra z
al final indica que está comprimido (por ejemplo, con gzip).
Ubicación
Tradicionalmente, el kernel estaba ubicado en el directorio raíz de la jerarquía del sistema de archivos; sin embargo, como el gestor de arranque debe usar controladores BIOS para acceder al disco duro, las limitaciones en algunos sistemas i386 significaron que solo se podían direccionar los primeros 1024 cilindros del disco duro.
Para superar esto, los distribuidores de Linux alentaron a los usuarios a crear una partición al principio de sus unidades específicamente para almacenar el gestor de arranque y los archivos relacionados con el kernel. GRUB, LILO y SYSLINUX son gestores de arranque comunes.
Por convención, esta partición se monta en la jerarquía del sistema de archivos como /boot
. Esto fue posteriormente estandarizado por el Estándar de jerarquía del sistema de archivos (FHS), que ahora requiere que la imagen del kernel de Linux esté ubicada en /
o /boot
, aunque no existe ninguna restricción técnica. haciendo cumplir esto.
Compresión
Tradicionalmente, al crear una imagen de kernel de arranque, el kernel también se comprime usando gzip o, desde Linux 2.6.30, usando LZMA o bzip2, lo que requiere que se incluya un código auxiliar de descompresión muy pequeño en la imagen resultante. El código auxiliar 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. Posteriormente se agregó soporte para la compresión LZO, xz, LZ4 y zstd.
La rutina de descompresión es un factor insignificante en el tiempo de arranque y, antes del desarrollo de bzImage, las limitaciones 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 de archivo de la imagen de arranque no es importante, pero muchas distribuciones populares utilizan vmlinuz.
BzImagen

A medida que el kernel de Linux maduró, el tamaño de los kernels 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 del kernel comprimido es limitado. El formato bzImage (big zImage) se desarrolló para superar esta limitación dividiendo el núcleo en regiones de memoria no contiguas.
BzImage se comprimió usando gzip hasta Linux 2.6.30, que introdujo más algoritmos. Aunque el prefijo bz
puede sugerir que se utiliza la compresión bzip2, este no es el caso. (El paquete bzip2 a menudo se distribuye con herramientas con el prefijo bz
, como bzless
, bzcat
, etc.)
El archivo bzImage tiene un formato específico. Contiene bootsect.o
+ setup.o
+ misc.o
+ piggy.o
concatenados. piggy.o
contiene el archivo vmlinux comprimido con gzip en su sección de datos. El script extract-vmlinux
que se encuentra en scripts/
en las fuentes del kernel descomprime una imagen del kernel. Algunas distribuciones (por ejemplo, Red Hat y clones) pueden venir con un RPM kernel-debuginfo
que contiene el archivo vmlinux
para el RPM del kernel correspondiente, y normalmente se instala en /usr/lib/debug/lib/modules/`uname -r`/vmlinux
o /usr/lib/debug/lib64/modules/`uname -r`/vmlinux
.
Notas y referencias
- ^ "Definición vmlinuz". www.linfo.org. Bellevue Linux. 29 de marzo de 2005. Retrieved 2015-06-21.
- ^ "Sección 3.5.2 — /boot: Archivos estáticos del cargador de arranque". FHS 2.3. 2004-01-29. Retrieved 2014-03-11.
El núcleo del sistema operativo debe estar situado en / o /boot.
- ^ a b Linux 2.6.30, lanzó el 9 de junio de 2009, agregó soporte para comprimir la imagen del núcleo 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 núcleo con LZO [2]
- ^ Linux 2.6.38, lanzado el 14 de marzo de 2011, agregó soporte para comprimir la imagen del núcleo 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 núcleo, initrd e initramfs con zstd [5]
- ^ Yann Droneaud (1999-09-28). "Re: bzImage descompresión". LKML (Lista principal).
El zImage contiene bootsect.o + setup.o + misc.o + piggy.o
Contenido relacionado
Historia de la cámara
Tubo de vacío
Señales de humo