EFISTUB (Français)

État de la traduction:
Cet article est la version francophone de
EFISTUB
. Date de la dernière traduction: 2022-10-03. Vous pouvez aider à synchroniser la traduction s'il y a eu des
changements
dans la version anglaise.
Related articles
Arch boot process (Français)
Unified Extensible Firmware Interface
Le noyau Linux prend en charge le démarrage EFISTUB qui permet aux microprogrammes
EFI
de charger le noyau comme un exécutable EFI. L'option est activée par défaut sur les noyaux Arch Linux, ou si l'on compile le noyau, on peut l'activer en définissant
CONFIG_EFI_STUB=y
dans la configuration du noyau. Consultez
The EFI Boot Stub
pour plus d'informations.
Avec EFISTUB, un noyau peut être démarré directement par une carte mère UEFI ou indirectement en utilisant un
chargeur d'amorçage
. L'utilisation d'un chargeur d'amorçage est recommandée si vous avez plusieurs paires noyau/initramfs et que le menu de démarrage UEFI de votre carte mère n'est pas facile à utiliser.
Préparation d'EFISTUB
Tout d'abord, vous devez créer une
partition système EFI
et choisir son mode de montage. Consultez
EFI system partition (Français)#Monter la partition
pour connaître toutes les options de montage ESP disponibles.
Astuce
pacman
mettra directement à jour le noyau que le firmware EFI lira si vous montez l'ESP sur
/boot
.
Vous pouvez garder le noyau et initramfs hors de l'ESP si vous utilisez un gestionnaire de démarrage qui a un pilote pour le système de fichiers de la partition où ils résident, par exemple
rEFInd
.
Démarrage de EFISTUB
Astuce
Il existe plusieurs gestionnaires de démarrage UEFI qui peuvent fournir des options supplémentaires ou simplifier le processus de démarrage UEFI - en particulier si vous expérimentez avec les
paramètres du noyau
ou si vous avez plusieurs noyaux/systèmes d'exploitation. Consultez
Arch boot process (Français)#Chargeur d'amorçage
pour plus d'informations.
Note
Le chemin d'accès à l'initramfs des noyau Linux EFISTUB doit être relatif à la racine de la partition système EFI et utiliser des antislashes (conformément aux normes EFI). Par exemple, si l'initramfs est situé dans
esp
/EFI/arch/initramfs-linux.img
, la ligne formatée UEFI correspondante doit être
initrd=\EFI\arch\initramfs-linux.img
. Dans les exemples suivants, nous supposerons que tout est sous
esp
/
.
Utilisation directe de l'UEFI
UEFI est conçu pour supprimer le besoin d'un chargeur d'amorçage intermédiaire tel que
GRUB
. Si votre carte mère dispose d'une bonne implémentation de l'UEFI, il est possible d'intégrer les paramètres du noyau dans une entrée d'amorçage UEFI et de permettre à la carte mère d'amorcer directement Arch. Vous pouvez utiliser
efibootmgr
ou UEFI Shell v2 pour modifier les entrées de démarrage de votre carte mère.
Note
Les implémentations UEFI obsolètes peuvent présenter des problèmes de compatibilité avec le noyau Linux. S'il existe une version plus récente de votre UEFI avec des corrections de bogues, envisagez de la flasher avec l'outil recommandé par le fabricant.
Certains firmwares ne transmettent pas les paramètres de ligne de commande des entrées de démarrage en NVRAM aux binaires EFI.
[1]
Dans ce cas, le noyau et les paramètres peuvent être combinés dans une
image de noyau unifiée
, puis créer une entrée de démarrage avec le fichier
.efi
résultant.
efibootmgr
Pour créer une entrée de démarrage avec
efibootmgr
qui chargera le noyau :
# efibootmgr --create --disk
/dev/sdX
--part
Y
--label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=
XXXXXXXX-XXXX-XXXX-XXXXXXXX
rw initrd=\initramfs-linux.img'
ou créer une entrée de démarrage avec
efibootmgr
et hibernation sur la partition swap :
# efibootmgr --create --disk
/dev/sdX
--part
Y
--label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=
XXXXXXXX- XXXX-XXXX-XXXX-XXXXXXXX
resume=PARTUUID=
XXXXXXXX-XXXX-XXXX-XXXXXXXX
rw initrd=\initramfs-linux. img'
Où
/dev/sdX
et
Y
sont le numéro du lecteur et de la partition où se trouve l'ESP. Modifiez les paramètres
root=
et
resume=
pour refléter vos partitions racine et swap Linux.
Note
Consultez
les paramètres du noyau
pour connaître les formats de noms de périphériques pris en charge, et
le nommage persistant des périphériques de type bloc
pour savoir comment obtenir la valeur correspondante.
Si elle est omise, la première partition sur
/dev/sda
est utilisée comme ESP.
Notez que l'argument
-u
/{ 'ic|--unicode}} entre guillemets est juste la liste des
paramètres du noyau
, vous devrez donc peut-être ajouter des paramètres supplémentaires (par exemple pour la
suspension sur disque
ou
microcode
).
Après avoir ajouté l'entrée de démarrage, vous pouvez vérifier que l'entrée a été ajoutée correctement avec :
# efibootmgr --unicode
Pour définir l'ordre de démarrage :
# efibootmgr --bootorder
XXXX
,
XXXX
--unicode
Où
XXXX
est le numéro qui apparaît dans la sortie de la commande
efibootmgr
pour chaque entrée.
Astuce
https://github.com/de-arl/auto-UEFI-entry
est un outil permettant de créer les commandes
Il est pratique d'enregistrer la commande de création de l'entrée de démarrage dans un script shell, ce qui permet de la modifier plus facilement, par exemple lors de la modification des paramètres du noyau. En faisant cela, pensez à automatiser la suppression des anciennes entrées de démarrage, comme
efibootmgr
ne prend pas en charge la modification des entrées existantes
actuellement.
Le post du forum international intitulé
The linux kernel with build in bootloader ?
peut également être intéressant.
bcfg
Certaines implémentations UEFI rendent difficile la modification de la NVRAM en utilisant
efibootmgr
. Si
efibootmgr
ne parvient pas à créer une entrée, vous pouvez utiliser la commande
bcfg
dans UEFI Shell v2 (c'est-à-dire à partir de l'iso live
Arch Linux
).
Tout d'abord, trouvez le numéro du périphérique sur lequel votre
ESP
réside :
Shell> map
Dans cet exemple,
1
est utilisé comme numéro de périphérique. Pour lister le contenu de l'
ESP
:
Shell> ls FS1 :
Pour afficher les entrées de démarrage actuelles :
Shell> bcfg boot dump
Pour ajouter une entrée pour votre noyau, utilisez :
Shell> bcfg boot add
N
FS1:\vmlinuz-linux "Arch Linux"
Où
N
est l'emplacement où l'entrée sera ajoutée dans le menu de démarrage. 0 est le premier élément de menu. Les éléments de menu déjà existants seront déplacés dans le menu sans être supprimés.
Ajoutez les options du noyau nécessaires en créant un fichier sur votre ESP :
Shell> edit FS1:\options.txt
Dans ce fichier, ajoutez la ligne de démarrage. Par exemple :
root=/dev/sda2 ro initrd=\initramfs-linux.img
Note
Ajoutez des espaces supplémentaires au début de la ligne dans le fichier. Il y a une
byte order mark
au début de la ligne qui écrasera tout caractère à côté, ce qui provoquera une erreur lors du démarrage.
Appuyez sur
F2
pour enregistrer, puis sur
F3
pour quitter.
Ajoutez ces options à votre entrée précédente :
Shell> bcfg boot -opt
N
FS1:\options.txt
Répétez ce processus pour toute entrée supplémentaire.
Pour supprimer un élément précédemment ajouté, procédez comme suit
Shell> bcfg boot rm
N
kesboot
Vous pouvez également simplifier et automatiser le travail avec EFISTUB en utilisant un script du paquet
kesboot-git
AUR
. Il contient également un
hook de pacman
qui peut ajouter et supprimer des variables EFI pendant les actions avec les paquets.
Tout d'abord, installez le paquet, puis configurez le fichier
/etc/kesboot.conf
:
/etc/kesboot.conf
CMDLINES=('linux' 'acpi=on'
          linux-zen' 'iommu=off')
Note
Si vous utilisez un hook (les variables
INSTALL_HOOK
et
REMOVE_HOOK
), alors il écrasera le tableau
CMDLINES
à chaque exécution (en préservant le contenu de tous les enregistrements).
Ensuite, exécutez
# kesboot -u
Le paquet contient également un programme pour la configuration initiale du démarrage EFI. Après avoir
monté l'ESP
, exécutez
# /usr/lib/setup-efi-boot
Utilisation du shell UEFI
Si vous ne voulez pas créer une entrée de démarrage permanente, il est possible de lancer le noyau depuis UEFI Shell puisqu'il s'agit d'une application UEFI normale :
> FS0 :
> \vmlinuz-linux root=PARTUUID=3518bb68-d01e-45c9-b973-0b5d918aae96 rw initrd=\initramfs-linux.img
Dans ce cas, les paramètres du noyau sont passés comme des paramètres normaux au fichier noyau EFISTUB lancé.
Pour éviter d'avoir à se souvenir de tous les paramètres du noyau à chaque fois, vous pouvez enregistrer la commande exécutable dans un script shell tel que
archlinux.nsh
sur votre partition système UEFI, puis l'exécuter avec :
> FS0 :
> archlinux
Utilisation d'un script startup.nsh
Certaines implémentations UEFI ne conservent pas les variables EFI entre les démarrages à froid (par exemple
VirtualBox
avant la version 6.1) et tout ce qui est défini par l'interface firmware UEFI est perdu à la mise hors tension.
La
Specification UEFI Shell 2.0
établit qu'un script appelé
startup.nsh
à la racine de la partition ESP sera toujours interprété et peut contenir des instructions arbitraires ; parmi celles-ci vous pouvez définir une ligne de chargement pour l'amorçage. Assurez-vous de monter la partition ESP sur
/boot
et de créer un script
startup.nsh
qui contient une ligne de chargement du noyau. Par exemple :
vmlinuz-linux rw root=/dev/sd
X
[rootfs=
myfs
] [rootflags=
myrootflags
] \
 [kernel.flag=
foo
] [
mymodule
.flag=
bar
] \
 [initrd=\intel-ucode.img] initrd=\initramfs-linux.img
Cette méthode fonctionnera avec presque toutes les versions du firmware UEFI que vous pouvez rencontrer dans du matériel réel, vous pouvez l'utiliser en dernier recours.
Le script doit être une seule longue ligne
. Les sections entre parenthèses sont facultatives et données uniquement à titre indicatif. Les sauts de ligne de style Shell ne sont donnés que pour une clarification visuelle. Les systèmes de fichiers FAT utilisent la barre oblique inverse comme séparateur de chemin et dans ce cas, la barre oblique inverse déclare que l'initramfs est situé à la racine de la partition ESP. Seul le microcode Intel est chargé dans la ligne des paramètres d'amorçage ; le microcode AMD est lu sur le disque plus tard pendant le processus de démarrage ; ceci est fait automatiquement par le noyau.
Dépannage
Les entrées de démarrage sont retirées de manière aléatoire
Certaines cartes mères peuvent supprimer les entrées de démarrage en raison d'un manque d'espace libre dans la NVRAM au lieu de donner une erreur à la création. Pour éviter que cela ne se produise, réduisez la quantité d'entrées de démarrage ajoutées par
efibootmgr
en minimisant votre processus de création d'entrées, ainsi que la quantité d'entrées de démarrage automatique du lecteur par le
Compatibility Support Module (CSM)
en le désactivant dans vos paramètres UEFI. Consultez
[2]
.
EFISTUB ne fonctionne pas sur certains systèmes Dell
Plusieurs générations de microprogrammes Dell transmettent mal les arguments au chargeur d'amorçage, ce qui fait que EFISTUB analyse une ligne de commande nulle, ce qui entraîne normalement un système non amorçable (consultez la discussion complète dans
linux-efi
).
Une solution de contournement a été trouvée depuis Linux 5.10 pour corriger ce comportement (consultez ce
commit
). Pour Linux < 5.10, vous pouvez utiliser un empaqueteur efi comme
arch-efiboot
, ou un autre chargeur d'amorçage.
Les modifications des entrées de démarrage ne sont pas appliquées
Certaines cartes mères, telles que les cartes Asus de l'ère Haswell (
comme rencontré sur le forum français
), ne remarqueront pas les modifications des entrées de démarrage à moins que le système ne soit démarré avec une autre entrée de démarrage préexistante avant de démarrer l'entrée EFISTUB mise à jour.
Voir aussi
Documentation du noyau Linux sur EFISTUB
Commit dans Git pour EFISTUB dans le noyau Linux
Page de Rod Smith sur EFISTUB