Comprendre le BIOS et l'UEFI
Le BIOS et l'UEFI sont des composants informatiques importants. Ils sont intégrés à la carte mère et aident au chargement des systèmes d'exploitation. Mais... qu'est-ce que le BIOS, qu'est-ce que l'UEFI, comment fonctionnent-ils ?
Table des matières
Introduction
BIOS est un firmware. Les firmwares sont des logiciels de bas niveau livrés avec la carte mère des ordinateurs. Le but du firmware est d'initialiser le matériel des ordinateurs et de charger les systèmes d'exploitation.
Le firmware, la plupart du temps, est fourni avec une interface graphique permettant aux utilisateurs de modifier certains paramètres de la carte mère et l'ordre de démarrage des périphériques pour le chargement du système d'exploitation. Ces paramètres sont stockés dans une mémoire à faible consommation d'énergie appelée CMOS et alimentée par une batterie située sur la carte mère.
De nos jours, les ordinateurs nouvellement fabriqués sont livrés avec UEFI (Unified Extended Firmware Interface) en plus du BIOS. UEFI n'est pas un firmware, mais une extension logicielle qui fonctionne avec le BIOS et apporte des fonctionnalités plus modernes au processus de démarrage.
Contrairement au BIOS, l'UEFI a la capacité de lire depuis des périphériques de stockage de type blocs modernes comme les SSD (Solid State Drive), des partitions comme LVM, RAID... ou des périphériques de stockage de type blocs formatés avec la table de partition GUID (GPT).
BIOS (Basic Input/Ouput System)
- Est situé à l'intérieur de la ROM (Read Only Memory : mémoire en lecture seule) de la carte mère
- Le contenu de la ROM est fixé lors de la fabrication de la carte mère et ne peut pas être modifié
- Le BIOS contient un ensemble de fonctions permettant de :
- détecter les périphériques connectés à la carte mère et leurs caractéristiques. Ex : type de RAM, périphériques de stockage, fréquence du processeur…
- tester et configurer les périphériques détectés (effectué lors de la première phase d'initialisation de l'ordinateur appelée bootstrap ou POST : Power-On Self-Test)
- effectuer un diagnostic afin de vérifier l’intégrité des composants critiques comme les ports E/S, le CPU, la RAM, le clavier…
- Charge les systèmes d'exploitation à partir de MBR (Master Boot Record), et donc, à partir de disques partitionnés au format MBR
- MBR est le 1er secteur d'un disque dur (512 premiers octets) et également un format de partitionnement de disque
- Les disques utilisant le format de partitionnement MBR ne peuvent excéder 2TB
- Le BIOS ne peut donc pas charger les systèmes d'exploitation à partir de disques de plus de 2 To
- La taille du MBR (512 octets) est très petite, donc un binaire complet du système d'exploitation n'y rentrera pas
- Un programme intermédiaire plus petit, appelé le bootloader sera placé dans le MBR à la place, et sera responsable du chargement du système d'exploitation à partir d'une partition du disque. Pour les systèmes d'exploitation Linux, le noyau sera, la plupart du temps, chargé à partir de la partition
/boot. - Le BIOS ne peut pas non plus charger le système d'exploitation à partir de disques SSD (Solid State Drive)
UEFI (Unified Extended Firmware Interface))
- Charge les systèmes d'exploitation à partir d'une partition EFS (EFI File System) de n'importe quelle taille. Un binaire complet du système d'exploitation peut donc être directement placé dans la partition EFS au lieu d'utiliser un chargeur de démarrage (comme lors de l'utilisation du BIOS/MRB pour démarrer un système d'exploitation). La partition EFS doit être formatée en vFAT (Virtual File Allocation Table : table d'allocation de fichiers virtuels)
- Sur les systèmes Linux, la partition EFS est montée dans
/boot/efiet contiendra généralement un autre dossier EFI contenant des répertoires spécifiques au système d'exploitation comme debian, ubuntu, windows... Ci-dessous un exemple d'arborescence du répertoire/boot/efipour un système Debian UEFI :
root@debian:~# ls -R /boot/efi
/boot/efi/:
EFI
/boot/efi/EFI:
debian
/boot/efi/EFI/debian:
BOOTX64.CSV fbx64.efi grub.cfg grubx64.efi mmx64.efi shimx64.efi
- UEFI charge le système d'exploitation à partir de disques ayant GPT (GUID Partition Table) comme format de partitionnement, plus moderne par rapport à MBR
- L'UEFI peut également charger le système d'exploitation à partir de disques MBR, lorsque le mode CSM (Compatibility Support Module : module de support de compatibilité) est utilisé
- La routine shell efibootmgr peut être utilisé pour modifier certains paramètres UEFI du système, comme la définition du disque par défaut à partir duquel démarrer ou la modification de l'ordre de priorité des périphériques de démarrage. Il est capable de le faire pendant que le système d'exploitation est en cours d'exécution en écrivant les données de configuration dans la NVRAM UEFI
- Les données UEFI NVRAM sont exposées au système via le pseudo système de fichiers
/sys/firmware/efi/efivars. - L'UEFI prend en charge le nouveau contrôleur de disques SSD : NVMe (Non-Volatile Memory express) et est donc capable de démarrer les systèmes d'exploitation à partir de disques SSD (contrairement au BIOS)
Que se passe-t-il lors du démarrage d'un ordinateur
Exécution du Power Good
Le bloc d'alimentation s'assure que la tension est correcte et la signale à la carte mère avec le signal PG (Power Good ou PW-OK), qui aura une valeur de tension supérieure à zéro (PG = x Volt, avec x > 0).
La carte mère initialise ensuite le CPU. Dans le cas où le bloc d'alimentation détecte un problème avec la tension d'alimentation, le signal PG envoyé à la carte mère aura la valeur de tension zéro (PG = 0 Volt).
Exécution des ROM d'extensions de périphériques
Certains périphériques nécessitent une initialisation particulière. Ils sont donc livrés avec des exécutables spécifiques à cet effet. Pour initialiser ces périphériques, le BIOS a besoin de l'adresse de la ROM d'extension. L'emplacement de cette adresse dépend du type de périphérique.
Pour les périphériques de type PCI/PCI express, l'adresse se trouve dans les registres de configuration du périphérique. Une fois que le BIOS a obtenu l'adresse de la ROM d'extension, il copie l'adresse en RAM et la ROM est alors exécutée. A la fin de l'exécution, le périphérique est initialisé et le BIOS revient en jeu.
Affichage des configurations à l'écran
Le BIOS envoie à l'écran les informations dont il dispose sur les périphériques connectés à la carte mère. L'utilisateur peut alors mettre à jour certains d'entre eux, comme la fréquence du processeur, l'ordre dans lequel les périphériques de stockage seront scannés pour trouver une zone de boot, etc.
Chargement du système d'exploitation
Le BIOS recherche une zone de boot sur les équipements de stockage connectés à la carte mère (dans l'ordre de priorité défini dans les paramètres du BIOS). La zone de boot est généralement le premier secteur d'un équipement de stockage (les 512 premiers octets) appelé MBR (Master Boot Record).
Contenu du MBR (des derniers octets aux premiers octets)
2 derniers octets
Les 2 derniers octets du MBR : 55AA (hexadécimal). Il s'agit d'un marqueur indiquant au BIOS que le secteur est exécutable.
64 octets suivants
Représente la table des partitions du disque.
La table des partitions nous donne les informations suivantes sur chaque partition du disque :
- l'emplacement physique de la partition (premier secteur, dernier secteur)
- la taille de la partition
- le type de la partition
Dans les 64 octets, 16 octets sont utilisés pour la description de chaque partition du disque. Il ne peut y avoir que 64/16=4 partitions primaires sur des disques de type MBR. En plus des partitions primaires, il existe également des partitions étendues et partitions logiques pour les disques partitionnés au format MBR :
- Une seule partition étendue autorisée
- Les disques MBR peuvent donc avoir : 3 partitions primaires et 1 partition étendue ou 4 partitions primaires
- Les partitions logiques ne peuvent être créées qu'à l'intérieur de la partition étendue
- La table des partitions logiques fait partie du premier secteur (512 octets) de la partition étendue
- Le nombre de partitions logiques à l'intérieur de la partition étendue est illimité, ce qui permet la création de plus de 4 partitions
446 octets suivants
Pour le programme de démarrage (exécutable, routine de démarrage). Une fois que le BIOS sait que le secteur est exécutable grâce au marqueur 0x55AA, il charge le programme de démarrage en mémoire et l'exécute. Le programme de démarrage (chargeur de démarrage de première étape) lance ensuite le chargeur de démarrage de deuxième étape.
Le chargeur de démarrage (Bootloader)
L'exécutable du chargeur de démarrage situé dans le MBR (Master Boot Record) est un chargeur de démarrage de première étape. La taille du MBR est de 512 octets (très petite), donc le chargeur de démarrage de première étape contient juste assez d'informations pour localiser et charger un chargeur de démarrage de deuxième étape.
Le chargeur de démarrage de deuxième étape est plus élégant et offre aux utilisateurs l'accès à un menu qui leur permet de personnaliser la manière de charger les systèmes d'exploitation. GRUB (Grant Unified Bootloader), le chargeur de démarrage le plus couramment utilisé, utilise une étape intermédiaire dans le processus de démarrage (l'étape 1.5).
L'objectif de l'étape 1.5 est de comprendre le système de fichiers sur lequel réside le fichier de configuration au format texte de GRUB, afin de le charger correctement. L'étape 1.5 de GRUB comprend les systèmes de fichiers comme ext2/3/4, fat, minix, reiserfs, xfs... et peut donc charger le fichier de configuration GRUB à partir de ces systèmes de fichiers. Ce fichier de configuration GRUB sera utilisé par le chargeur de démarrage de la deuxième étape, permettant aux utilisateurs de personnaliser la manière de charger les systèmes d'exploitation avec GRUB.