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
0x600000im 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.