Coreboot je svobodný firmware s otevřeným zdrojovým kódem, jehož cílem je rychlá, bezpečná a flexibilní náhrada UEFI. Podporuje několik užitečných zatížení, od implementace systému BIOS (SeaBIOS), přes instalaci GRUB2 až po kompletní linuxové jádro.
- Podporovaný hardware
- Podporovaný hardware
- Základy
- Flasher
- SPI flash
- flashrom
- USE flags for sys-apps/flashrom Utility for reading, write, mazání a ověřování čipů flash ROM
- Dumping a kompilační nástroje
- Intel ME a Gigabit Ethernet Configuration Data
- Konfigurace a kompilace systému Coreboot
- Obecné nastavení
- Hlavní deska
- Chipset
- Zařízení
- Generické ovladače
- Zabezpečení
- Konzola
- Systémové tabulky
- Payloads
- Debugging
- Kompilování
- Flash coreboot.rom
- Flashování přes interní
- Řešení problémů
- Coreboot nenaběhne (Broken build)
- Už se nic nezavádí (aka SPI chip bricked)
Podporovaný hardware
Tento návod ukáže, jak nainstalovat coreboot s užitečným zatížením SeaBIOS na podporovaná zařízení, manipulaci s nástroji uživatelského prostoru a použití flashrom.
Podporovaný hardware
Existují různé typy architektur a podporovaného hardwaru. Plně aktuální tabulka je k dispozici na následujícím odkazu. V následující tabulce jsou uvedena některá dobře podporovaná zařízení, která byla více či méně nedávno vydána. Pokud se používá starší zařízení, je možné odstranit všechny proprietární binární bloby. K tomu použijte příručku libreboot.
Hardware | Podporované | Blob Free | Native RAM Init | Native Graphics Init | Flashovatelné přes hardware | Flashovatelné přes software | Potřeba odpájení | |
---|---|---|---|---|---|---|---|---|
Lenovo Thinkpad T530 | Ano / v současné době nefunkční | Ne | Ano | Částečně | Ano | Částečně / ne s OEM BIOS | Ano | |
Lenovo Thinkpad T430s | Ano / v současné době nefunkční | Ne | Ano | Částečný | Ano | Částečný / není s OEM BIOSem | Ano | |
Lenovo Thinkpad X230 | Ano | Ne | Ano | Částečně | Ano | Částečně / ne s OEM BIOSem | Ne | |
Lenovo Thinkpad T420s | Ano | Ne | Ano | Částečný | Ano | Částečný / není s OEM BIOS | Ne | |
Lenovo Thinkpad T420 | Ne / WIP | Ne | Ano | Částečný | Ano | Částečný / není s OEM BIOS | Ne | |
Lenovo Thinkpad T520 | Ano | Ne | Ano | Částečně | Ano | Ano | Částečný / ne s OEM BIOSem | Ne |
Lenovo Thinkpad X220 | Ano | Ne | Ano | Částečný | Ano | Částečný / ne s OEM BIOSem | Ne | |
Lenovo Thinkpad X220 | Ano | Ne | Ano | Částečný | Ano | Částečný / ne s OEM BIOS | Ne | |
Lenovo Thinkpad T410 | Ne / WIP | Ne | Ano | Částečný | Ano | Částečný / není s OEM BIOS | Ne | |
Lenovo Thinkpad T510 | Ne / WIP | Ne | Ano | Částečný | Ano | Částečný / není s OEM BIOSem | Ne | |
Lenovo Thinkpad X201 | Ano / v současné době nefunkční | Ne | Ano | Částečný | Ano | Částečný / není s OEM BIOSem | Ne | |
Apple Macbook Air 4,2 | Ano | Ne | Ano | Ne | Ano | Částečný / ne s OEM BIOSem | Ne |
Základy
Všeobecně se flash čip musí nacházet na desce vybraného hardwaru. To je důležité, protože výrobce obvykle uzamkne čip flash pomocí měkkého uzamčení. Návody k nalezení čipu najdete zpravidla na wiki coreboot. Tento návod předpokládá, že zařízení obsahuje čip SPI flash, který vyžaduje svorku pro připojení k flasheru.
Flasher
Jako flasher lze snadno použít Raspberry Pi. Stačí jakýkoli model a revize, ale upozorňujeme, že starší modely nemají dostatek paměti RAM, aby samy zkompilovaly coreboot. Pokud některý z nich použijete, nezapomeňte si zkopírovat výpis čipu flash na výkonnější počítač. Pokud je flash čip založený na SPI, nezapomeňte si pořídit testovací svorku Pomona SOIC-8 za 15 liber. Existuje však i mnoho dalších programátorů. Nezapomeňte si také pořídit ladicí vodiče.
SPI flash
Existují různé typy SPI čipů (seznam). Nejběžnějším pouzdrem pro tyto čipy je SOIC-8, které lze flashovat pomocí testclip. Někdy jsou tyto čipy v pouzdře WSON-8; v takovém případě je třeba čip WSON-8 odpájet a přepájet novým SOIC-8. Pokud potřebujete pomoc s pájením, zeptejte se na hackerspaces ve vašem okolí. Čipy SPI jsou běžné ve velikostech od 2 MB do 16 MB. Prodejci často pájejí dva čipy, aby ušetřili peníze.
flashrom
USE flags for sys-apps/flashrom Utility for reading, write, mazání a ověřování čipů flash ROM
atahpt |
Podpora řadiče Highpoint (HPT) ATA/RAID | |
atapromise |
Podpora řadiče Promise PDC2026x (FastTrak/Ultra) | |
atavia |
Podpora řadiče SATA VIA VT6421A | |
buspirate-spi |
Povolení sběrnice Pirate SPI programátor | |
ch341a-spi |
Povolit programátor WCH CH341A SPI | |
dediprog |
Podpora Dediprog SF100 | |
developerbox-spi |
Povolit podporu Devloperbox SPI recovery | |
digilent-spi |
Povolit podporu vývojové desky Digilent iCEblink40 | |
drkaiser |
Povolit Dr. Kaiser programátor | |
dummy |
Povolit dummy tracing | |
ene-lpc |
Povolit ENE LPC interface keyboard controller | |
ft2232-spi |
Povolit ftdi programátor, blikání přes rozhraní FTDI/SPI USB | |
gfxnvidia |
Povolit programátor NVIDIA | |
internal |
Povolit interní/onboard podporu | |
internal-dmi |
Povolit interní dekódování DMI namísto použití sys.apps/dmidecode | |
it8212 |
Podpora řadičů ITE IT8212F ATA/RAID | |
jlink-spi |
Podpora řadičů SEGGER J-Link a kompatibilních zařízení | |
linux-mtd |
Povolit podporu pro zařízení Linux mtd SPI flash | |
linux-spi |
Povolit podporu pro rozhraní Linux userspace spidev | |
lspcon-i2c-spi |
Povolit podporu pro Parade lspcon USB-C to HDMI protocol translator | |
mec1308 |
Enable support for Microchip MEC1308 embedded controller | |
mstarddc-spi |
Support for SPI flash ROMs accessible through DDC in MSTAR-vybavených displejích | |
nic3com |
Povolit programátor 3Com NIC | |
nicintel |
Podpora pro Intel NIC | |
nicintel-eeprom |
Podpora pamětí EEPROM na gigabitových síťových kartách Intel | |
nicintel-spi |
Podpora rozhraní SPI na síťových kartách Intel | |
nicnatsemi |
Podpora rozhraní SPI na síťových kartách Intel. pro síťové karty National Semiconductor | |
nicrealtek |
Podpora pro síťové karty Realtek | |
ogp-spi |
Povolení podpory OGP (Open Graphics Project) SPI flash | |
pickit2-spi |
SUpport for SPI flash ROMs accessible via Microchip PICkit2 | |
pony-spi |
Povolit podporu pro SI-Prog jako hardware Lancos | |
raiden-debug-spi |
Povolit ladicí desku ChromiumOS Servo DUT | |
rayer-spi |
Hardwarová podpora RayeR SPIPGM | |
realtek-mst-i2c-spi |
Povolení podpory Realtek MultiStream Transport (MST) | . |
satamv |
Povolit programátor pro řadiče Marvell SATA | |
satasii |
Povolit programátor pro řadiče SiI SATA | |
serprog |
Povolit programátor Serial Flasher | |
static |
!!nenastavujte to během bootstrapu!!! Způsobí statické linkování binárních souborů místo dynamického | |
stlinkv3-spi |
Povolit SPI programátor pomocí STLINK-V3 | |
tools |
Instalovat ich_descriptor_tool, nástroj pro čtení obrazů SPI-flash v deskriptorovém režimu pro čipové sady Intel | |
usbblaster-spi |
Povolit podporu klíčů Altera USB-Blaster | |
wiki |
Povolit informace z wiki, jako jsou podporovaná zařízení atd. |
flashrom se nejčastěji používá k výpisu a zápisu na čipy flash. Musí být nainstalován na flashromu nebo na stroji, ke kterému je flashrom připojen.
Je užitečné nainstalovat flashrom na systém, na který se bude flashovat, protože jakmile je coreboot na začátku flashován, může být interně přeflashován bez demontáže nebo použití flashromu.
root #
emerge --ask sys-apps/flashrom
Nyní je třeba stroj demontovat. Postupujte podle příručky nebo online průvodce, dokud nebude přístupný čip blesku, a poté připevněte svorku a připojte ji k blesku.
Ujistěte se, že jsou od stroje odpojeny VŠECHNY zdroje napájení kromě baterie CMOS. Je možné usmažit základní desky, pokud jsou připojeny během flashování.
Pokud je flashovací čip připojen k flashovači, použijte flashrom k výpisu obsahu flashovacího čipu.
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
Je důležité provést více výpisů pro případ, že by došlo k chybě připojení. Jakmile je získán správný dump, je možné v případě potřeby blikač prozatím bezpečně odpojit. Nezapomeňte, že pokud běží na Raspberry Pi v1, nebude mít dostatek paměti RAM pro kompilaci, takže v tomto okamžiku by měl být dump přenesen do jiného počítače. Je možné použít počítač, ze kterého byl proveden dump flash čipu, ačkoli to bude vyžadovat opětovné sestavení a později další demontáž.
Dumping a kompilační nástroje
Nyní je třeba naklonovat git repozitář coreboot do pracovního adresáře, protože obsahuje nástroje potřebné k pokračování. Je třeba také vytvořit adresáře pro konkrétního výrobce a model.
user $
git clone --recursive https://review.coreboot.org/coreboot.git
user $
cd coreboot
user $
mkdir -p 3rdparty/blobs/mainboard/<manufacturer>/<model>
Na místo <manufacturer> a <model> dosaďte svého výrobce, resp. model (např.Např. lenovo/x220).
Dalším krokem je extrakce oblastí výpisu paměti flash. Regiony jsou podobné oddílům a jsou čipem flash obsahujícím deskriptor flash, který lze považovat za tabulku oddílů pro SPI flash s některými dalšími vlastnostmi. Tento deskriptor přečte program ifdtool, pomocí kterého získáme jednotlivé oddíly.
Nejprve musí být zkompilován program ifdtool. Jeho zdrojové kódy jsou obsaženy v adresáři coreboot, takže cd do adresáře, kam byl coreboot naklonován.
user $
cd util/ifdtool
user $
make
Je dobré nainstalovat globálně, ale není to nutné.
root #
make install
Poté cd zpět do místa, kde je flash.bin.
user $
ifdtool -x flash.bin
Tímto se vypíše tabulka oddílů a extrahují se nějaké bloby. Standardní tabulka oddílů může vypadat takto:
Region | Popis | Start Region | End Region |
---|---|---|---|
0 | Flash Descriptor | 0x00000000 | 0x00000fff |
1 | BIOS (Firmware) | 0x00500000 | 0x00bfffff |
2 | ME | 0x00003000 | 0x004fffff |
3 | GbE | 0x00001000 | 0x00002fff |
4 | Platform Data | nepoužité | nepoužité |
Intel ME a Gigabit Ethernet Configuration Data
Všimněte si, že výše uvedená tabulka obsahuje ME a GbE. Jedná se o binární bloby, které inicializují části počítače (V tomto případě Intel Management Engine a Gigabit Ethernet). U starších zařízení je lze bezpečně odstranit pomocí libreboot, ale u Sandy Bridge a novějších zařízení jsou pro správný chod počítače nutné. Protože je na těchto deskách vyžadován Intel ME, musí být odstraněn. Coreboot však může jeho velikost drasticky zmenšit tím, že odstraní jeho přístup k síti a systémovým prostředkům. To se doporučuje, protože to nejen zvyšuje bezpečnost, ale také ponechává více místa na čipu flash pro další užitečné soubory. Konfigurační data gigabitového Ethernetu jsou specifická pro každý počítač a jako taková musí být také extrahována z čipu flash.
V tomto okamžiku by měl pracovní adresář obsahovat čtyři nové soubory, které mají formát flashregion_*.bin. Ty by se měly mapovat na tabulku, která byla vypsána. Jak již bylo zmíněno, jsou potřeba deskriptor, Intel ME a GbE bloby. Přejmenujte je na descriptor.bin, me.bin a gbe.bin v tomto pořadí a zkopírujte je do adresáře coreboot/3rdparty/blobs/mainboard/<manufacturer>/<model>/; adresáře, který byl vytvořen dříve.
Konfigurace a kompilace systému Coreboot
Nyní je třeba nakonfigurovat systém coreboot pro konkrétní počítač. Nejlepší je podívat se na stránku coreboot wiki pro dané zařízení, pokud existují nějaké určité požadavky. Tato stránka jako taková se pokusí podrobně popsat pouze nastavení, která musí být nastavena u většiny instalací. To nelze zaručit a některá nastavení mohou způsobit konflikty se zařízením.
Nejprve je třeba zadat konfiguraci. To se provádí podobně jako konfigurace jádra.
uživatel $
make nconfig
Alternativně lze použít menuconfig nebo dokonce upravit konfigurační soubor ručně (poté, co byl vygenerován pomocí nconfig/menuconfig).
Obecné nastavení
Doporučuji povolit následující:
- Používat CMOS pro konfigurační hodnoty
- Komprimovat ramstage pomocí LZMA
- Vložit coreboot .config do obrazu ROM
- Vytvořte tabulku časových značek shromážděných během zavádění systému
- Sestavte ramstage tak, aby byla relokovatelná v 32bitovém adresovém prostoru.
Pro zařízení Sandy Bridge nebo novější:
- Povolit použití pouze binárního úložiště
A pokud jste již dříve zkompilovali coreboot, můžete zkrátit další časy kompilace povolením:
- Aktualizovat existující obraz coreboot.rom
Hlavní deska
Tady je třeba vybrat výrobce a model. Ujistěte se, že je zadán přesný model, pokud jsou k dispozici odvozeniny (např. X220/X220t). Měla by být vybrána také velikost čipu ROM. Ta by měla být vypsána programem flashrom, ale pokud ne, lze ji zjistit kontrolou velikosti souboru flash.bin.
Chipset
Tato nabídka obsahuje volby specifické pro čipovou sadu a také umístění pro binární bloby extrahované dříve. protože je to do značné míry specifické pro daný stroj, měly by být povoleny pouze některé volby napříč všemi počítači. Doporučuji povolit:
- Povolit VMX pro virtualizaci
- Nastavit bit zámku po konfiguraci VMX
- Pípnutí při fatální chybě
- Diodové kontrolky při fatální chybě
Ty umožní snadnější ladění, pokud máte špatný flash. Lze je vypnout, jakmile je vytvořena známá funkční konfigurace.
Dále je třeba uvést cesty v části Intel Firmware. Povolte tyto možnosti:
- Přidat soubor Intel descriptor.bin
- Přidat firmware Intel ME/TXE
- Přidat firmware Intel ME/TXE
- Přidat firmware gigabitového ethernetu
Měly by se nyní objevit možnosti cest. Měly by odpovídat dříve používaným názvům, ale pokud ne, opravte je tak, aby odpovídaly.
Zařízení
Tato oblast se z velké části týká grafiky, zejména v souvislosti s notebooky. Osobně mám inicializaci grafiky nastavenou na „Use native graphics init“ a Display/Framebuffer Mode na „Linear „high-resolution“ framebuffer“. Zbytek těchto voleb by měl být nastaven již pro daný stroj. Pokud konkrétní zařízení vyžaduje obraz systému VGA BIOS, postupujte podle wiki coreboot.
Generické ovladače
Často povoluji:
- PS/2 keyboard init
Pokud má zařízení kartu Intel PCIe WiFi, povolte volbu
- Podpora adaptérů Intel PCI-e WiFi
Zabezpečení
Často ji nechávám být, protože v současné době obsahuje pouze volby Verified Boot, ale pokud je její podpora vyžadována, povolte ji.
Konzola
Tato část obsahuje možnosti týkající se ladění konzol. Může být užitečné povolit některé volby, zejména pokud dochází k problémům. Já jsem povolil:
- Vypínání procesorů AP z počáteční konzoly.
- Odesílání výstupu z konzoly do vyrovnávací paměti CBMEM
- Zobrazování kódů POST na ladicí konzole
Systémové tabulky
Povolit Generování tabulek SMBIOS, což je zde jediná možnost.
Payloads
V této části lze zvolit payload. Na této stránce bude podrobně popsáno nastavení systému SeaBIOS, protože má největší kompatibilitu s operačními systémy, ale je také možné použít GRUB2 pro rychlejší zavádění systému, nebo dokonce umístit jádro na čip flash (pokud je dostatek místa).
Pro správné nastavení systému SeaBIOS zvolte následující možnosti:
- Přidat užitečné zatížení > SeaBIOS
- Verze systému SeaBIOS > master
- Hardware init při provádění volitelných ROM
- Použít kompresi LZMA pro užitečné zatížení
Možná bude také vhodné povolit některé sekundární užitečné zatížení. Ty lze použít pro ladění a změnu voleb. Doporučenou volbou je nvramcui, která se chová podobně jako standardní nabídka voleb BIOSu.
Debugging
Tyto volby jsou z velké části určeny pro vývoj. Běžní uživatelé nemusí v této podnabídce nic povolovat.
Kompilování
Když je konfigurace hotová, je třeba coreboot zkompilovat. Nejprve musí být sestaven křížový kompilátor:
uživatel $
make crossgcc-i386 CPUS=${nproc}
To vyžaduje, aby byl nainstalován dev-lang/gnat-gpl, jinak mnoho funkcí nebude fungovat správně.
Jakmile je toto hotovo, zkompilujte IASL:
user $
make iasl
A nakonec zkompilujte coreboot
user $
make
Flash coreboot.rom
Tím by měl v adresáři build/ vzniknout soubor s názvem coreboot.rom. Jedná se o finální obraz, který je třeba flashnout. Zkopírujte jej do flasheru, pokud v něm již není, rozeberte cílové zařízení a připojte flasher k flashovacímu čipu.
Na flasheru použijte příkaz flashrom k flashování:
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -w coreboot.rom
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -v coreboot.rom
Druhý příkaz by měl vrátit VERIFIED. Pokud ano, coreboot byl úspěšně flashován do zařízení.
Flashování přes interní
Pokud byl coreboot původně flashován, může být později flashován interně, bez potřeby externího flashovacího zařízení. K tomu stačí po zkompilování nového souboru coreboot.rom provést následující:
root #
flashrom -p internal:laptop=force_I_want_a_brick -w coreboot.rom
Ačkoli byl tento postup testován na několika noteboocích, nemusí na použitém zařízení fungovat. Ujistěte se, že ostatní měli s interním flasherem pro konkrétní model úspěch nebo neúspěch.
Řešení problémů
Coreboot nenaběhne (Broken build)
Pokud coreboot nenaběhne, obvykle to znamená, že buď není správně nakonfigurován, nebo mu chybí užitečné zatížení. Ujistěte se, že bylo vybráno správné užitečné zatížení, které je správně zkompilováno a samo správně nakonfigurováno.
Je také možné, že coreboot funguje správně, ale grafická komponenta ne. To může být způsobeno použitím nativního gfx init. Zkuste provést dumping VGA BIOSu a použít jej místo něj. Může to být také naopak; zkuste přepnout z VGA BIOSu na nativní gfx init. Jako poslední možnost zkuste použít textový režim Legacy VGA pro režim framebufferu v nabídce Devices/Display.
Už se nic nezavádí (aka SPI chip bricked)
Obvykle je to způsobeno tím, že necháte počítač zapnutý během dumpingu nebo flashování externím flasherem. Pokud se stroj vůbec nezapne (při startu se nezapnou žádná světla, ventilátory ani displej), může to znamenat, že je stroj bricknutý. Oprava může být možná zakoupením nového flash čipu (ujistěte se, že je kompatibilní – pro dosažení nejlepších výsledků se snažte použít stejného výrobce a model) a jeho flashnutím buď s původním BIOSem, nebo s coreboot ROM. To často vyžaduje velmi jemné pájení a není to pro slabé povahy. Může to znamenat nutnost zakoupení nového počítače nebo alespoň nové základní desky.
Vždy se ujistěte, že příčinou není špatně nakonfigurovaný coreboot!
.