Coreboot

Resources
Home

Coreboot jest wolnym i otwartym firmware, który ma być szybkim, bezpiecznym i elastycznym zamiennikiem UEFI. Ten przewodnik pokaże, jak zainstalować coreboot z SeaBIOS na obsługiwanych urządzeniach, obsługę narzędzi przestrzeni użytkownika i użycie flashrom.

Wspierany sprzęt

Istnieją różne typy architektur i wspieranego sprzętu. W pełni aktualna tabela jest dostępna pod poniższym linkiem. W poniższej tabeli znajduje się kilka dobrze obsługiwanych urządzeń, które są mniej lub bardziej niedawno wydane. Jeśli używane jest starsze urządzenie, może być możliwe usunięcie wszystkich własnościowych binarnych blobów. W tym celu należy skorzystać z przewodnika libreboot.

.

.

.

.

.

Hardware Supported Blob Free Native RAM Init Native Graphics Init Możliwość flashowania przez sprzęt Możliwość flashowania przez oprogramowanie Potrzebne lutowanie
Lenovo Thinkpad T530 Tak / obecnie uszkodzony Nie Tak Częściowo Tak Częściowo / nie z OEM BIOS . Yes
Lenovo Thinkpad T430s Yes / Currently broken No Yes Partial . Yes Partial / not with OEM BIOS Yes
Lenovo Thinkpad X230 Yes No . Yes Partial Yes Partial / not with OEM BIOS No
Lenovo Thinkpad T420s Tak Nie Tak Częściowo Tak Częściowo / nie z OEM BIOS Nie
Lenovo Thinkpad T420 No / WIP Nie Tak Częściowo Tak Częściowo / nie z OEM BIOS Nie
Lenovo Thinkpad T520 Yes No Yes Partial Yes . Częściowo / nie z OEM BIOS Nie
Lenovo Thinkpad X220 Tak Nie Tak Częściowo Tak Częściowo / nie z BIOS-em OEM Nie
Lenovo Thinkpad X220 Tak No Yes Partial Yes Partial / not with OEM BIOS No
Lenovo Thinkpad T410 Nie / WIP Nie Tak Częściowy Tak Częściowy / nie z OEM BIOS Nie
Lenovo Thinkpad T510 Nie / WIP Nie Tak Częściowo Tak Częściowy / nie z OEM BIOS Nie
Lenovo Thinkpad X201 Tak / Obecnie uszkodzony Nie Tak Częściowo Tak Częściowo / nie z OEM BIOS Nie
Apple Macbook Air 4,2 Tak Nie Tak Nie Tak Częściowy / nie z OEM BIOS Nie

Podstawy

Ogólnie rzecz biorąc, układ flash musi znajdować się na płycie wybranego sprzętu. Jest to ważne, ponieważ sprzedawca zazwyczaj blokuje układ flash przez miękką blokadę. Przewodniki do zlokalizowania chipu są zazwyczaj na coreboot wiki. Ten przewodnik zakłada, że urządzenie zawiera układ SPI flash, który wymaga klipsa do podłączenia do flashera.

Flasher

Jako flashera można łatwo użyć Raspberry Pi. Każdy model i rewizja wystarczy, ale należy pamiętać, że wcześniejsze nie mają wystarczająco dużo pamięci RAM, aby skompilować coreboot samodzielnie. Jeśli używasz jednego z nich, upewnij się, że skopiujesz dump układu flash na bardziej wydajny komputer. Jeśli układ flash jest oparty na SPI, upewnij się, że masz testclip Pomona SOIC-8 za 15 funtów. Ale jest też wiele innych programatorów. Upewnij się, że masz też kilka przewodów debugowania.

SPI flash

Są różne typy chipów SPI (lista). Najczęstszym opakowaniem dla tych układów jest SOIC-8, które może być flashowane przez testclip. Czasami te układy są w pakiecie WSON-8; w tym przypadku układ WSON-8 musi być odlutowany i ponownie zlutowany z nowym układem SOIC-8. Jeśli potrzebujesz pomocy przy lutowaniu zapytaj w hackerspaces w pobliżu twojej lokalizacji. Układy SPI są powszechne w rozmiarach od 2MB do 16MB. Często sprzedawcy lutują dwa chipy, aby zaoszczędzić pieniądze.

flashrom

Flagi USE dla sys-apps/flashrom Narzędzie do odczytu, zapisu, kasowanie i weryfikacja układów flash ROM

atahpt Obsługa kontrolera ATA/RAID Highpoint (HPT)
atapromise . Obsługa kontrolerów Promise PDC2026x (FastTrak/Ultra)
atavia Obsługa kontrolerów VIA VT6421A SATA
buspirate-spi Włączenie Bus Pirate SPI programator
ch341a-spi Włącz programator SPI WCH CH341A
dediprog Obsługa Dediprog SF100
developerbox-spi . Enable Devloperbox SPI recovery support
digilent-spi Enable support for Digilent iCEblink40 development board
drkaiser Enable Dr. Kaiser programmer
dummy Enable dummy tracing
ene-lpc Enable ENE LPC interface keyboard controller
ft2232-spi Enable ftdi programmer, flashowanie przez interfejs USB FTDI/SPI
gfxnvidia Włącz programator NVIDIA
internal Włącz wsparcie wewnętrzne/wbudowane
internal-dmi Włącz wewnętrzne dekodowanie DMI zamiast używania sys-apps/dmidecode
it8212 Wsparcie dla kontrolerów ITE IT8212F ATA/RAID
jlink-spi Wsparcie dla SEGGER J-Link i kompatybilnych urządzeń
linux-mtd Włączenie obsługi urządzeń mtd SPI flash w systemie Linux
linux-spi Włączenie obsługi interfejsu spidev w przestrzeni użytkownika systemu Linux
lspcon-i2c-spi Włączenie obsługi translatora protokołów Parade lspcon USB-C do HDMI translator protokołu
mec1308 Włączenie obsługi wbudowanego kontrolera Microchip MEC1308
mstarddc-spi Obsługa SPI flash ROM dostępnych przez DDC w wyświetlaczach wyposażonych w MSTAR
nic3com Włączenie programatora 3Com NIC
nicintel Obsługa kart NIC firmy Intel
nicintel-eeprom Obsługa pamięci EEPROM w gigabitowych kartach sieciowych Intel
nicintel-spi Obsługa SPI w kartach NIC Intel
nicnatsemi Obsługa dla National Semiconductor NICs
nicrealtek Wsparcie dla Realtek NICs
ogp-spi Włącz wsparcie dla OGP (Open Graphics Project) SPI flashing
pickit2-spi Wsparcie dla SPI flash ROM dostępnych przez Microchip PICkit2
pony-spi Włączenie wsparcia dla SI-Prog like hardware by Lancos
raiden-debug-spi Włączenie ChromiumOS Servo DUT debug board
rayer-spi Wsparcie sprzętowe dla RayeR SPIPGM
realtek-mst-i2c-spi Włączenie wsparcia dla Realtek MultiStream Transport (MST)
Włączenie wsparcia dla Realtek MultiStream Transport (MST)
satamv Włącz programator dla kontrolerów Marvell SATA
satasii Włącz programator dla kontrolerów SiI SATA
serprog Włącz programator Serial Flasher
static !!!!nie ustawiaj tego podczas bootstrap’u !!! Powoduje, że binarki są linkowane statycznie zamiast dynamicznie
stlinkv3-spi Włącz programator SPI używając STLINK-V3
tools Zainstaluj ich_descriptor_tool, narzędzie do czytania obrazów SPI-flash w trybie deskryptora dla chipsetów Intela
usbblaster-spi Włącz wsparcie dla kluczy Altera USB-Blaster
wiki Włącz informacje wiki, jak obsługiwane urządzenia itp.
Dane dostarczone przez Gentoo Package Database – Ostatnia aktualizacja: 2021-01-27 17:12 Więcej informacji o flagach USE

flashrom jest najczęściej używany do zrzucania i zapisywania na układach flash. Musi być zainstalowany na flasherze, lub na maszynie, do której flasher jest podłączony.

Przydatne jest zainstalowanie flashroma na systemie, który będzie flashowany, ponieważ raz coreboot jest początkowo flashowany, może być ponownie flashowany wewnętrznie, bez demontażu lub użycia flashera.

root #emerge --ask sys-apps/flashrom

Teraz maszyna musi być rozmontowana. Postępuj zgodnie z instrukcją, lub przewodnikiem online, aż do uzyskania dostępu do układu flash, a następnie załóż klips i podłącz go do flashera.

Ostrzeżenie
Upewnij się, że WSZYSTKIE źródła zasilania są odłączone od maszyny, oprócz baterii CMOS. Możliwe jest usmażenie płyt głównych, jeśli są one podłączone podczas flashowania.

Po podłączeniu układu flash do flashera, użyj flashroma, aby zrzucić zawartość układu flash.

root #flashrom -p linux_spi:dev=/dev/spidev0.0 -r flash.bin
root #flashrom -p linux_spi:dev=/dev/spidev0.0 -r flash2.bin
root #diff flash.bin flash2.bin

Ważne jest, aby wykonać wiele zrzutów, na wypadek gdyby wystąpił błąd połączenia. Po uzyskaniu prawidłowego zrzutu, można bezpiecznie odłączyć flasher na razie, jeśli jest taka potrzeba. Pamiętaj, że jeśli uruchomiony na Raspberry Pi v1, nie będzie miał wystarczająco dużo pamięci RAM do kompilacji, więc w tym momencie zrzut powinien być przeniesiony do innej maszyny. Możliwe jest użycie komputera, z którego został zrzucony układ flash, chociaż będzie to wymagało ponownego montażu i kolejnego demontażu później.

Dumping i narzędzia do kompilacji

Teraz repozytorium git coreboot musi zostać sklonowane do katalogu roboczego, ponieważ zawiera narzędzia wymagane do dalszego działania. Należy również utworzyć katalogi dla konkretnego producenta i modelu.

user $git clone --recursive https://review.coreboot.org/coreboot.git
user $cd coreboot
user $mkdir -p 3rdparty/blobs/mainboard/<manufacturer>/<model>

Zastąp <manufacturer> i <model> odpowiednio swoim producentem i modelem (np.np. lenovo/x220).

Kolejnym krokiem jest wyodrębnienie regionów ze zrzutu pamięci flash. Regiony są podobne do partycji, i są układem flash zawierającym deskryptor flash, który może być postrzegany jako tablica partycji dla SPI flash z pewnymi dodatkowymi właściwościami. Ten deskryptor jest odczytywany przez program ifdtool, który będzie użyty do uzyskania poszczególnych partycji.

Najpierw ifdtool musi zostać skompilowany. Jego źródła znajdują się pod źródłami coreboota, więc cd do katalogu, do którego sklonowano coreboota.

user $cd util/ifdtool
user $make

Dobrym pomysłem jest zainstalowanie go globalnie, ale nie jest to konieczne.

root #make install

Potem, cd z powrotem do miejsca gdzie jest flash.bin.

user $ifdtool -x flash.bin

To wydrukuje tablicę partycji, i wyodrębni kilka plamek. Standardowa tablica partycji może wyglądać tak:

.

.

Region Opis Start Region End Region
0 Deskryptor Flash 0x000000 0x00000fff
1 BIOS (Firmware) 0x00500000 0x00bfffff
2 ME ME 0x00003000 0x004fffff
3 GbE 0x00001000 0x00002fff
4 Dane platformy nieużywane nieużywane

Dane konfiguracyjne Intela ME i Gigabit Ethernet

Zauważ, że powyższa tabela zawiera ME i GbE. Są to binarne bloby, które inicjalizują części komputera (w tym przypadku Intel Management Engine i Gigabit Ethernet). Na starszych urządzeniach można je bezpiecznie usunąć za pomocą libreboot, ale na Sandy Bridge i nowszych, są one wymagane do prawidłowego działania komputera. Ponieważ na tych płytach wymagany jest Intel ME, musi on zostać wyodrębniony. Jednak coreboot może drastycznie zmniejszyć jego rozmiar, usuwając jego dostęp do sieci i zasobów systemowych. Jest to zalecane, ponieważ nie tylko poprawia bezpieczeństwo, ale także pozostawia więcej miejsca na chipie flash dla innych ładunków. Dane konfiguracyjne Gigabit Ethernet są specyficzne dla każdej maszyny i jako takie również muszą zostać wyodrębnione z układu flash.

W tym momencie katalog roboczy powinien zawierać cztery nowe pliki w formacie flashregion_*.bin. Powinny one odpowiadać tablicy, która została wydrukowana. Jak wcześniej wspomniano, deskryptor, Intel ME i GbE blobs są potrzebne. Zmień ich nazwy odpowiednio na descriptor.bin, me.bin i gbe.bin i skopiuj je do coreboot/3rdparty/blobs/mainboard/<manufacturer>/<model>/; katalogu, który został utworzony wcześniej.

Konfigurowanie i kompilowanie Coreboot

Teraz coreboot musi zostać skonfigurowany dla konkretnej maszyny. Najlepiej jest sprawdzić stronę wiki coreboot dla danego urządzenia, jeśli są jakieś określone wymagania. Jako taka, ta strona będzie próbowała wyszczególnić tylko te ustawienia, które muszą być ustawione w większości instalacji. Nie można tego zagwarantować, a niektóre ustawienia mogą powodować konflikty z maszyną.

Najpierw musisz wprowadzić konfigurację. Wykonuje się to w podobny sposób jak konfigurowanie jądra.

user $make nconfig

Alternatywnie, można użyć menuconfig, lub nawet edytować plik konfiguracyjny ręcznie (po wygenerowaniu go przez nconfig/menuconfig).

General Setup

Zalecam włączenie następujących opcji:

  • Use CMOS for configuration values
  • Compress ramstage with LZMA
  • Include the coreboot .config do obrazu ROM
  • Utwórz tabelę znaczników czasu zebranych podczas rozruchu
  • Zbuduj ramstage tak, aby był relokowalny w 32-bitowej przestrzeni adresowej.

Dla urządzeń Sandy Bridge lub nowszych:

  • Allow use of binary-only repository

And if you have previously compiled coreboot, you can reduce further compile times by enabling:

  • Update existing coreboot.rom image

Mainboard

Here, the vendor and model must be selected. Upewnij się, że wpisany jest dokładny model, jeśli dostępne są pochodne (np. X220/X220t). Należy również wybrać rozmiar chipu ROM. Powinien on być podany przez flashrom, ale jeśli nie, można go ustalić sprawdzając rozmiar plików flash.bin.

Chipset

To menu zawiera opcje specyficzne dla chipsetu, a także lokalizacje dla binarnych plamek wyodrębnionych wcześniej. ponieważ jest to w dużej mierze specyficzne dla maszyny, istnieją tylko pewne opcje, które powinny być włączone dla wszystkich. Zalecam włączenie:

  • Enable VMX for virtualization
  • Set lock bit after configuring VMX
  • Beep on fatal error
  • Flash LEDs on fatal error

Te opcje pozwolą na łatwiejsze debugowanie, jeśli masz uszkodzoną lampę błyskową. Można je wyłączyć po utworzeniu znanej działającej konfiguracji.

Następnie, ścieżki muszą być podane w Intel Firmware. Włącz te opcje:

  • Add Intel descriptor.bin file
  • Add Intel ME/TXE firmware
  • Strip down the Intel ME/TXE firmware
  • Add gigabit ethernet firmware

Opcje ścieżek powinny się teraz pojawić. Powinny one pasować do nazw używanych poprzednio, ale jeśli nie, popraw je tak, aby tak było.

Urządzenia

Ten obszar dotyczy w dużej mierze grafiki, zwłaszcza w kontekście laptopów. Osobiście mam Graphics Initialisation ustawione na „Use native graphics init”, a Display/Framebuffer Mode na „Linear „high-resolution” framebuffer”. Reszta tych opcji powinna być już ustawiona dla danej maszyny. Jeśli konkretne urządzenie wymaga obrazu BIOSu VGA, postępuj zgodnie z wiki coreboot.

Generic Drivers

Często włączam:

  • PS/2 keyboard init

Jeśli urządzenie ma kartę Intel PCIe WiFi, włącz opcję

  • Support Intel PCI-e WiFi adapters

Security

Często zostawiam to w spokoju, ponieważ obecnie zawiera tylko opcje Verified Boot, ale jeśli wsparcie dla tego jest wymagane, włącz je.

Console

Ta sekcja zawiera opcje dotyczące debugowania konsol. Włączenie niektórych opcji może być przydatne, szczególnie jeśli występują problemy. Ja włączyłem:

  • Squelch AP CPUs from early console.
  • Send console output to a CBMEM buffer
  • Show POST codes on the debug console

System Tables

Enable Generate SMBIOS tables, jedyna opcja tutaj.

Payloads

W tej sekcji można wybrać payload. Ta strona opisuje szczegółowo jak skonfigurować SeaBIOS, ponieważ ma on największą kompatybilność z systemami operacyjnymi, ale możliwe jest również użycie GRUB2 dla szybszego rozruchu, a nawet umieszczenie jądra na chipie flash (jeśli jest wystarczająco dużo miejsca).

Wybierz następujące opcje dla prawidłowej konfiguracji SeaBIOS:

  • Dodaj ładunek > SeaBIOS
  • Wersja SeaBIOS > master
  • Hardware init podczas wykonywania opcji ROM
  • Use LZMA compression for payloads

Można także włączyć kilka drugorzędnych ładunków. Mogą one być użyte do debugowania i zmiany opcji. Zalecaną opcją jest nvramcui, która działa w sposób podobny do standardowego menu opcji BIOS-u.

Debugowanie

Te opcje są w dużej mierze przeznaczone dla deweloperów. Zwykli użytkownicy nie muszą włączać niczego w tym podmenu.

Kompilacja

Teraz, gdy konfiguracja jest zakończona, coreboot musi zostać skompilowany. Najpierw musi zostać zbudowany kompilator krzyżowy:

user $make crossgcc-i386 CPUS=${nproc}

Wymaga to zainstalowania dev-lang/gnat-gpl, w przeciwnym razie wiele funkcji nie będzie działać poprawnie.

Po wykonaniu tej czynności należy skompilować IASL:

user $make iasl

I wreszcie skompilować coreboot

user $make

Flashing coreboot.rom

W ten sposób w katalogu build/ powinien powstać plik o nazwie coreboot.rom. To jest ostateczny obraz, który musi zostać zflashowany. Skopiuj go na flasher, jeśli jeszcze go nie ma, rozmontuj urządzenie docelowe i podłącz flasher do układu flash.

Na flasherze, użyj flashrom do flashowania:

root #flashrom -p linux_spi:dev=/dev/spidev0.0 -w coreboot.rom
root #flashrom -p linux_spi:dev=/dev/spidev0.0 -v coreboot.rom

Druga komenda powinna zwrócić VERIFIED. Jeśli tak, coreboot został pomyślnie zainstalowany na urządzeniu.

Flashowanie wewnętrzne

Gdy coreboot został już wstępnie zflashowany, może zostać później zflashowany wewnętrznie, bez potrzeby korzystania z zewnętrznego urządzenia do flashowania. Aby to zrobić, po skompilowaniu nowego coreboot.rom, wystarczy wykonać następujące czynności:

root #flashrom -p internal:laptop=force_I_want_a_brick -w coreboot.rom
Ostrzeżenie
Pomimo, że zostało to przetestowane na kilku laptopach, może nie działać na używanym urządzeniu. Upewnij się, że sprawdziłeś, czy inni odnieśli sukces lub porażkę z wewnętrznym flasherem dla konkretnego modelu.

Troubleshooting

Coreboot nie uruchamia się (Broken build)

Jeśli coreboot nie uruchamia się, zazwyczaj oznacza to, że albo nie jest skonfigurowany poprawnie, albo brakuje mu ładunku. Upewnij się, że został wybrany odpowiedni payload, który jest poprawnie skompilowany i poprawnie skonfigurowany.

Możliwe jest również, że coreboot działa poprawnie, ale komponent graficzny nie. Może to być spowodowane używaniem natywnego gfx init. Spróbuj zrzucić BIOS VGA i użyć go zamiast tego. Może być też odwrotnie; spróbuj przełączyć się z VGA BIOS na natywny gfx init. W ostateczności spróbuj użyć trybu tekstowego Legacy VGA dla trybu bufora ramki w sekcji Devices/Display.

Nic się już nie uruchamia (aka SPI chip bricked)

Jest to zwykle spowodowane pozostawieniem maszyny włączonej podczas zrzucania lub flashowania zewnętrznym flasherem. Jeśli maszyna nie włącza się w ogóle (Żadne światła, wentylatory lub wyświetlacz nie włączają się przy starcie), może to oznaczać, że maszyna jest uszkodzona. Naprawa może być możliwa poprzez zakup nowego flash chipa (upewnij się, że jest kompatybilny – staraj się używać tego samego producenta i modelu, aby uzyskać najlepsze rezultaty) i flashowanie go oryginalnym BIOSem lub ROMem coreboot. Często wymaga to bardzo delikatnego lutowania i nie jest przeznaczone dla osób o słabym sercu. Może to oznaczać konieczność zakupu nowej maszyny, lub przynajmniej nowej płyty głównej.

Uwaga
Zawsze upewnij się, że przyczyną nie jest źle skonfigurowany coreboot!

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.