La spécification Multiboot est une norme ouverte décrivant comment un chargeur de démarrage peut charger un noyau de système d'exploitation x86 . La spécification permet à toute implémentation de chargeur de démarrage conforme de démarrer n'importe quel noyau de système d'exploitation conforme . Ainsi, elle permet à différents systèmes d'exploitation et chargeurs de démarrage de fonctionner ensemble et d'interagir, sans avoir besoin de chargeurs de démarrage spécifiques au système d'exploitation. Par conséquent, elle permet également une coexistence plus facile de différents systèmes d'exploitation sur un seul ordinateur, ce qui est également connu sous le nom de multi-boot .
La spécification a été créée à l'origine en 1995 et développée par la Free Software Foundation . Les micro-noyaux GNU Hurd , VMware ESXi, Xen et L4 doivent tous être démarrés à l'aide de cette méthode. GNU GRUB est l' implémentation de référence utilisée dans le système d'exploitation GNU et d'autres systèmes d'exploitation. En juillet 2019 , la dernière version de la spécification Multiboot est la 0.6.96, définie en 2009. Une deuxième itération incompatible avec la prise en charge UEFI , la spécification Multiboot2 , a été introduite ultérieurement. En avril 2019 , la dernière version de Multiboot2 est la 2.0, définie en 2016.
Aperçu technique
Alors que Multiboot définit un en-tête comme une structure, qui doit être présente dans le fichier image dans son ensemble, dans Multiboot2, les champs ou groupes de champs ont une balise de type, ce qui leur permet d'être omis de l'en-tête Multiboot2.
Dans le fichier image du système d'exploitation, l'en-tête doit se trouver dans les 8192 premiers octets (2 13 ) pour Multiboot et dans les 32768 premiers octets (2 15 ) pour Multiboot2. Le chargeur recherche un nombre magique pour trouver l'en-tête, qui est 0x1BADB002 (« 1 mauvais démarrage ») pour Multiboot et 0xE85250D6 pour Multiboot2.
Dans l'en-tête, entry_addrpointe vers le code où le contrôle est transmis au système d'exploitation. Cela permet différents formats de fichiers exécutables (voir Comparaison des formats de fichiers exécutables ). Si le noyau du système d'exploitation est un fichier ELF ( Executable and Linkable Format ), ce qui est le cas pour le noyau Linux, celui-ci peut être omis pour Multiboot2. Le format ELF est très courant dans le monde open source et possède son propre champ ( e_entry) contenant le point d'entrée.
Avant de passer au point d'entrée du système d'exploitation, le chargeur de démarrage doit fournir une structure d'informations de démarrage pour indiquer au système d'exploitation comment il a quitté le système ; pour Multiboot, il s'agit d'une structure, et pour Multiboot2, chaque champ (groupe) a une balise de type et une taille.