vmlinux

vmlinux
Núcleo Linux: proceso de arranque y descompresión.

vmlinux es un archivo ejecutable enlazado estáticamente y que contiene el núcleo Linux en uno de los formatos ejecutables soportados por Linux, tales como ELF, COFF y a.out. El archivo vmlinux pude utilizarse en una depuración del núcleo, para generar la tabla de símbolos u otras operaciones, pero para usarlo como núcleo del sistema operativo debe ser capaz de ejecutarse e iniciar el computador. Para esto se debe agregar un encabezado de arranque múltiple, un sector de arranque y rutinas de inicialización.

Contenido

Localización

Tradicionalmente, el núcleo se localiza en el directorio raíz del sistema de archivos; sin embargo, algunos sistemas i386 sólo pueden direccionar los primeros 1024 cilindros del disco duro en tiempo de arranque, dado que el cargador de arranque utiliza los controladores del BIOS para acceder al disco duro. Para solventar esta limitación, los distribuidores de Linux animaban a los usuarios a crear una partición al inicio de sus discos duros, específicamente para almacenar el cargador de arranque y los archivos relacionados con el núcleo. GRUB, LILO y SYSLINUX son cargadores comunes.

Por convención, esta partición se monta en el sistema de archivos como /boot. Esto se estandarizó luego en el "Estándar para Sistemas Jerárquicos de Archivos" (FHS por sus siglas en inglés), que ahora requiere que la imagen del núcleo Linux se encuentre en / o en /boot, aunque no existe ninguna restricción técnica que obligue a que esto sea así.

Compresión

Algunas arquitecturas tienen restricciones en el espacio que se puede asignar a la imagen ejecutable del vmlinux por lo que se ha hecho costumbre comprimir este archivo, y para esto es común utilizar el zlib, que requiere una rutina de descompresión pequeña que puede ser incluida en la imagen resultante. En tiempo de ejecución, la rutina descomprime el núcleo (algunos sistemas muestran unos puntos en la pantalla mientras esto ocurre), y luego continúa con el arranque e inicialización del sistema.

En realidad la compresión y descompresión del vmlinux no es un factor necesario para el arranque del sistema. Sin embargo, las restricciones impuestas por algunas arquitecturas, especialmente en plataformas i386, eran bastante limitantes haciendo necesaria la compresión. En la arquitectura SPARC, el vmlinux se comprime utilizando gzip, porque el cargador de arranque SILO descomprime en forma natural las imágenes gzip.

El nombre del archivo de la imagen generada del vmlinux no es en realidad importante, pero por convención se llama vmlinuz o zImage.

bzImage

Anatomía de un bzImage.

Conforme el núcleo Linux fue madurando, los núcleos generados por los usuarios crecieron de tamaño, más allá de los límites impuestos por ciertas arquitecturas. Para resolver este problema se creó el archivo bzImage con el que el núcleo se divide y almacena en regiones no contiguas de memoria.

Existe cierta confusión con el nombre de este archivo, pues muchas personas consideran que el prefijo bz- significa que la compresión bzip2 se utilizó para comprimir el archivo (el paquete bzip2 algunas veces se distribuye con herramientas que tienen el prefijo bz- tales como bzless, bzcat), pero en este caso, el bz proviene de big zImage.

El archivo bzImage contiene la concatenación del: bootsect.o + setup.o + misc.o + piggy.o. El archivo piggy.o contiene el vmlinux comprimido con gzip (en este punto el vmlinux suele llamarse vmlinuz o zImage) en su sección de datos (ELF por sus siglas en inglés). Todos los archivos fuente se encuentran en arch/i386/boot/.

No existe una herramienta específica para desempacar el archivo bzImage, pero existe un procedimiento llamado extract-ikconfig, con este se descomprime la imagen y se extraen algunas directivas para el administrador de paquetes RPM. Este procedimiento se podría modificar para extraer la imagen directamente. Típicamente se instala bajo /usr/lib/debug/lib/modules/`uname -r`/vmlinux.

Vea también esta entrada en la lista de correo del "Linux Kernel" y este artículo ambos están en inglés.


Etimología

Tradicionalmente, las plataformas UNIX llaman a la imagen del núcleo /unix. Con el desarrollo de la memoria virtual se comenzó a utilizar el prefijo vm- para diferenciar los núcleos que soportan esta característica. El nombre vmlinux es una derivación de vmunix, mientras que en vmlinuz la letra z al final denota que el archivo está comprimido.

Formato ejecutable

Este es el encabezado del ELF de una imagen ejecutable de un núcleo i386 2.6.7.

$ readelf -h vmlinux
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Intel 80386
  Version:                           0x1
  Entry point address:               0xc019d000
  Start of program headers:          52 (bytes into file)
  Start of section headers:          3135092 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         3
  Size of section headers:           40 (bytes)
  Number of section headers:         33
  Section header string table index: 30


Véase también

Enlaces externos


Wikimedia foundation. 2010.

Игры ⚽ Поможем сделать НИР

Mira otros diccionarios:

  • Vmlinux — Saltar a navegación, búsqueda Núcleo Linux: proceso de arranque y descompresión. vmlinux es un archivo ejecutable enlazado estáticamente y que contiene el núcleo Linux en uno de los formatos ejecutables soportados por Linux, tales como ELF, COFF… …   Wikipedia Español

  • Vmlinux — On Linux systems, vmlinux is a statically linked executable file that contains the Linux kernel in one of the executable file formats supported by Linux, including ELF, COFF and a.out. The vmlinux file might be required for kernel debugging,… …   Wikipedia

  • Vladimir Mayakovsky — Mayakovsky redirects here. For other uses, see Mayakovsky (disambiguation). Vladimir Mayakovsky Born July 19, 1893(1893 07 19) Baghdati, Russian Empire …   Wikipedia

  • System.map — System.map  файл, внутри которого находится символьная таблица адресов функций и процедур, используемых ядром операционной системы Linux. В этой таблице перечислены имена переменных и функций и их адреса в памяти компьютера. Эта таблица… …   Википедия

  • Ian Murdock — Born 28 April 1973 (1973 04 28) (age 38) Konstanz, West Germany Residence Indiana, USA …   Wikipedia

  • Linux distribution — A Linux distribution is a member of the family of Unix like operating systems built on top of the Linux kernel. Such distributions (often called distros for short) are operating systems including a large collection of software applications such… …   Wikipedia

  • Linux kernel — Linux Linux kernel 3.0.0 booting Company / developer Linus Torvalds and thousands …   Wikipedia

  • Linux From Scratch — Company / developer Gerard Beekmans et al. OS family Unix like Working state Current Source model Open source / Free Software Initial release …   Wikipedia

  • RPM Package Manager — (RPM) Original author(s) Red Hat Developer(s) Community[1] Stable release 4.9.0 / March 2, 2011; 8 months ago ( …   Wikipedia

  • Cross compiler — A cross compiler is a compiler capable of creating executable code for a platform other than the one on which the compiler is run. Cross compiler tools are used to generate executables for embedded system or multiple platforms. It is used to… …   Wikipedia

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”