hugo-relie/content/fr/posts/uefi-http-boot.md
2023-12-19 18:10:34 +01:00

3 KiB

title date draft toc images tags
Uefi Http Boot 2023-09-30T22:24:06+02:00 true false
uefi
linux

Des difficultés d'utiliser un clavier bluetooth

Il y a quelques mois, j'ai remplacé mon ancien clavier filaire par un tout nouveau clavier bluetooth. Mais je me suis rapidement heurtée à un léger obstacle : il s'avère que mon ordinateur principal est un dual boot Linux/Windows.

Typiquement, un dualboot est installé de la façon suivante : un disque est partitionné en deux (ou plus) partitions séparées, une pour Windows et une pour Linux. Lors du boot, le firmware UEFI (ou BIOS pour les machines en mode legacy) boot sur le bootloader de Linux qui est généralement grub ou systemd-boot, ce dernier permettant de choisir entre continuer sur Linux, ou utiliser le bootloader de Windows à la place.

Un setup typique de dual boot ressemble donc à ceci.

flowchart LR

start

subgraph UEFI
	fw[UEFI firmware]
	grub
	windows_loader[Windows bootloader]
end

subgraph OS
	windows[Windows]
	windows_safe["Windows (safe mode)"]
	linux[Linux]
	linux_safe["Linux (safe mode)"]
end

start --> fw --> grub
windows_loader --> windows & windows_safe
grub --> windows_loader & linux & linux_safe

Le choix du système d'exploitation s'effectue donc au niveau de grub, c'est-à-dire avant le démarrage du système d'exploitation et de la majorité de sa stack, autrement dit avant le démarrage du bluetooth, donc clairement impossible pour moi d'utiliser ce nouveau clavier bluetooth pour effectuer une sélection à ce niveau là (en tout cas sans le brancher)

À partir de là, trois solutions sont possibles :

  • brancher le câble au besoin (après tout les seuls moments où c'était nécessaire sont les moments où je souhaite booter sur un système différent du précédent, ça n'arrive pas si souvent que cela)
  • patcher l'initrd pour avoir un accès bluetooth, et y ajouter mon propre bootloader
  • agir encore plus tôt et choisir sur quel système booter au niveau de l'UEFI directement (par un switch physique ou logiciel)

{{< callout type="info" >}} Pour résumer très brièvement, le process de boot (au moins si on considère un système Linux) se déroule de la façon suivante

  1. Sélection d'une appli Linux EFI bootable
  2. Chargement du kernel et de l'initrd (image minimale Linux)
  3. Chargement du système Linux lui-même {{< /callout >}}

Évidemment, je n'allais pas choisir une solution relativement simple et légèrement contraignante, qui m'obligerait à brancher mon clavier de temps en temps au boot pour passer de Windows à Linux et inversement. Non, j'allais bien-sûr choisir la solution la plus oven-engineered possible.

{{< callout type="quote" >}} En pratique, il n'aurait même pas été toujours nécessaire de brancher le clavier pour passer de Linux à Windows, la commande grub-reboot man permet de choisir un système d'exploitation différent pour le prochain boot uniquement. {{< /callout >}}