Quel est le problème avec l’UEFI ?

Il semble qu’il y ait deux camps, le petit groupe de personnes qui se soucient de l’UEFI et tous les autres qui ne le remarquent pas ou ne s’en soucient pas tant que leur ordinateur fonctionne. Parlons donc de ce qu’est l’UEFI, comment il est né, à quoi il convient et pourquoi vous devriez (ou ne devriez pas) vous en soucier.

Qu’est-ce que l’UEFI ?

UEFI signifie Unified Extensible Firmware Interface, une norme détenue par une organisation connue sous le nom de United EFI Forum. Intel a sorti EFI (Extensible Firmware Interface) et a ensuite rendu la spécification publique sous le nom d’UEFI. En tant que spécification, les détails de mise en œuvre changent entre les fournisseurs et les fabricants, mais l’objectif est de présenter la structure standard et compréhensible d’un chargeur de démarrage de système d’exploitation. Cela rend beaucoup plus facile l’écriture d’un système d’exploitation car vous n’avez plus à vous soucier de toutes les tâches compliquées liées au démarrage du chipset.

Plusieurs IBV (Independent Bios Vendors) proposent leurs implémentations de l’UEFI que les OEM qui produisent des cartes mères peuvent autoriser et utiliser dans leurs produits. Quelques exemples seraient AMI, Phoenix et InSyde. Vous avez probablement vu leur logo ou simplement le texte de leur nom clignoter brièvement à l’écran avant que le système d’exploitation de votre choix ne démarre correctement.

Parlons de la façon dont UEFI démarre. Généralement, il y a quelques phases différentes. Nous disons généralement qu’il existe de nombreuses implémentations et que beaucoup d’entre elles font des choses hors spécifications. Il y a trois phases générales : Sécurité (SEC), initialisation pré-EFI (PEI) et environnement d’exécution de disque (DXE). Chacun est un mini système d’exploitation. Parce qu’Intel est celui qui a lancé EFI et l’a ensuite transformé en UEFI, une grande partie de la conception est basée sur le démarrage des processeurs Intel. D’autres plates-formes comme ARM pourraient ne pas faire grand-chose dans la phase SEC ou PEI.

Dans un système multicœur, tous les processeurs se précipitent pour obtenir un sémaphore ou lire EAX, et l'un d'eux est désigné comme le BSP (processeur d'amorçage).  Les perdants s'arrêtent tous jusqu'à ce que le BSP les démarreLe processus de démarrage des processeurs X86 est un peu étrange. Ils démarrent en mode réel (bien que la plupart des processeurs de nos jours soient techniquement irréels), avec un espace d’adressage de 20 bits (1 Mo de mémoire adressable) pour des raisons de compatibilité descendante. Au fur et à mesure que le processeur continue de démarrer, il passe en mode protégé puis enfin en mode long. Dans un système multicœur, tous les processeurs se précipitent pour obtenir un sémaphore ou lire EAX, et l’un d’eux est désigné comme le BSP (processeur d’amorçage). Les perdants s’arrêtent tous jusqu’à ce que le BSP les démarre via un IPI (inter-processor interrupt). Normalement, il y a une puce flash SPI intégrée avec un micrologiciel mappé à la fin de la région physique de 32 bits de la mémoire. Le moteur de gestion Intel (ME) ou le processeur de sécurité de la plate-forme AMD (PSP) effectue la majeure partie de la phase SEC, comme le vidage du cache et le démarrage des processeurs.

Une fois les processeurs démarrés, PEI a officiellement commencé. Sur les systèmes Intel, il n’y a pas de RAM système dans la plupart des PEI. En effet, la mémoire doit être entraînée et les liens initialisés avant que le processeur ne puisse les utiliser. La poussée incessante pour une vitesse de plus en plus élevée de la RAM signifie que la RAM doit être testée, calibrée et configurée à chaque démarrage, car les différentes clés de RAM ont d’autres paramètres. De nombreux systèmes mettent en cache ces paramètres pour des temps de démarrage plus rapides, mais ils doivent souvent être invalidés et recyclés à mesure que la RAM vieillit. La PSP gère l’apprentissage de la mémoire et le chargement de l’UEFI sur certains systèmes AMD avant que le processeur x86 principal ne soit retiré de la réinitialisation. Pour les systèmes Intel, ils utilisent une astuce appelée XIP (exécuter sur place) qui transforme les différents caches en RAM temporaire. Il n’y a qu’une petite pile, une petite quantité d’espace de tas et aucune variable statique pour PEI. De nombreuses plates-formes de serveurs Intel s’appuient sur le contrôleur de gestion de carte (BMC) pour former la mémoire, car la formation de grandes quantités de mémoire prend très longtemps.

Après avoir initialisé la RAM et transféré le contenu du cache temporaire, nous passons à DXE. La phase DXE fournit deux types de services : le démarrage et l’exécution. Les services d’exécution sont destinés à être consommés par un système d’exploitation, des services tels que des variables non volatiles. Les services de démarrage sont détruits une fois que ExitBootServices est appelé (généralement par le chargeur du système d’exploitation), mais ce sont des services tels que la saisie au clavier et les pilotes graphiques. BDS (sélection du périphérique de démarrage) s’exécute dans DXE et permet au système de déterminer le lecteur à démarrer (disque dur, USB, etc.).

Cela a été une vue d’ensemble très dense et spécifique à x86. De nombreuses architectures telles que ARM évitent UEFI pour quelque chose comme coreboot, linuxboot ou LK, où il démarre un petit noyau Linux qui est ensuite kexec dans un noyau beaucoup plus grand. Cependant, de nombreuses plates-formes ARM peuvent également tirer parti de l’UEFI. Seul le temps nous dira dans quelle direction évolue l’industrie.

Comment c’est arrivé

En 2005, l’UEFI a entièrement remplacé l’EFI (Extensible Firmware Interface), le standard qu’Intel avait proposé quelques années auparavant. EFI a emprunté beaucoup de choses à Windows de cette période, les formats d’image PECOFF et UEFI, à son tour, a emprunté les pratiques d’EFI. Avant EFI, il y avait le bon vieux BIOS (Basic Input Output System). Le nom provient des systèmes IBM CP/M de 1975. À cette époque, le BIOS était un moyen pour le système de démarrer et de fournir une interface quelque peu uniforme pour les applications en fournissant des appels d’interruption BIOS. Les appels permettaient à un programme d’accéder aux entrées et sorties telles que les ports série, le RTC et le bus PCI. Phoenix et d’autres ont procédé à la rétro-ingénierie de l’interface propriétaire créée par IBM pour fabriquer des machines compatibles IBM, ce qui a finalement abouti à quelque chose de proche d’un standard.

Est-ce mieux que le BIOS ?

La plus grande plainte avec UEFI est qu'il s'agit d'une boîte noire fermée avec un accès inimaginable à votre ordinateur et qui reste résident après le démarrage de l'ordinateur.Oui et non, selon votre point de vue. De nombreux fournisseurs de systèmes d’exploitation aiment UEFI car ils se facilitent généralement la vie car les services fournis permettent de donner facilement une expérience de démarrage homogène. La communauté Linux, de manière générale, est au mieux agnostique et au pire hostile à l’UEFI. L’interface du BIOS pousse 45 ans au moment de l’écriture et est considérée comme un héritage dans tous les sens du terme. Un autre point dans le coin de l’UEFI est qu’il permet de sélectionner différents périphériques de démarrage et de mettre à jour le micrologiciel sur votre machine. UEFI utilise GUID Partition Table (GPT) sur Master Boot Record (MBR) – considéré comme un plus car MBR est quelque peu rigide. De nombreuses plates-formes livrées aujourd’hui sont basées sur le projet open source EDK2 de TianoCore, une implémentation d’UEFI qui prend en charge X86, ARM et RISCV.

La plus grande plainte avec UEFI est qu’il s’agit d’une boîte noire fermée avec un accès inimaginable à votre ordinateur et qui reste résident après le démarrage de l’ordinateur. Le BIOS est attrayant car l’interface est bien connue et généralement non résidente. L’UEFI peut être mis à jour plus facilement, mais a également un besoin beaucoup plus vital de mises à jour. Une mise à jour UEFI peut entièrement bloquer votre système. Il ne démarre pas, et en raison des fusibles grillés sur l’appareil, il est presque physiquement impossible de le réparer, même pour le fabricant. Des quantités importantes de tests sont effectuées dans ces mises à jour, mais la plupart hésitent à pousser de nombreuses mises à jour en raison de la quantité de travail requise.

Pourquoi vous devriez ou ne devriez pas vous en soucier

En fin de compte, vous vous souciez de savoir si vous pouvez utiliser votre ordinateur pour les choses qui sont importantes pour vous. Qu’il s’agisse de jouer à un jeu, d’écrire un e-mail ou de créer un nouvel ordinateur, cela n’a pas d’importance tant que l’ordinateur fait ce que vous voulez. Et le démarrage n’est qu’une étape souvent oubliée pour y arriver. Si vous vous souciez de connaître chaque morceau de code exécuté par votre machine, vous devez vous attacher pour un long trajet. Il existe des sociétés telles que Librem qui se donnent beaucoup de mal pour s’assurer que des problèmes délicats comme l’initialisation de la mémoire s’exécutent dans des blobs non propriétaires. Vous pouvez toujours modifier l’UEFI, [Hales] étant un excellent exemple de peaufiner le BIOS d’un ordinateur portable à l’ancienne. Les outils open source pour inspecter et comprendre ce qui se passe sous le capot s’améliorent.

En fin de compte, c’est à vous de décider si vous vous souciez du processus de démarrage de votre appareil.