En los sistemas Linux , vmlinux
es un archivo ejecutable vinculado estáticamente que contiene el kernel de Linux en uno de los formatos de archivo de objeto admitidos por Linux, que incluye el formato ejecutable y enlazable (ELF), el formato de archivo de objeto común (COFF) y a.out . El archivo puede ser requerido para el núcleo de depuración , tabla de símbolos generación o otras operaciones, pero debe hacerse de arranque antes de ser utilizado como un núcleo del sistema operativo mediante la adición de un arranque múltiple cabecera, sector de arranque y rutinas de configuración.vmlinux
Etimología
Tradicionalmente, las plataformas UNIX denominaban imagen del núcleo /unix
. Con el desarrollo de la memoria virtual , los núcleos que admitían esta característica recibieron el vm-
prefijo para diferenciarlos. El nombre vmlinux
es una mutación de vmunix , mientras que en vmlinuz
la letra z
al final denota que está comprimido (por ejemplo, gzip ). [1]
Localización
Tradicionalmente, el kernel estaba ubicado en el directorio raíz de la jerarquía del sistema de archivos; sin embargo, como el cargador de arranque debe usar controladores BIOS para acceder al disco duro , las limitaciones en algunos sistemas i386 significaron 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 el cargador de arranque y los archivos relacionados con el kernel. 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
. Más tarde, esto fue estandarizado por el Estándar de jerarquía del sistema de archivos (FHS), que ahora requiere que la imagen del kernel de Linux se ubique en /
o /boot
, aunque no hay ninguna restricción técnica que lo imponga. [2]
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, [3] usando LZMA o bzip2 , lo que requiere que se incluya un stub de descompresión muy pequeño en la imagen resultante. El stub descomprime el código del kernel, en algunos sistemas imprimen puntos en la consola para indicar el progreso y luego continúa el proceso de arranque. Posteriormente se agregó soporte para compresión LZO , [4] xz [5] y LZ4 [6] .
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, en particular i386, eran extremadamente limitantes, lo que hacía que la compresión fuera una necesidad.
En la arquitectura SPARC , el archivo vmlinux se comprime mediante 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 usan vmlinuz .
bzImage
A medida que maduraba el kernel de Linux, el tamaño de los kernels generados por los usuarios crecía 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 al dividir el kernel en regiones de memoria no contiguas . [ cita requerida ]
La bzImage se comprimió usando 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 , este no es el caso. [ Citación necesaria ] (El paquete bzip2 a menudo se distribuye con herramientas con el prefijo bz
, tales como bzless
, bzcat
, etc.)
El archivo bzImage tiene un formato específico. Contiene bootsect.o
+ setup.o
+ misc.o
+ concatenados piggy.o
. [7] piggy.o
contiene el archivo vmlinux comprimido con gzip en su sección de datos. El script que se extract-vmlinux
encuentra scripts/
en las fuentes del kernel descomprime una imagen del kernel. Algunas distribuciones (por ejemplo, Red Hat y clones) pueden venir con un kernel-debuginfo
RPM que contiene el vmlinux
archivo para el RPM correspondiente del kernel, y normalmente se instala bajo /usr/lib/debug/lib/modules/`uname -r`/vmlinux
o /usr/lib/debug/lib64/modules/`uname -r`/vmlinux
.
Ver también
- Kernel de Linux
- Módulo (Linux)
- initrd
- System.map
- Archivo de objeto
notas y referencias
- ^ "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 cargador de arranque". FHS 2.3 . 2004-01-29 . Consultado el 11 de marzo de 2014 .
El kernel del sistema operativo debe estar ubicado en / o / boot.
- ^ a b Linux 2.6.30, lanzado 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]
- ^ Yann Droneaud (28 de septiembre de 1999). "Re: descompresión de bzImage" . LKML (lista de correo).
El zImage contiene bootsect.o + setup.o + misc.o + piggy.o
Otras lecturas
- Alavoor Vasudevan (15 de agosto de 2003). "10. Información de los archivos del kernel". El CÓMO del Kernel de Linux .
- Daniel Pierre Bovet (3 de enero de 2013). "Secciones especiales en binarios de Linux" . LWN.net .
todas las secciones especiales que aparecen en el kernel 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