
L'interface UEFI ( Firmware Interface une spécification de l' architecture micrologiciel d'une plateforme informatique . Lors de la mise sous tension d' ordinateur , l'implémentation UEFI s'exécute généralement en premier, avant le système d'exploitation ou tout autre programme. Parmi les exemples, citons AMI Aptio , Phoenix SecureCore , TianoCore EDK II et InsydeH2O .
L'UEFI remplace le BIOS présent dans la ROM de démarrage de tous les ordinateurs personnels compatibles IBM PC [ tout en assurant une rétrocompatibilité avec le BIOS grâce au démarrage CSM . Contrairement au BIOS, initialement développé par IBM comme une architecture propriétaire, la spécification UEFI est gérée par un consortium industriel. La plupart des implémentations de firmware de production pour les deux restent propriétaires.
Intel a développé la spécification originale de l'interface EFI ( Extensible Firmware Interface ). La dernière version Intel d'EFI était la 1.10, sortie en 2005. Les versions suivantes ont été développées sous l'appellation UEFI par le forum UEFI .
L'UEFI est indépendant de la plateforme et du langage de programmation, mais le C est utilisé pour l'implémentation de référence TianoCore EDKII.
Histoire
L'idée d'EFI est née lors du développement initial des premiers systèmes Intel-HP Itanium au milieu des années 1990. Les limitations du BIOS étaient devenues trop contraignantes pour les grandes plateformes de serveurs auxquelles Itanium était destiné. Les efforts pour remédier à ces problèmes ont débuté en 1998 sous le nom d' Intel Boot Initiative . Ce projet a ensuite été renommé Extensible Firmware Interface (EFI).
La première implémentation UEFI open-source , Tiano, a été publiée par Intel en 2004. Tiano a depuis été remplacé par EDK et EDK II et est maintenant maintenu par la communauté TianoCore.
En juillet 2005, Intel a cessé le développement de la spécification EFI à la version 1.10 et l'a cédée à l' Unified EFI Forum , qui l'a développée sous le nom d' Unified Extensible Firmware Interface (UEFI). La spécification EFI originale reste la propriété d'Intel, qui fournit exclusivement des licences pour les produits basés sur EFI, tandis que la spécification UEFI appartient à l'UEFI Forum.
La version 2.0 de la spécification UEFI a été publiée le 31 janvier 2006. Elle a ajouté la cryptographie et la sécurité .
La version 2.1 de la spécification UEFI a été publiée le 7 janvier 2007. Elle a ajouté l'authentification réseau et l' architecture d'interface utilisateur (« Infrastructure d'interface humaine » dans UEFI).
La version 2.3.1 de la spécification UEFI a été publiée le 6 avril 2011. Elle a ajouté le démarrage sécurisé ainsi que la prise en charge de l'architecture ARM .
En octobre 2018, Arm a lancé Arm ServerReady, un programme de certification de conformité visant à garantir le bon fonctionnement des systèmes d'exploitation et des hyperviseurs standard sur les serveurs Arm. Ce programme exige que le firmware système soit conforme aux exigences de démarrage de base du serveur (SBBR). Les SBBR requièrent la conformité aux protocoles UEFI, ACPI et SMBIOS . En octobre 2020, Arm a annoncé l'extension du programme au marché de l' edge computing et de l'IoT . Le nouveau nom du programme est Arm SystemReady . Arm SystemReady a défini la spécification des exigences de démarrage de base ( BBR ), qui propose actuellement trois configurations, dont deux sont liées à l'UEFI : 1) SBBR : qui exige la conformité aux protocoles UEFI, ACPI et SMBIOS et convient aux environnements d'exploitation d'entreprise tels que Windows, Red Hat Enterprise Linux et VMware ESXi ; et 2) EBBR : qui exige la conformité à un ensemble d'interfaces UEFI, comme défini dans les exigences de démarrage de base embarquées ( EBBR ), et convient aux environnements embarqués tels que Yocto. De nombreuses distributions Linux et BSD prennent en charge les deux configurations.
En décembre 2018, Microsoft a annoncé le projet Mu, une version dérivée de TianoCore EDK II utilisée dans les produits Microsoft Surface et Hyper-V . Ce projet intègre un modèle de distribution de microprogramme basé sur les services.
La dernière spécification UEFI, version 2.11, a été publiée en décembre 2024.
Compatibilité
Compatibilité du processeur
L'UEFI prend en charge les architectures de processeur 32 bits ou supérieures. Toutefois, seuls les processeurs en mode little-endian sont pris en charge. La spécification UEFI, version 2.11, contient une documentation officielle pour les architectures de processeur suivantes :
- x86 ( IA-32 , x86-64 )
- Itanium ( IA-64 )
- ARM ( AArch32 , AArch64 )
- RISC-V (32 bits, 64 bits, 128 bits)
- LoongArch (32 bits, 64 bits)
La prise en charge non officielle d'UEFI est en cours de développement pour POWERPC64 grâce à l'implémentation de TianoCore EDK II sur OPAL , la couche d'abstraction OpenPOWER, fonctionnant en mode little-endian . Pour MIPS , il existe également un projet non officiel, basé sur l'EDK original . Cependant, ces deux projets ont été abandonnés respectivement en novembre 2016 et septembre 2015.
L'UEFI n'autorise l'exécution que d'applications UEFI compatibles avec la largeur de bits du firmware, même si le processeur prend en charge des largeurs de bits inférieures ou supérieures. Par exemple, un firmware UEFI 64 bits ne peut exécuter que des applications UEFI 64 bits, même si le processeur fonctionne en mode 32 bits. Certains ordinateurs d'entrée de gamme ont été livrés avec un firmware UEFI 32 bits exécuté sur des processeurs 64 bits. Une fois qu'une application UEFI a terminé les services de démarrage et obtenu le contrôle total du système, il devient possible de modifier le mode d'exécution du processeur. Cependant, l'appel des services d'exécution nécessite un bref retour au mode processeur d'origine, car les services d'exécution ne peuvent être appelés que depuis le même mode processeur que celui utilisé par le firmware.
Depuis la version 3.15, le noyau Linux prend en charge le démarrage de noyaux 64 bits sur des implémentations de firmware UEFI 32 bits avec des processeurs x86-64, ce qui exige que le chargeur de démarrage UEFI prenne en charge le protocole de transfert EFI. Ce protocole permet aux chargeurs de démarrage UEFI de déléguer l'initialisation UEFI au stub de démarrage EFI du noyau, de sorte que seul ce dernier effectue l'initialisation UEFI.
Compatibilité des périphériques de disque
Linux
Les systèmes UEFI peuvent accéder aux disques GPT et démarrer directement à partir de ceux-ci, ce qui permet à Linux d'utiliser les méthodes de démarrage UEFI. Le démarrage de Linux à partir de disques GPT sur les systèmes UEFI implique la création d'une partition système EFI (ESP), qui contient les applications UEFI telles que les chargeurs de démarrage, les noyaux du système d'exploitation et les logiciels utilitaires. Cette configuration est généralement appelée UEFI-GPT , et il est recommandé que l'ESP ait une taille minimale de 512 Mo et soit formatée avec le système de fichiers FAT32 pour une compatibilité maximale.
Pour assurer la rétrocompatibilité , certaines implémentations UEFI prennent également en charge le démarrage à partir de disques partitionnés MBR via le module de support de compatibilité (CSM), qui garantit la compatibilité avec les anciens BIOS. Dans ce cas, le démarrage de Linux sur les systèmes UEFI est identique à celui sur les systèmes BIOS traditionnels.
Microsoft Windows
Windows 11 , les versions 64 bits de Windows Vista SP1/SP2 et 7 , ainsi que les versions 32 bits et 64 bits de Windows 8 , 8.1 et 10 peuvent démarrer à partir d'un disque GPT d'une capacité supérieure à 2 To .
Caractéristiques
Services
EFI définit deux types de services : les services de démarrage et les services d’exécution . Les services de démarrage sont disponibles uniquement lorsque le firmware contrôle la plateforme (c’est-à-dire avant l’ ExitBootServices()appel système) et comprennent les consoles texte et graphique sur divers périphériques, ainsi que les services de bus, de blocs et de fichiers. Les services d’exécution restent accessibles pendant le fonctionnement du système d’exploitation ; ils incluent des services tels que la date, l’heure et l’accès à la NVRAM .
- Services du protocole de sortie graphique (GOP)
- Le protocole de sortie graphique (GOP) fournit des services d'exécution ; voir également la section « Fonctionnalités graphiques » ci-dessous. Le système d'exploitation est autorisé à écrire directement dans le tampon d'image et le flux de bits fournis par le GOP en mode d'exécution.
- Services de mappage de mémoire UEFI
- Services SMM
- Services ACPI
- Services SMBIOS
- Services Devicetree (pour processeurs RISC)
- Services variables
- Les variables UEFI permettent de stocker des données, notamment des données non volatiles. Certaines variables UEFI sont partagées entre le microprogramme de la plateforme et le système d'exploitation. Les espaces de noms de variables sont identifiés par des GUID, et les variables sont des paires clé/valeur. Par exemple, les variables UEFI peuvent être utilisées pour conserver les messages d'erreur dans la NVRAM après un plantage, afin que le système d'exploitation puisse les récupérer après un redémarrage.
- Services horaires
- L'UEFI fournit des services de synchronisation temporelle. Ces services incluent la prise en charge des fuseaux horaires et de l'heure d'été, permettant ainsi de régler l' horloge matérielle temps réel sur l'heure locale ou UTC. Sur les machines utilisant une horloge temps réel PC-AT, l'horloge matérielle doit par défaut être réglée sur l'heure locale pour assurer la compatibilité avec Windows basé sur le BIOS, sauf si vous utilisez des versions récentes et qu'une entrée du registre Windows est configurée pour indiquer l'utilisation de l'UTC.
Applications
L'UEFI exécute des programmes indépendants, appelés applications UEFI, stockés sous forme de fichiers sur la partition système EFI. Ces applications peuvent être lancées via l'interface UEFI Shell, le gestionnaire de démarrage du firmware ou d'autres applications UEFI, et peuvent être développées indépendamment du fabricant d'origine (OEM).
Un chargeur d'amorçage de système d'exploitation, tel que GRUB , rEFInd , systemd-boot ou le Gestionnaire de démarrage Windows , est un type d'application UEFI. Il charge certains fichiers du système d'exploitation en mémoire et les exécute. De plus, un chargeur d'amorçage peut fournir une interface utilisateur permettant de sélectionner une autre application UEFI à exécuter. Les utilitaires comme UEFI Shell sont également des applications UEFI.
Protocoles
EFI définit les protocoles comme un ensemble d'interfaces logicielles utilisées pour la communication entre deux modules binaires. Tous les pilotes EFI doivent fournir des services à d'autres via ces protocoles. Les protocoles EFI sont similaires aux appels d'interruption du BIOS .
Pilotes de périphériques
Outre les pilotes de périphériques spécifiques à l'architecture de jeu d'instructions standard ( ISA), EFI fournit un pilote de périphérique indépendant de l'ISA , stocké en mémoire non volatile sous forme de bytecode EFI ( EBC) . Le microprogramme système dispose d'un interpréteur pour les images EBC. En ce sens, EBC est analogue à Open Firmware , le microprogramme indépendant de l'ISA utilisé notamment dans les ordinateurs Apple Macintosh et Sun Microsystems SPARC basés sur PowerPC .
Certains pilotes EFI spécifiques à une architecture (hors code octet EFI) pour certains types de périphériques peuvent disposer d'interfaces utilisables par le système d'exploitation. Cela permet à ce dernier de s'appuyer sur EFI pour que les pilotes assurent les fonctions graphiques et réseau de base avant, et si, les pilotes spécifiques au système d'exploitation sont chargés.
Dans d'autres cas, le pilote EFI peut être un pilote de système de fichiers permettant le démarrage à partir d'autres types de volumes de disque. On peut citer comme exemples les pilotes efifs pour 37 systèmes de fichiers (basés sur le code GRUB2 ), utilisés par Rufus pour le chargement en chaîne de partitions ESP NTFS.
Fonctionnalités graphiques
La spécification EFI 1.0 définissait un protocole UGA (Universal Graphic Adapter) comme moyen de prendre en charge les fonctionnalités graphiques. UEFI n'incluait pas l'UGA et l'a remplacé par le GOP (Graphics Output Protocol) .
L'UEFI 2.1 a défini une « Infrastructure d'Interface Humaine » (IIU) pour gérer les entrées utilisateur, les chaînes de caractères localisées, les polices et les formulaires (au sens HTML ). Ces éléments permettent aux fabricants d'équipement d'origine (OEM) ou aux fournisseurs de BIOS indépendants (IBV) de concevoir des interfaces graphiques pour la configuration avant démarrage. L'UEFI utilise par défaut l'UTF-16 pour encoder les chaînes de caractères ; depuis au moins la version 2.4, il autorise l'utilisation de l'ASCII pour encoder uniquement les chaînes de caractères ASCII.
La plupart des premières implémentations de firmware UEFI étaient basées sur la console. Aujourd'hui, de nombreuses implémentations de firmware UEFI sont basées sur une interface graphique.




