La especificación Multiboot es un estándar abierto que describe cómo un gestor de arranque puede cargar un núcleo de sistema operativo x86 . [1] [2] La especificación permite que cualquier implementación de gestor de arranque compatible arranque cualquier núcleo de sistema operativo compatible . Por lo tanto, permite que diferentes sistemas operativos y gestores de arranque trabajen juntos e interoperen, sin la necesidad de gestores de arranque específicos del sistema operativo. Como resultado, también permite una coexistencia más sencilla de diferentes sistemas operativos en una sola computadora, lo que también se conoce como arranque múltiple .
La especificación fue creada originalmente en 1995 y desarrollada por la Free Software Foundation . GNU Hurd , VMware ESXi, Xen y los microkernels L4 necesitan ser arrancados usando este método. GNU GRUB es la implementación de referencia utilizada en el sistema operativo GNU y otros sistemas operativos. [3] A julio de 2019 , la última versión de la especificación Multiboot es 0.6.96, definida en 2009. [2] Posteriormente se introdujo una segunda iteración incompatible con el soporte UEFI , la especificación Multiboot2 . A abril de 2019 , la última versión de Multiboot2 es 2.0, definida en 2016. [4][actualizar][actualizar]
Mientras que Multiboot define un encabezado como una estructura, que debe estar presente en el archivo de imagen como un todo, en Multiboot2, los campos o grupos de campos tienen una etiqueta de tipo, que permite omitirlos del encabezado de Multiboot2.
Dentro del archivo de imagen del SO, el encabezado debe estar en los primeros 8192 (2 13 ) bytes para Multiboot y 32768 (2 15 ) bytes para Multiboot2. El cargador busca un número mágico para encontrar el encabezado, que es 0x1BADB002 ("1 arranque incorrecto") para Multiboot [5] y 0xE85250D6 para Multiboot2.
En el encabezado, entry_addr
apunta al código donde se entrega el control al SO. Esto permite diferentes formatos de archivos ejecutables (consulte Comparación de formatos de archivos ejecutables ). Si el núcleo del SO es un archivo ELF ( Executable and Linkable Format ), que es el caso del núcleo Linux, esto se puede omitir para Multiboot2. El formato ELF es muy común en el mundo del código abierto y tiene su propio campo ( e_entry
) que contiene el punto de entrada.
Antes de saltar al punto de entrada del sistema operativo, el cargador de arranque debe proporcionar una estructura de información de arranque para indicar al sistema operativo cómo salió del sistema; para Multiboot, esto es una estructura, y para Multiboot2, cada campo (grupo) tiene una etiqueta de tipo y un tamaño.