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
- Podstawy
- Flasher
- SPI flash
- flashrom
- Flagi USE dla sys-apps/flashrom Narzędzie do odczytu, zapisu, kasowanie i weryfikacja układów flash ROM
- Dumping i narzędzia do kompilacji
- Dane konfiguracyjne Intela ME i Gigabit Ethernet
- Konfigurowanie i kompilowanie Coreboot
- General Setup
- Mainboard
- Chipset
- Urządzenia
- Generic Drivers
- Security
- Console
- System Tables
- Payloads
- Debugowanie
- Kompilacja
- Flashing coreboot.rom
- Flashowanie wewnętrzne
- Troubleshooting
- Coreboot nie uruchamia się (Broken build)
- Nic się już nie uruchamia (aka SPI chip bricked)
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. |
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.
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
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.
Zawsze upewnij się, że przyczyną nie jest źle skonfigurowany coreboot!
.