Boot - YrenWu/Kernel-Bidouilles GitHub Wiki
La séquence de boot d'un système d'exploitation ou amorçage est l'étape au démarrage de l'ordinateur avant transfert de l'exécution au noyau. Le flot d'exécution va passer par une série de routines afin de tester et d'initialiser les composants de la carte mère, d'initialiser les structures nécessaires au bon fonctionnement de l'OS (mémoire, interruptions...), le but final est le lancement du système d'exploitation.
La séquence des routines exécutées est la suivante :
- Mise sous tension de la machine
- BIOS
- Bootloader
- Système d'exploitation
Sur un disque dur le premier secteur est le MBR, le bios le charge en mémoire et saute à sa première instruction. La partie 1 de grub (bootloader) est installé dans le MBR. Grub est composé de deux partie :
- stage 1
- stage 1.5 ou 2 Stage 1 charge stage 2, Stage 2 charge l'OS
Définitions
Master Boot Record : premier secteur du disque dur, sa taille est de 512 octets : Il commence par un code exécutable d'environ 300 octets chargée du démarrage. Environ 100 octets destinés à l'affichage des messages d'erreurs. 4 octets de signature du disque. 64 octets constituant la table des partitions. Les 2 derniers octets sont 0x55AA « marque de secteur exécutable ». Ils sont nécessaires au déroulement de la suite des opérations chargées de démarrer : c'est une sorte de signal pour charger et exécuter le code d'amorçage (0x7C00).
Table des partitions : dans le MBR, elle donne des infos sur les partitions (adresses de démarrage, taille ...) Le code exécutable d'un MBR standard cherche sur la table des partitions une partition active, puis, si une telle partition existe, ce code charge le secteur de boot de cette partition => donne la main au noyau
Power On Self Test : initialisation et test du processeur, de la mémoire et des périphériques au démarrage (au début du BIOS).
BIOS : programme minimaliste stocké sur une puce de la carte mère (read-only) Il est chargé automatiquement par le PC et dont l'un des rôles est de charger un véritable système d'exploitation en essayant de trouver un secteur de boot valide.
Secteur de boot ou chargeur d'amorçage (bootloader) : routine située sur le premier secteur d'une unité de stockage. Le MBR ou Master Boot Record est le nom donné au secteur du boot d'un disque dur.
Modes d'exécution du processeur
Un microprocesseur possède deux modes d'exécution (sur une architecture x86-64). Le mode réel ou les adresses mémoires sont sur 16 bits, est utilisé au démarrage de l'ordinateur (lors du BIOS notamment). Le passage au mode protégé étends les adresses à 32 bit (Legacy Mode) ou 64 bits (Long Mode).
Le passage au mode protégé est nécessaire pour pouvoir segmenter et paginer la mémoire ou pour protéger la mémoire en lui attribuant des niveaux de privilèges (ring). Les rings ou niveaux de prvilèges sont au nombre de 4 sur une architecture x86-64 ring 0 étant le niveau le plus élevé, ring 3 le plus bas. Ces deux niveaux de privilèges sont les plus communément utilisés.
Dans ce projet GRUB permet de démarrarer le noyau après exécution des routines du BIOS et se charge du passage en mode protégé.
GRUB est conforme au standar multiboot (el torito) qui a pour but d'uniformiser le processus de boot des systèmes d'exploitations.
Standard Multiboot
- noyau executable en 32 bits
- inclusion du header multiboot au début du noyau
Le noyau doit donc être assemblé, compilé et linké et lancé dans qemu ou bochs dans le cas présent.