Coreboot

Resources
Home

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

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.
Data poskytnutá databází balíčků Gentoo – Poslední aktualizace: 2021-01-27 17:12 Další informace o příznacích USE

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.

Upozornění
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
Upozornění
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.

Poznámka
Vždy se ujistěte, že příčinou není špatně nakonfigurovaný coreboot!

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.