Coreboot mit UEFI auf Lenovo ThinkPad X200 und HP EliteBook 820 G2 bauen und flashen

WARNUNG: Der Autor schrieb diesen Leitfaden, kurz nachdem seine Laptops scheinbar einwandfrei funktionierten, und es können zukünftig Probleme auftreten. Der Autor übernimmt keine Verantwortung für Schäden, die durch die Befolgung dieses Leitfadens entstehen.

Vorwort

Ich habe Libreboot auf meinem Lenovo ThinkPad X200 und meinem HP EliteBook 820 G2 geflasht, aber beide unterstützen nur SeaBIOS, das wiederum nur CSM unterstützt. Die Libreboot-Dokumentation besagt, dass ihr U-Boot EFI-Boot unterstützt, aber bei mir funktionierte es nie. Tianocore ist eine ausgereifte UEFI-Implementierung innerhalb der Freie-Software-Community, und ich habe kürzlich entdeckt, dass ich mit EDK II (ein Projekt innerhalb von Tianocore) eine Coreboot-Version bauen und flashen kann, um EFI-Boot-Unterstützung zu erhalten.

Gestern habe ich beide Maschinen erfolgreich gebaut und geflasht und teile hier gerne das Vorgehen.

Lenovo ThinkPad X200

Beim Lenovo ThinkPad X200 sind die Schritte relativ einfach, und man kann direkt über die Original-Firmware flashen. Falls Sie derzeit Libreboot verwenden, empfehle ich, zunächst zur Original-Firmware zurückzukehren, da ein Flashen direkt über Libreboot von mir nicht getestet wurde.

Schritt 1: Chip-Grösse prüfen

Starten Sie Ihr Gerät mit dem Parameter iomem=relaxed. Wenn Sie Debian 13 oder eine Distribution verwenden, deren Repository bereits flashprog enthält, können Sie es direkt installieren:

 # apt install flashprog

Auf Ihrem Gerät führen Sie aus:

 # flashprog -p internal

Sie sehen die Chip-Grösse. Wenn sie 4 MiB beträgt, wird Coreboot mit EDK II wahrscheinlich nicht unterstützt und der Firmware-Build könnte fehlschlagen, aber Sie können es versuchen. Bei 8 MiB wird es unterstützt — mein X200 hat einen 8 MiB Flash.

Schritt 2: Firmware bauen

Coreboot besorgen und vorbereiten:

 $ 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

Öffnen Sie menuconfig:

 $ make menuconfig

Dann:

  • Wählen Sie Lenovo, ThinkPad X200 / X200s / X200t und Ihre Chip-Grösse im Abschnitt Mainboard.
  • Wählen Sie edk2 unter Payload to add, deaktivieren Sie Enable UEFI Secure Boot support, und aktivieren Sie Disable TPM support in edk2 im Abschnitt Payload.
  • Alles andere unverändert lassen, Menü verlassen und Konfiguration speichern.

Dann ausführen:

 $ make -j$(nproc)

Ihre Firmware befindet sich in ./build/coreboot.rom.

Schritt 3: Firmware flashen

Auf einer externen Maschine flashprog vorbereiten. Falls möglich über den Paketmanager installieren, ansonsten selbst bauen.

Folgen Sie Schritt 2, 5 und der ersten Hälfte von Schritt 6 in diesem Leitfaden, und flashen Sie dann nur den bios-Bereich:

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

Starten Sie Ihr Gerät. Sie sollten das Coreboot-Logo sehen. Fertig.

HP EliteBook 820 G2

Dieser Vorgang ist etwas komplizierter als beim Lenovo ThinkPad X200.

Schritt 1: Libreboot flashen

Ich weiss nicht, wie man Coreboot direkt über die Original-Firmware flashen kann, daher folgen Sie bitte diesem Leitfaden, um zunächst Libreboot zu flashen. Danach kann Coreboot über Libreboot geflasht werden.

Schritt 2: Blobs extrahieren

Schritt 2.1: Chip-Inhalt extrahieren

Extrahieren Sie Ihren Chip mehrfach und vergleichen Sie die Hashes der ROM-Dateien:

 # 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
 ...

Wenn die Hashes unterschiedlich sind, wiederholen. Sind sie identisch, fortfahren.

Schritt 2.2: Blobs aus ROM extrahieren

Extrahieren Sie den Memory Reference Code und External Reference Code aus der extrahierten ROM-Datei:

 $ ./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

Schritt 3: Firmware bauen

Coreboot besorgen und vorbereiten:

 $ 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

Öffnen Sie menuconfig:

 $ make menuconfig

Dann:

  • Wählen Sie HP, EliteBook 820 G2 und Ihre Chip-Grösse. Setzen Sie Size of coreboot owned area in ROM auf 0x600000 im Abschnitt Mainboard.
  • Wählen Sie den Memory Reference Code und External Reference Code aus Schritt 2.2 im Abschnitt Chipset.
  • Wählen Sie edk2 unter Payload to add im Abschnitt Payload.
  • Alles andere unverändert lassen, Menü verlassen und speichern.

Dann ausführen:

 $ make -j$(nproc)

Ihre Firmware befindet sich in ./build/coreboot.rom.

Schritt 4: Firmware flashen

Auf einer externen Maschine flashprog vorbereiten, Programmierer anschliessen und nur den bios-Bereich flashen:

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

Die Option --no-verifyall nicht entfernen, sonst treten Fehler auf. Auch mit dieser Option überprüft flashprog den Flash nach dem Schreiben.

Starten Sie Ihr Gerät. Sie sollten das Coreboot-Logo sehen. Fertig.