Construire et Flasher Coreboot avec UEFI sur Lenovo ThinkPad X200 et HP EliteBook 820 G2

AVERTISSEMENT : L’auteur a rédigé ce guide juste après que ses ordinateurs portables semblaient fonctionner correctement et pourraient rencontrer des problèmes à l’avenir. L’auteur n’est pas responsable des dommages causés par le suivi de ce guide.

Avant-propos

J’ai flashé Libreboot sur mon Lenovo ThinkPad X200 et sur mon HP EliteBook 820 G2, mais ils ne supportent que SeaBIOS, qui ne prend en charge que CSM. La documentation de Libreboot indique que leur U-Boot prend en charge le démarrage EFI, mais cela n’a jamais fonctionné pour moi. Tianocore est une implémentation UEFI mature dans la communauté du logiciel libre, et j’ai récemment découvert que je pouvais construire et flasher une version de coreboot avec EDK II (un projet de Tianocore) pour obtenir le support du démarrage EFI.

Hier, j’ai terminé la construction et le flash des deux machines, et je suis heureux de partager la procédure.

Lenovo ThinkPad X200

Pour le Lenovo ThinkPad X200, les étapes sont relativement simples et vous pouvez flasher directement par-dessus le firmware d’origine. Si vous utilisez actuellement Libreboot, je recommande de revenir au firmware d’origine, car le flash direct sur Libreboot n’a pas été testé par moi.

Étape 1 : Vérifiez la taille de la puce de votre machine

Démarrez votre machine avec le paramètre iomem=relaxed. Si vous utilisez Debian 13 ou une distribution dont le dépôt contient déjà flashprog, vous pouvez l’installer directement au lieu de le compiler depuis le code source :

 # apt install flashprog

Sur votre machine, exécutez :

 # flashprog -p internal

Vous verrez la taille de votre puce. Si elle est de 4 MiB, votre machine n’est probablement pas compatible avec coreboot avec EDK II, car la compilation échouera probablement. Cependant, vous pouvez quand même essayer. Si elle est de 8 MiB, elle est supportée — mon X200 a une puce de 8 MiB.

Étape 2 : Construire le firmware

Obtenez et préparez coreboot :

 $ git clone https://review.coreboot.org/coreboot
 $ cd coreboot
 $ make help_toolchain
 $ make crossgcc-i386 CPUS=$(nproc)
 $ make -C payloads/coreinfo olddefconfig
 $ make -C payloads/coreinfo

Ouvrez menuconfig :

 $ make menuconfig

Ensuite :

  • Choisissez Lenovo, ThinkPad X200 / X200s / X200t et votre taille de puce dans la section Mainboard.
  • Choisissez edk2 dans Payload to add, désactivez Enable UEFI Secure Boot support, et activez Disable TPM support in edk2 dans la section Payload.
  • Laissez tout le reste tel quel, quittez et enregistrez la configuration.

Ensuite, exécutez :

 $ make -j$(nproc)

Votre firmware sera situé à ./build/coreboot.rom.

Étape 3 : Flasher le firmware

Sur une machine externe, préparez flashprog. Installez-le via votre gestionnaire de paquets si possible, ou compilez-le si nécessaire.

Suivez les étapes 2, 5 et la première moitié de l’étape 6 dans ce guide, puis flashez uniquement la région bios :

 # flashprog -p serprog:dev=/dev/ttyACMx,spispeed=8M -w /path/to/rom/file.rom -c "MX25L6405D" --ifd -i bios

Démarrez votre machine. Vous devriez voir le logo coreboot. Le processus est terminé.

HP EliteBook 820 G2

Cette procédure est légèrement plus compliquée que pour le Lenovo ThinkPad X200.

Étape 1 : Flasher Libreboot

Je ne sais pas comment flasher coreboot sur le firmware d’origine, veuillez donc suivre ce guide pour flasher d’abord Libreboot. Ensuite, nous pourrons flasher coreboot par-dessus Libreboot.

Étape 2 : Extraire les blobs

Étape 2.1 : Extraire le contenu de la puce

Extrayez votre puce plusieurs fois et comparez les hashs des fichiers ROM extraits :

 # flashprog -p serprog:dev=/dev/ttyACMx,spispeed=8M -r /path/to/rom/file1.rom -c "MX25L12805D"
 # flashprog -p serprog:dev=/dev/ttyACMx,spispeed=8M -r /path/to/rom/file2.rom -c "MX25L12805D"
 ...
 $ sha256sum /path/to/rom/file1.rom
 $ sha256sum /path/to/rom/file2.rom
 ...

Si les hashs diffèrent, répétez l’étape. Sinon, continuez.

Étape 2.2 : Extraire les blobs du fichier ROM

Extrayez le code de référence mémoire et le code de référence externe depuis le fichier ROM extrait :

 $ ./build/cbfstool /path/to/extracted/rom/file.rom extract -n mrc.bin -f /path/where/you/want/to/store/your/mrc.bin -m x86
 $ ./build/cbfstool /path/to/extracted/rom/file.rom extract -n fallback/refcode -f /path/where/you/want/to/store/your/refcode.bin -m x86

Étape 3 : Construire le firmware

Obtenez et préparez coreboot :

 $ git clone https://review.coreboot.org/coreboot
 $ cd coreboot
 $ make help_toolchain
 $ make crossgcc-i386 CPUS=$(nproc)
 $ make -C payloads/coreinfo olddefconfig
 $ make -C payloads/coreinfo

Ouvrez menuconfig :

 $ make menuconfig

Ensuite :

  • Choisissez HP, EliteBook 820 G2 et votre taille de puce. Définissez Size of coreboot owned area in ROM à 0x600000 dans la section Mainboard.
  • Choisissez le code de référence mémoire et le code de référence externe extraits à l’étape 2.2 dans la section Chipset.
  • Choisissez edk2 dans Payload to add dans la section Payload.
  • Laissez le reste tel quel, quittez et enregistrez la configuration.

Ensuite, exécutez :

 $ make -j$(nproc)

Votre firmware sera situé à ./build/coreboot.rom.

Étape 4 : Flasher le firmware

Sur une machine externe, préparez flashprog, votre programmateur, et flashez uniquement la région bios :

 # flashprog -p serprog:dev=/dev/ttyACMx,spispeed=8M -w /path/to/rom/file.rom -c "MX25L12805D" --ifd -i bios --no-verifyall

Ne retirez pas l’option --no-verifyall, sinon des erreurs peuvent survenir. Même avec cette option, flashprog vérifiera toujours le flash après écriture.

Démarrez votre machine. Vous devriez voir le logo coreboot. Le processus est terminé.