Aktualizacja Coreboot w Lenovo ThinkPad T420i z wersji 4.22.01 do 26.09 była kolejnym etapem modernizacji tego kilkunastoletniego laptopa. Celem było zastąpienie dotychczasowego, sprawdzonego firmware nowszą wersją Coreboota oraz payloadem MrChromebox EDK2 26.09.1, bez utraty konfiguracji UEFI, modyfikowania zawartości Intel Management Engine czy ponownego rozbierania komputera. Całą operację przeprowadziłem z poziomu systemu Linux, wykorzystując przygotowany wcześniej obraz ROM oraz narzędzie flashrom.

Projekt zakończył się sukcesem. ThinkPad T420i uruchamia się obecnie z Coreboot 26.09, następnie przechodzi do MrChromebox EDK2, bootloadera Limine i systemu CachyOS. Zachowane zostały dotychczasowe wpisy UEFI, ustawienia firmware i obsługa zmodyfikowanej matrycy FHD IPS. Prawidłowo działają również regulacja jasności, usypianie S3 oraz wybudzanie. Poniżej opisuję cały proces, od przygotowania środowiska kompilacji po ostateczną weryfikację firmware.

ThinkPad T420i z Coreboot – konfiguracja sprzętowa przed aktualizacją

Komputer wykorzystany w projekcie to Lenovo ThinkPad T420i oparty na płycie głównej ThinkPada T420 z chipsetem Intel QM67. Nie jest to jednak egzemplarz w fabrycznej konfiguracji. Laptop został wcześniej wyposażony w czterordzeniowy procesor Intel Core i7-3740QM generacji Ivy Bridge, 16 GB pamięci DDR3L oraz matrycę AU Optronics B140HAN01.3 o rozdzielczości 1920 × 1080 pikseli.

Oryginalny interfejs LVDS został dostosowany do współpracy z ekranem FHD IPS za pomocą adaptera LVDS-eDP. To istotny szczegół, ponieważ inicjalizacja grafiki odbywa się już na etapie firmware, zanim rozpocznie się ładowanie systemu operacyjnego. Zmiana wersji Coreboota mogła więc wpłynąć nie tylko na uruchamianie komputera, lecz także na obsługę wyświetlacza.

Przed aktualizacją laptop korzystał z Coreboot 4.22.01 oraz payloadu MrChromebox EDK2. Systemem operacyjnym był CachyOS uruchamiany przez Limine. Ta konfiguracja działała stabilnie, dlatego podstawowym założeniem projektu było zachowanie jej funkcjonalności możliwie bez zmian.

Docelowy łańcuch rozruchowy miał wyglądać następująco:

Coreboot 26.09
MrChromebox EDK2 26.09.1
Limine
CachyOS

Nie planowałem powrotu do SeaBIOS, który wcześniej służył wyłącznie do eksperymentów. Tym razem docelowym rozwiązaniem od początku pozostawał UEFI Payload od MrChromebox.

Przygotowanie źródeł Coreboot 26.09 i środowiska kompilacji

Do budowy nowego firmware wykorzystałem Ubuntu 26.04 działające w środowisku WSL2 na Lenovo ThinkPad P14s. Kompilowanie Coreboota na osobnym komputerze pozwoliło zachować dotychczasową konfigurację T420i i przeprowadzić wszystkie eksperymenty bez ingerencji w działający laptop.

Prace rozpocząłem od pobrania oficjalnego repozytorium projektu Coreboot, wybrania oznaczonego wydania 26.09 oraz inicjalizacji submodułów:

git clone https://review.coreboot.org/coreboot.git coreboot-26.09
cd coreboot-26.09
git checkout 26.09
git submodule update --init --recursive

Wykorzystany tag wskazywał na rewizję o skróconym identyfikatorze 8b0e34f90e. Wybór konkretnego wydania zamiast przypadkowej rewizji rozwojowej pozwolił oprzeć projekt na stabilnej, powtarzalnej bazie źródłowej.

Następnym etapem było przygotowanie narzędzi kompilacyjnych. Coreboot korzysta z własnego cross-toolchaina, który umożliwia budowanie komponentów firmware niezależnie od domyślnego kompilatora systemowego. Wykonałem:

make crossgcc-i386 CPUS=$(nproc)

Początkowo kompilacja nie zakończyła się poprawnie ze względu na brak środowiska GNAT, wymaganego do obsługi języka Ada. Jest to szczególnie istotne w konfiguracjach wykorzystujących libgfxinit, czyli natywną inicjalizację grafiki Intel.

Brakujący pakiet zainstalowałem poleceniem:

sudo apt install gnat-15

W wykorzystywanym środowisku Ubuntu dostępne były wersjonowane pliki wykonywalne GNAT. Aby zapewnić zgodność z oczekiwaniami procesu budowania, utworzyłem dowiązania symboliczne:

sudo ln -s /usr/bin/gnatbind-15 /usr/local/bin/gnatbind
sudo ln -s /usr/bin/gnatmake-15 /usr/local/bin/gnatmake

Po usunięciu niekompletnych rezultatów wcześniejszej próby ponownie zbudowałem narzędzia:

make crossgcc-clean
make crossgcc-i386 CPUS=$(nproc)

Tym razem kompilacja zakończyła się sukcesem. Warto zaznaczyć, że instalacja GNAT i tworzenie dowiązań dotyczyły konkretnego środowiska Ubuntu. W innych dystrybucjach nazwy pakietów i dostępne wersje kompilatora mogą być inne.

Podczas późniejszej kompilacji MrChromebox EDK2 konieczne było również doinstalowanie kilku narzędzi:

sudo apt install uuid-dev nasm imagemagick

Po przygotowaniu środowiska można było przejść do konfiguracji firmware dla płyty Lenovo T420.

Przeniesienie konfiguracji Coreboot 4.22.01 do wersji 26.09

Najprostszym punktem wyjścia był istniejący plik .config z poprzedniej wersji Coreboota. Nie chciałem konfigurować całego firmware od początku, ponieważ wcześniejszy build zawierał wiele ustawień dopasowanych do konkretnego laptopa.

Skopiowałem dotychczasową konfigurację do katalogu nowej wersji:

cp ~/coreboot/.config .config
cp .config .config-4.22.01-original
make olddefconfig

Polecenie make olddefconfig pozwala dostosować starszą konfigurację do aktualnego zestawu opcji Kconfig. Nie gwarantuje jednak zachowania wszystkich ustawień, szczególnie gdy pomiędzy wydaniami zmieniły się nazwy symboli, ich zależności albo wartości domyślne.

W moim przypadku pojawiła się dodatkowa komplikacja. Stary plik konfiguracyjny pochodził z późniejszego eksperymentu z SeaBIOS, a nie bezpośrednio z pierwotnego firmware EDK2. Z tego powodu konieczne było ręczne porównanie wybranych ustawień i odtworzenie ich na podstawie oryginalnego ROM-u Coreboot 4.22.01 przygotowanego przez Johna Linga.

Wykorzystałem do tego narzędzie cbfstool, które umożliwia odczytywanie zawartości systemu plików CBFS znajdującego się wewnątrz obrazu firmware. W ten sposób można sprawdzić nie tylko obecność payloadu, lecz także zapisane informacje o konfiguracji i poszczególne komponenty.

Ostatecznie nowy build skonfigurowałem dla płyty Lenovo ThinkPad T420 i pełnego obrazu SPI o rozmiarze 8 MiB:

CONFIG_BOARD_LENOVO_T420=y
CONFIG_MAINBOARD_PART_NUMBER="ThinkPad T420"
CONFIG_MAINBOARD_DIR="lenovo/t420"
CONFIG_ROM_SIZE=0x00800000

Zachowałem również ustawienia natywnej inicjalizacji pamięci RAM, w tym CONFIG_NATIVE_RAMINIT_IGNORE_MAX_MEM_FUSES=y, oraz wybrane opcje PCI Express i kontrolera ThinkPada H8. Migracja konfiguracji została potraktowana jako odtwarzanie znanego, działającego środowiska, a nie okazja do wprowadzania kolejnych eksperymentalnych zmian.

Konfiguracja libgfxinit i obsługa matrycy FHD IPS

Jednym z najważniejszych elementów konfiguracji była inicjalizacja grafiki Intel. W ThinkPadzie T420i zastosowałem libgfxinit oraz liniowy framebuffer, podobnie jak w poprzednim firmware opartym na Coreboot 4.22.01.

Kluczowe ustawienia wyglądały następująco:

CONFIG_MAINBOARD_USE_LIBGFXINIT=y
CONFIG_GFX_GMA_PANEL_1_PORT="LVDS"
CONFIG_GFX_GMA_PANEL_1_ON_LVDS=y
CONFIG_WANT_LINEAR_FRAMEBUFFER=y
CONFIG_GENERIC_LINEAR_FRAMEBUFFER=y
CONFIG_LINEAR_FRAMEBUFFER=y
CONFIG_LINEAR_FRAMEBUFFER_MAX_WIDTH=1920
CONFIG_LINEAR_FRAMEBUFFER_MAX_HEIGHT=1080

Ustawienia te pozwalają Corebootowi przygotować wyjście graficzne dla payloadu UEFI bez konieczności uruchamiania klasycznego VGA BIOS. Maksymalne wymiary framebufferu odpowiadają rozdzielczości zastosowanej matrycy, chociaż samo ustawienie limitu nie wymusza automatycznie konkretnego trybu wyświetlania.

W konfiguracji wyłączone pozostały CONFIG_VGA_BIOS i CONFIG_VGA_ROM_RUN. Wcześniejsze doświadczenia z T420i pokazały, że libgfxinit dobrze współpracuje z adapterem LVDS-eDP, dlatego zależało mi na zachowaniu tego mechanizmu również w Coreboot 26.09.

Po aktualizacji matryca AUO B140HAN01.3 uruchomiła się poprawnie. EDK2 wyświetla interfejs graficzny, system CachyOS pracuje w rozdzielczości FHD, a regulacja jasności działa tak samo jak przed zmianą firmware.

MrChromebox EDK2 26.09.1 jako główny payload Coreboota

Kolejnym etapem było odtworzenie konfiguracji payloadu UEFI. W projekcie wykorzystałem repozytorium MrChromebox EDK2, a nie domyślne źródła EDK2.

Najważniejsze ustawienia:

CONFIG_PAYLOAD_EDK2=y
CONFIG_EDK2_UEFIPAYLOAD=y
CONFIG_EDK2_REPO_MRCHROMEBOX=y
CONFIG_EDK2_REPOSITORY="https://github.com/mrchromebox/edk2"
CONFIG_EDK2_TAG_OR_REV="26.09.1"

Odtworzyłem również ustawienia odpowiadające za zachowanie ekranu startowego i obsługę interfejsu UEFI:

CONFIG_EDK2_BOOT_TIMEOUT=1
CONFIG_EDK2_BOOT_MANAGER_ESCAPE=y
CONFIG_EDK2_FOLLOW_BGRT_SPEC=y
CONFIG_EDK2_HAVE_EFI_SHELL=y
CONFIG_EDK2_PRIORITIZE_INTERNAL=y
CONFIG_EDK2_PS2_SUPPORT=y
CONFIG_EDK2_USE_LVGL_RENDERER=y
CONFIG_EDK2_SECURE_BOOT_SUPPORT=y
CONFIG_EDK2_SD_MMC_TIMEOUT=10

Włączenie obsługi Secure Boot oznacza dostępność odpowiednich mechanizmów w EDK2, a nie automatyczne wymuszenie rozruchu wyłącznie podpisanych programów. Istniejąca konfiguracja rozruchowa została zachowana.

Ważnym elementem był również ekran startowy Coreboota z charakterystycznym zającem. Grafika pochodzi z pliku Documentation/coreboot_logo.bmp, wskazanego w konfiguracji EDK2. Zachowałem także ustawienie zgodności z BGRT, dzięki któremu logo może zostać prawidłowo pozycjonowane i udostępnione systemowi operacyjnemu.

Ze starej eksperymentalnej konfiguracji usunąłem dodatkowe payloady, takie jak SeaBIOS, Coreinfo, TINT i NVRAMCUI. Ostateczny firmware miał zawierać Coreboot z EDK2 jako głównym mechanizmem rozruchowym, bez niepotrzebnych pozostałości wcześniejszych testów.

SMMSTORE – dlaczego nie można było pominąć magazynu zmiennych UEFI?

Jednym z istotniejszych problemów podczas przygotowywania nowego obrazu okazała się konfiguracja SMMSTORE. Mechanizm ten udostępnia wydzielony obszar pamięci SPI, do którego dostęp odbywa się za pośrednictwem procedur SMM. Payload UEFI może wykorzystać go do trwałego przechowywania zmiennych firmware.

W przypadku EDK2 są to między innymi wpisy rozruchowe, kolejność uruchamiania systemów oraz część ustawień interfejsu firmware. Ponieważ chciałem zachować dotychczasową konfigurację Limine i CachyOS, nie należało ignorować tego obszaru.

Początkowo nowy build nie zawierał regionu SMMSTORE. Pomimo ustawienia:

CONFIG_EDK2_CUSTOM_BUILD_PARAMS="-D VARIABLE_SUPPORT=SMMSTORE"

w konfiguracji Coreboota znajdowała się opcja:

# CONFIG_SMMSTORE is not set

Była to istotna niespójność. Włączyłem więc SMMSTORE i odtworzyłem rozmiar używany przez wcześniejszy firmware:

CONFIG_SMMSTORE=y
CONFIG_SMMSTORE_SIZE=0x40000
CONFIG_SMMSTORE_BLOCK_SIZE=65536

Wartość 0x40000 oznacza 256 KiB, a rozmiar logicznego bloku wynosi 64 KiB. Jest to minimalna pojemność wymagana do obsługi mechanizmu Fault Tolerant Write w EDK2 przy takiej wielkości bloku. Nowsze wydania Coreboota mogą domyślnie rezerwować więcej miejsca, jednak w tym projekcie zachowanie istniejącego układu miało większe znaczenie niż zwiększenie dostępnej przestrzeni.

Po zmianie konfiguracji ponownie wykonałem kompilację. Nie było potrzeby uruchamiania pełnego make clean. Standardowy mechanizm budowania wykrył zmiany i przygotował nowy obraz firmware.

Wygenerowana mapa FMAP zawierała już wszystkie oczekiwane regiony:

RW_MRC_CACHE: offset 0x500000, size 65536
SMMSTORE: offset 0x510000, size 262144
FMAP: offset 0x550000, size 4096
COREBOOT: offset 0x551000, size 2813952

Najważniejsze było to, że położenie oraz rozmiar SMMSTORE pozostały zgodne z oryginalnym firmware. Późniejszy odczyt pamięci SPI z działającego T420i potwierdził, że obszar SMMSTORE rzeczywiście znajdował się pod tym samym adresem.

Intel Flash Descriptor, Intel ME i AltMeDisable – analiza przed aktualizacją

Drugim zagadnieniem wymagającym dokładniejszego sprawdzenia był Intel Flash Descriptor. Pamięć SPI w ThinkPadzie T420 została podzielona na kilka regionów zawierających deskryptor, firmware Intel ME, dane kontrolera Ethernet oraz właściwy BIOS.

W nowym obrazie uwzględniłem oryginalne komponenty descriptor.bin, me.bin i gbe.bin. Nie używałem ME Cleaner, nie usuwałem Intel ME ani nie przeprowadzałem nowej operacji wyłączania ME przez HAP. Założeniem było pozostawienie istniejących danych urządzenia.

Podczas kompilacji pojawił się komunikat:

IFDTOOL Unlocking Management Engine

Wynikał on z ustawienia CONFIG_UNLOCK_FLASH_REGIONS=y, które zmienia uprawnienia dostępu zapisane w deskryptorze. Sama ta operacja nie usuwa kodu Intel ME z regionu SPI. Wymagała jednak weryfikacji, ponieważ szerokie uprawnienia zapisu zwiększają znaczenie prawidłowego określenia zakresu późniejszego flashowania.

Narzędziem ifdtool sprawdziłem strukturę przygotowanego obrazu. Region BIOS zajmował zakres 0x500000–0x7FFFFF, czyli dokładnie 3 MiB. Pozostałe regiony znajdowały się poza tą przestrzenią.

Porównanie nowego deskryptora z działającym firmware ujawniło różnicę w wartości PCHSTRP10. W backupie T420i wynosiła ona 0x004100C4, natomiast w nowym obrazie 0x00410044. Oznaczało to różnicę w stanie bitu AltMeDisable.

W działającym laptopie bit ten był ustawiony. Tak samo wyglądała sytuacja w referencyjnym ROM-ie Johna Linga. Ponieważ aktualizacja miała zachować dotychczasowy stan platformy, postanowiłem pozostawić oryginalny deskryptor z fizycznego T420i, zamiast zmieniać to ustawienie.

Dokładne porównanie pierwszych 4096 bajtów ujawniło zaledwie siedem różniących się bajtów pomiędzy starym i nowym deskryptorem. Jeden odpowiadał za zmianę AltMeDisable, a pozostałe znajdowały się w sekcji OEM zawierającej informacje tekstowe. Uprawnienia Master i granice regionów były zgodne.

Warto przy tym pamiętać, że AltMeDisable nie jest tym samym co usunięcie regionu Intel ME. W tym projekcie zachowałem istniejący stan deskryptora i zawartość ME bez wprowadzania dalszych zmian.

Budowanie Coreboot 26.09 i weryfikacja obrazu ROM

Po zakończeniu konfiguracji uruchomiłem właściwą kompilację:

make -j$(nproc)

Proces zakończył się komunikatem:

Built lenovo/t420 (ThinkPad T420)

Wygenerowany obraz znajdował się pod ścieżką build/coreboot.rom. Zawierał komponenty Coreboota, mikrokod procesora, tablice ACPI, dane konfiguracji, bootblock oraz payload MrChromebox EDK2.

Rozmiar obrazu wynosił dokładnie 8 388 608 bajtów. Do jego sprawdzenia wykorzystałem:

stat -c '%s bytes' build/coreboot.rom
sha256sum build/coreboot.rom
build/cbfstool build/coreboot.rom layout -w
build/cbfstool build/coreboot.rom print -r COREBOOT

W nowym układzie FMAP region COREBOOT rozpoczynał się pod adresem 0x551000. W poprzednim firmware początek CBFS znajdował się pod 0x550200. Różnica wynikała przede wszystkim z większej przestrzeni przeznaczonej na tablicę FMAP.

Ta pozornie niewielka zmiana miała istotne konsekwencje. Aktualizacji nie należało przeprowadzać przez bezpośrednią podmianę dawnego obszaru CBFS z użyciem starego układu adresów. Konieczne było zapisanie nowej mapy FMAP razem z odpowiadającą jej zawartością firmware.

Porównanie starego i nowego firmware ThinkPada T420i

Przed aktualizacją wykonałem dwa niezależne odczyty pamięci SPI z działającego laptopa. Oba obrazy miały rozmiar 8 MiB i były identyczne bajt po bajcie. Pozwoliło to uzyskać wiarygodną kopię zapasową oryginalnego firmware.

W pamięci SPI znajdował się układ Macronix MX25L6406E, który był prawidłowo obsługiwany przez flashrom. Wykorzystane polecenie odczytu wyglądało następująco:

sudo flashrom -p internal -c "MX25L6406E/MX25L6408E" -r t420i-backup-1.rom

Następnie przeprowadziłem analizę starego obrazu za pomocą cbfstool i ifdtool. Potwierdziłem zgodność adresów regionów BIOS, RW_MRC_CACHE i SMMSTORE z nowym firmware.

Na tej podstawie przygotowałem spersonalizowany obraz aktualizacyjny. Pierwsze 0x550000 bajtów pochodziło z backupu działającego T420i, natomiast nowy FMAP i zawartość Coreboota zostały zachowane z buildu 26.09.

Po skopiowaniu nowego ROM-u do osobnego pliku wykonałem operację łączenia obrazów:

cp build/coreboot.rom build/t420i-26.09-final.rom
dd if=t420i-backup-1.rom of=build/t420i-26.09-final.rom bs=65536 count=85 conv=notrunc

W powyższym przykładzie przyjęto, że plik backupu znajduje się w bieżącym katalogu. W praktyce należy wskazać jego rzeczywistą ścieżkę. Parametr count=85 przy blokach 65536 bajtów odpowiada zakresowi 0x000000–0x54FFFF.

Po utworzeniu obrazu wykonałem dwa niezależne porównania. Pierwsze potwierdziło, że zachowana część jest identyczna ze starym firmware. Drugie wykazało, że cała pozostała zawartość odpowiada nowemu buildowi Coreboot 26.09.

cmp -n 5570560 t420i-backup-1.rom build/t420i-26.09-final.rom
cmp -i 5570560 build/coreboot.rom build/t420i-26.09-final.rom

Oba porównania zakończyły się bez wykazania różnic. Finalny plik t420i-26.09-final.rom miał rozmiar 8 MiB i sumę kontrolną SHA256:

21d0529ac6eeb5cc816971c692922592407bd9c0dc97f4bf662c0104250ca423

Jest to suma konkretnego obrazu przygotowanego dla mojego egzemplarza T420i. Nie należy traktować jej jako uniwersalnej sumy firmware Coreboot 26.09 dla wszystkich komputerów tego modelu.

Flashrom 1.8.0 – aktualizacja Coreboot bez nadpisywania Intel ME i SMMSTORE

Po przeprowadzeniu kontroli nadszedł czas na właściwą aktualizację. Zależało mi na ograniczeniu zapisu wyłącznie do obszaru zawierającego nowy FMAP i Coreboot. Nie chciałem nadpisywać Intel ME, danych GbE, deskryptora ani magazynu zmiennych UEFI.

Do tego celu przygotowałem własny plik layout dla flashrom:

00550000:007fffff firmware_update

Zakres ten odpowiada końcowej części 8-megabajtowej pamięci SPI. Rozpoczyna się od nowej tablicy FMAP i obejmuje całą przestrzeń przeznaczoną na Coreboot oraz EDK2.

Przed zapisem sprawdziłem komunikaty narzędzia flashrom 1.8.0, które poprawnie rozpoznało chipset Intel QM67 i kość Macronix:

flashrom v1.8.0
Found chipset "Intel QM67".
SPI Configuration is locked down.
FREG1: BIOS region (0x00500000-0x007fffff) is read-write.
Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI)

Komunikat o zablokowanej konfiguracji kontrolera SPI nie oznaczał w tym przypadku braku uprawnień do zapisu regionu BIOS. Flashrom raportował możliwość odczytu i zapisu odpowiednich obszarów pamięci.

Bezpośrednio przed aktualizacją wykonałem jeszcze jeden odczyt firmware, zapisując go jako t420i-preflash.rom. Ten plik stanowił dodatkową kopię ratunkową aktualnego stanu komputera.

Po sprawdzeniu integralności obrazu i przygotowaniu kopii zapasowych właściwe polecenie aktualizacji wyglądało następująco:

sudo flashrom -p internal -c "MX25L6406E/MX25L6408E" -l t420i-26.09.layout -i firmware_update -w t420i-26.09-final.rom -o flashrom-t420i-26.09.log

Parametr -l wskazywał przygotowany plik layout, natomiast -i firmware_update ograniczał operację do wskazanego obszaru. Dzięki temu flashrom nie miał aktualizować pozostałych regionów pamięci SPI.

Operacja zakończyła się następującym wynikiem:

Reading old flash chip contents... done.
Updating flash chip contents... Erase/write done from 550000 to 7fffff
Verifying flash... VERIFIED.

Komunikat VERIFIED potwierdził, że zapisany obszar został prawidłowo odczytany i zweryfikowany. Nie był to jednak jeszcze dowód poprawnego działania całego firmware. Ostatecznym sprawdzianem pozostawał pierwszy restart i uruchomienie systemu operacyjnego.

Ważne: przedstawiony zakres zapisu dotyczy konkretnego obrazu i układu pamięci mojego ThinkPada T420i. Nie należy kopiować go bez wcześniejszego sprawdzenia IFD, FMAP i rzeczywistego rozmieszczenia danych na innym komputerze. Błędny zapis firmware może uniemożliwić uruchomienie laptopa i wymagać użycia zewnętrznego programatora SPI.

Pierwsze uruchomienie Coreboot 26.09 i testy po aktualizacji

Po poprawnym zakończeniu flashowania uruchomiłem ponownie ThinkPada T420i. Nowy firmware zainicjalizował podzespoły, wyświetlił ekran startowy Coreboota, a następnie przekazał sterowanie do MrChromebox EDK2.

Bootloader Limine został uruchomiony z dotychczasowego wpisu UEFI, po czym normalnie wystartował CachyOS. Nie było potrzeby odtwarzania wpisów rozruchowych ani ponownej instalacji bootloadera.

Wynik polecenia efibootmgr -v potwierdził, że EDK2 nadal rozpoznaje zachowaną konfigurację rozruchową. Najważniejsze informacje wyglądały następująco:

BootCurrent: 0002
Timeout: 1 seconds
BootOrder: 0002,0001,0005,0004,0003,0000,0006
Boot0002* Limine

Obecność wcześniejszych wpisów UEFI była istotnym potwierdzeniem, że aktualizacja nie usunęła dotychczasowych zmiennych rozruchowych. Nie oznacza to automatycznie pełnej zgodności wszystkich możliwych operacji zapisu zmiennych między wersjami EDK2, ale w przeprowadzonym teście konfiguracja została prawidłowo odczytana i wykorzystana.

Po uruchomieniu systemu sprawdziłem również obsługę matrycy FHD IPS, regulację jasności, działanie klawiatury oraz usypianie. Suspend w trybie S3 i późniejsze wybudzanie działały prawidłowo. Było to szczególnie ważne, ponieważ aktualizacje Coreboota mogą wpływać na zachowanie ACPI i obsługę stanów zasilania.

W tym przypadku nie stwierdziłem problemów funkcjonalnych po migracji z Coreboot 4.22.01 do 26.09.

MrChromebox EDK2 26.09.1 – nowy interfejs graficzny i własny boot splash

Jedną z najbardziej widocznych zmian po aktualizacji okazał się nowy interfejs konfiguracji UEFI wykorzystujący bibliotekę LVGL. Podczas wyświetlania logo Coreboota można nacisnąć klawisz Esc, aby przejść do menu firmware.

Nowy interfejs udostępnia między innymi ustawienia rozruchu, konfigurację Secure Boot, zarządzanie urządzeniami startowymi, ustawienia TPM oraz opcje związane z wyglądem menu UEFI.

Szczególnie interesująca jest sekcja Boot Splash Settings. Umożliwia ona włączenie lub wyłączenie ekranu startowego oraz wybór źródła logo. Oprócz grafiki zapisanej w firmware można wskazać własny obraz BMP, korzystając z przeglądarki plików dostępnej bezpośrednio w EDK2.

Własny ekran startowy może być przechowywany na partycji EFI, dlatego jego zmiana nie wymaga ponownej kompilacji Coreboota ani programowania pamięci SPI. Oryginalny obraz pozostaje zapisany w firmware, a powrót do niego wymaga jedynie zmiany źródła logo w konfiguracji.

W przypadku ThinkPada T420i pozwala to połączyć nowoczesny interfejs UEFI z klasycznym wyglądem komputera. Jednocześnie cała funkcja personalizacji pozostaje niezależna od najważniejszych komponentów rozruchowych.

Weryfikacja wersji Coreboot 26.09 za pomocą dmidecode

Ostateczne potwierdzenie zainstalowanej wersji firmware wykonałem już w uruchomionym systemie CachyOS. Posłużyło do tego narzędzie dmidecode, które odczytuje informacje SMBIOS udostępniane przez firmware komputera.

Polecenie:

sudo dmidecode -t bios

zwróciło następujący wynik:

# dmidecode 3.7
Getting SMBIOS data from sysfs.
SMBIOS 3.1.0 present.
Handle 0x0000, DMI type 0, 26 bytes
Platform Firmware Information
Vendor: coreboot
Version: CBET4000 26.09
Release Date: 09/24/2026
ROM Size: 8 MiB
Characteristics:
PCI is supported
PC Card (PCMCIA) is supported
Firmware is upgradeable
Selectable boot is supported
ACPI is supported
Targeted content distribution is supported
UEFI is supported
Platform Firmware Revision: 26.9
Embedded Controller Firmware Revision: 0.0

Wynik jednoznacznie potwierdza, że laptop pracuje na Coreboot 26.09. Identyfikator CBET4000 pochodzi z konfiguracji firmware i nie oznacza, że urządzenie zostało rozpoznane jako ThinkPad T400. Podobnie wartość Embedded Controller Firmware Revision: 0.0 nie oznacza braku działającego kontrolera EC, lecz brak rzeczywistego numeru wersji udostępnionego w tym polu SMBIOS.

Odczyt potwierdził także prawidłowy rozmiar ROM wynoszący 8 MiB, obsługę UEFI oraz rewizję platformowego firmware odpowiadającą Coreboot 26.09.

Archiwizacja firmware i możliwość powrotu do poprzedniej wersji

Po pomyślnej aktualizacji zachowałem komplet plików związanych z projektem. Najważniejsze z nich to pełny backup pamięci SPI sprzed aktualizacji, spersonalizowany obraz Coreboot 26.09, plik layout wykorzystany przez flashrom oraz końcowy plik konfiguracyjny .config.

Warto przy tym rozróżnić obraz instalacyjny od kopii pamięci SPI odczytanej z urządzenia. Plik t420i-26.09-final.rom jest przygotowanym obrazem użytym podczas aktualizacji, natomiast t420i-preflash.rom zawiera rzeczywisty stan pamięci przed zmianą firmware.

Przechowywanie obu plików umożliwia odtworzenie przebiegu aktualizacji, sprawdzenie wykorzystanej konfiguracji oraz przygotowanie procedury przywracania poprzedniego firmware. Nie należy jednak udostępniać publicznie pełnych dumpów SPI bez sprawdzenia ich zawartości, ponieważ mogą zawierać dane właściwe dla konkretnego urządzenia.

Aktualizacja Coreboot 4.22.01 do 26.09 pokazała, że starszego ThinkPada T420i można wyposażyć w nowoczesny firmware UEFI bez rezygnowania z rozbudowanej konfiguracji sprzętowej. Kluczowe okazały się nie tyle sama kompilacja i zapis ROM-u, ile wcześniejsze porównanie deskryptorów, zachowanie SMMSTORE oraz precyzyjne ograniczenie obszaru aktualizacji. Dzięki temu udało się wymienić właściwą część firmware, zachowując istniejące dane platformy i działający system operacyjny.

Po zakończeniu testów ThinkPad T420i pozostał w konfiguracji Coreboot 26.09, MrChromebox EDK2 26.09.1, Limine i CachyOS. Prawidłowo działają grafika FHD IPS, ustawienia rozruchowe, regulacja jasności oraz usypianie S3. Tym samym całą modernizację można uznać za zakończoną sukcesem, bez potrzeby dalszej ingerencji w sprawdzoną konfigurację firmware.


mgr Bartłomiej_Speth

Absolwent wydziału Fizyki Uniwersytetu im. Adama Mickiewicza w Poznaniu na kierunku Fizyka z informatyką. Miłośnik komputerów, sprzętu komputerowego oraz otwartego oprogramowania. Specjalizuje się w budowie, naprawach, modyfikacjach laptopów jak i jednostek stacjonarnych. Zapalony PC'towiec od momentu, w którym otrzymał swój pierwszy komputer z procesorem 80286.

0 komentarzy

Dodaj komentarz

Symbol zastępczy awatara

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *