Coreboot

Resources
Home

A Coreboot egy ingyenes és nyílt forráskódú firmware, amelynek célja, hogy gyors, biztonságos és rugalmas helyettesítője legyen az UEFI-nek. Többféle hasznos terhelést támogat, a BIOS implementációtól (SeaBIOS) a GRUB2 telepítésen át a teljes linux kernelig.Ez az útmutató megmutatja, hogyan kell telepíteni a coreboot-ot SeaBIOS hasznos terheléssel a támogatott eszközökre, a felhasználói tér eszközeinek kezelését és a flashrom használatát.

Támogatott hardver

A különböző architektúrák és támogatott hardverek vannak. A teljesen naprakész táblázat az alábbi linken érhető el. Az alábbi táblázatban néhány jól támogatott eszköz található, amelyek többé-kevésbé a közelmúltban jelentek meg. Ha egy régebbi eszközt használunk, lehetséges, hogy az összes védett bináris blobot el lehet távolítani. Ehhez használja a libreboot útmutatót.

Hardware Támogatott Blob Free Native RAM Init Native Graphics Init Flashable via Hardware Flashable via Software Desoldering szükséges
Lenovo Thinkpad T530 Igen / Jelenleg hibás Nem Igen Részleges Igen Részleges / nem OEM BIOS-szal Igen
Lenovo Thinkpad T430s Igen / Jelenleg hibás Nem Igen Részleges Igen Részleges / nem OEM BIOS-szal Igen
Lenovo Thinkpad X230 Igen Nem Igen Részlegesen Igen Részlegesen / nem OEM BIOS-szal Nem
Lenovo Thinkpad T420s Igen Nem Igen Részleges Igen Részleges / nem OEM BIOS-szal Nem
Lenovo Thinkpad T420 Nem / WIP Nem Igen Részleges Igen Részleges / nem OEM-mel BIOS Nem
Lenovo Thinkpad T520 Igen Nem Igen Részleges Igen Részleges / nem OEM BIOS-szal Nem
Lenovo Thinkpad X220 Igen Nem Igen Részleges Igen Részleges / nem OEM BIOS-szal Nem
Lenovo Thinkpad X220 Igen Nem Igen Részleges Igen Részleges / nem OEM BIOS-szal Nem
Lenovo Thinkpad T410 Nem / WIP Nem Igen Részleges Igen Részleges / nem OEM BIOS-szal Nem
Lenovo Thinkpad T510 Nem / WIP Nem Igen Részleges Igen Részleges / nem OEM BIOS-szal Nem
Lenovo Thinkpad X201 Igen / Jelenleg hibás Nem Igen Részleges Igen Részleges / nem OEM BIOS-szal Nem
Apple Macbook Air 4,2 Igen Nem Igen Nem Igen Részleges / nem OEM BIOS-szal Nem

Az alapok

A flash chipnek általában a kiválasztott hardver lapján kell lennie. Ez azért fontos, mert a gyártó általában soft lockdown segítségével zárolja a flash chipet. A chip megtalálására vonatkozó útmutatók általában a coreboot wikiben lesznek. Ez az útmutató feltételezi, hogy az eszköz SPI flash chipet tartalmaz, amihez egy klipsz szükséges a flasherhez való csatlakoztatáshoz.

Flasher

Flasherként egy Raspberry Pi könnyen használható. Bármilyen modell és revízió megteszi, de figyelmeztetünk, hogy a korábbiaknak nincs elég RAM-juk a coreboot önálló lefordításához. Ha ilyet használsz, mindenképpen másold át a flash chip dumpját egy nagyobb teljesítményű számítógépre. Ha a flash chip SPI alapú, mindenképpen szerezzen be egy Pomona SOIC-8 tesztklip-et 15 fontért. De sok más programozó is van. Győződjön meg róla, hogy szerezzen be néhány hibakereső vezetéket is.

SPI flash

Az SPI chipeknek különböző típusai vannak (lista). Ezeknek a chipeknek a legelterjedtebb csomagolása a SOIC-8, amelyet tesztclip segítségével lehet flashelni. Néha ezek a chipek WSON-8-as csomagolásban vannak; ebben az esetben a WSON-8-as chipet ki kell forrasztani, és egy új SOIC-8-assal újraforrasztani. Ha segítségre van szükséged a forrasztáshoz, kérdezd meg a lakóhelyedhez közeli hackerspaces-t. Az SPI chipek 2MB – 16MB közötti méretekben gyakoriak. Gyakran az eladók két chipet forrasztanak, hogy pénzt takarítsanak meg.

flashrom

USE flags for sys-apps/flashrom Utility for reading, writing, törléséhez és ellenőrzéséhez

atahpt Highpoint (HPT) ATA/RAID vezérlő támogatása
atapromise atapromise Promise PDC2026x (FastTrak/Ultra) támogatása
atavia VIA VT6421A SATA-vezérlők támogatása
buspirate-spi Enable Bus Pirate SPI programozó
ch341a-spi WCH CH341A SPI programozó engedélyezése
dediprog Dediprog SF100 támogatás
developerbox-spi Enable Devloperbox SPI recovery support
digilent-spi Enable support for Digilent iCEblink40 development board
drkaiser Enable dr. Kaiser programozó
dummy Enable dummy tracing
ene-lpc Enable ENE LPC interface keyboard controller
ft2232-spi Enable ftdi programozó, villogás FTDI/SPI USB interfészen keresztül
gfxnvidia NVIDIA programozó engedélyezése
internal Enable internal/onboard support
internal-dmi Enable internal DMI decoding rather than use sys-apps/dmidecode
it8212 ITE IT8212F ATA/RAID vezérlők támogatása
jlink-spi SEGGER J- támogatása.Link és kompatibilis eszközök
linux-mtd Enable support for Linux mtd SPI flash devices
linux-spi Enable support for Linux userspace spidev interface
lspcon-i2c-spi Enable support for 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- ban.felszerelt kijelzők
nic3com 3Com NIC programozó engedélyezése
nicintel Intel NIC-k támogatása
nicintel-eeprom EEPROM támogatás az Intel Gigabit hálózati kártyákon
nicintel-spi SPI támogatás az Intel hálózati kártyákon
nicnatsemi Támogatás az Intel NIC-ken
nicnatsemi Támogatás National Semiconductor NIC-khez
nicrealtek Realtek NIC-k támogatása
ogp-spi Enable support for OGP (Open Graphics Project) SPI flash
pickit2-spi A Microchip PICkit2-n keresztül elérhető SPI flash ROM-ok támogatása
pony-spi Támogatás engedélyezése SI-Prog like hardware by Lancos
raiden-debug-spi Enable ChromiumOS Servo DUT debug board
rayer-spi RayeR SPIPGM hardvertámogatás
realtek-mst-i2c-spi Enable support for Realtek MultiStream Transport (MST)
satamv Programozó engedélyezése a Marvell SATA vezérlőkhöz
satasii Programozó engedélyezése. SiI SATA vezérlőkhöz
serprog Enable Serial Flasher programozó
static !!ezt ne állítsuk be bootstrap alatt!!! Okozza a binárisok statikus linkelését a dinamikus helyett
stlinkv3-spi Enable SPI programozó használata STLINK-V3
tools Install ich_descriptor_tool, egy eszköz az Intel chipsetek SPI-flash képének descriptor-módú olvasásához
usbblaster-spi Engedélyezze az Altera USB-Blaster dongles támogatását
wiki Engedélyezze a wiki információkat, mint támogatott eszközök stb.
A Gentoo csomagadatbázis által biztosított adatok – Utolsó frissítés: 2021-01-27 17:12 További információk a USE zászlókról

flashrom leggyakrabban a flash chipek dumpolására és írására használják. Ezt a flasherre kell telepíteni, vagy arra a gépre, amelyhez a flasher csatlakozik.

A flashromot célszerű telepíteni arra a rendszerre, amelyre flashelni fogunk, mivel ha egyszer a corebootot eredetileg flasheltük, akkor azt belsőleg újra lehet flashelni, szétszerelés vagy flasher használata nélkül.

root #emerge --ask sys-apps/flashrom

Most a gépet szét kell szerelni. Kövesse a kézikönyvet, vagy egy online útmutatót, amíg a flash chip hozzáférhetővé válik, majd rögzítse a klipszet és drótozza be a villogóhoz.

Figyelem
GYőződjön meg róla, hogy MINDEN áramforrás ki van kapcsolva a gépből, kivéve a CMOS akkumulátort. Megsülhetnek az alaplapok, ha flashelés közben csatlakoztatva vannak.

Mihelyt a flash chip csatlakoztatva van a flasherhez, használd a flashromot a flash chip tartalmának dumpolásához.

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

Fontos, hogy többszörös dumpsot készítsünk, arra az esetre, ha hibás a kapcsolat. Miután megfelelő dumpot kaptunk, nyugodtan lekapcsolhatjuk egyelőre a villogót, ha úgy kívánjuk. Ne feledjük, hogy ha egy Raspberry Pi v1-en fut, akkor nem lesz elég RAM a fordításhoz, ezért ezen a ponton a dumpot át kell vinni egy másik gépre. Lehetséges, hogy azt a gépet használjuk, amelyről a flash chipet dumpoltuk, bár ehhez később újra összerakásra és újabb szétszerelésre lesz szükség.

Dumping és fordítási eszközök

Most a coreboot git repository-t kell klónozni egy munkakönyvtárba, mivel az tartalmazza a folytatáshoz szükséges eszközöket. Az adott gyártóhoz és modellhez is létre kell hozni könyvtárakat.

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

A <manufacturer> és <model> helyébe a gyártó és a modell (pl.pl. lenovo/x220).

A következő lépés a flash dump régióinak kivonása. A régiók hasonlóak a partíciókhoz, és egy flash chip tartalmaz egy flash leírót, amely úgy tekinthető, mint az SPI flash partíciós táblázata néhány további tulajdonsággal. Ezt a leírót egy ifdtool nevű program olvassa be, amely az egyes partíciók kinyerésére szolgál.

Először az ifdtoolt kell lefordítani. A forrása a coreboot-é alatt található, ezért cd-vel menjünk abba a könyvtárba, ahová a coreboot-ot klónoztuk.

user $cd util/ifdtool
user $make

Ezt érdemes globálisan telepíteni, de nem szükséges.

root #make install

Ezután cd-vel menj vissza oda, ahol a flash.bin van.

user $ifdtool -x flash.bin

Ez kiír egy partíciós táblázatot, és kivesz néhány blobot. Egy szabványos partíciós tábla így nézhet ki:

Régió leírás Kezdés régió Vég régió
0 Flash leíró 0x00000000 0x00000fff
1 BIOS (Firmware) 0x00500000 0x00bfffff
2 ME 0x00003000 0x004fffff
3 GbE 0x00001000 0x00002fff
4 Platform Data nem használt nem használt

Intel ME és Gigabit Ethernet konfigurációs adatok

Figyeljük meg, hogy a fenti táblázatban ME és GbE szerepel. Ezek olyan bináris pacák, amelyek a számítógép egyes részeit inicializálják (ebben az esetben az Intel Management Engine és a Gigabit Ethernet). A régebbi eszközökön ezek biztonságosan eltávolíthatók a libreboot segítségével, de a Sandy Bridge és újabb eszközökön ezek szükségesek a számítógép megfelelő működéséhez. Mivel az Intel ME szükséges ezeken a lapokon, ezért ki kell vonni. A coreboot azonban drasztikusan csökkentheti a méretét, eltávolítva a hálózati és rendszererőforrás-hozzáférését. Ez ajánlott, mivel nem csak a biztonságot javítja, de több hely marad a flash chipen más hasznos terhek számára. A Gigabit Ethernet konfigurációs adatok minden gépre specifikusak, és mint ilyeneket, szintén ki kell vonni a flashchipről.

A munkakönyvtárnak ezen a ponton négy új fájlt kell tartalmaznia, amelyek a flashregion_*.bin formátumot követik. Ezeknek le kell képezniük a kinyomtatott táblázatot. Mint korábban említettük, a leíróra, az Intel ME-re és a GbE blobokra van szükség. Nevezzük át ezeket descriptor.bin, me.bin és gbe.bin címekre, és másoljuk őket a coreboot/3rdparty/blobs/mainboard/<manufacturer>/<model>/; a korábban létrehozott könyvtárba.

Configuring and Compiling Coreboot

Most a corebootot kell konfigurálni az adott géphez. A legjobb, ha megnézzük a coreboot wiki oldalát az adott eszközhöz, hátha vannak bizonyos követelmények. Mint ilyen, ez az oldal csak azokat a beállításokat próbálja részletezni, amelyeket a telepítések többségénél be kell állítani. Ez nem garantálható, és egyes beállítások konfliktusokat okozhatnak a géppel.

Először a konfigurációt kell megadni. Ez a kernel konfigurálásához hasonló módon történik.

user $make nconfig

Alternatívaként használhatjuk a menuconfigot, vagy akár kézzel is szerkeszthetjük a konfigurációs fájlt (miután azt az nconfig/menuconfig generálta).

Általános beállítás

A következők engedélyezését javaslom:

  • CMOS használata a konfigurációs értékekhez
  • Ramstage tömörítése LZMA-val
  • A coreboot .config fájlt a ROM-képbe
  • Elkészíteni egy táblázatot a bootolás során gyűjtött időbélyegekből
  • A ramstage-t úgy építsük fel, hogy 32 bites címtartományban áthelyezhető legyen.

Sandy Bridge vagy újabb eszköz esetén:

  • Allow use of binary-only repository

És ha már korábban lefordítottuk a corebootot, akkor további fordítási időt csökkenthetünk, ha engedélyezzük:

  • Update existing coreboot.rom image

Mainboard

Itt kell kiválasztani a gyártót és a modellt. Győződjünk meg róla, hogy a pontos modell van megadva, ha vannak származékok (pl. X220/X220t). A ROM chip méretét is ki kell választani. Ezt a flashromnak ki kellett volna adnia, de ha nem, akkor a flash.bin fájlméretének ellenőrzésével lehet meghatározni.

Chipset

Ez a menü tartalmazza a chipset-specifikus beállításokat, valamint a korábban kinyert bináris blobok helyét. mivel ez nagyrészt gépspecifikus, csak bizonyos beállításokat kell mindenhol engedélyezni. Javaslom engedélyezni:

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

Ezek megkönnyítik a hibakeresést, ha rossz a flash. Ezek kikapcsolhatók, ha egy ismert, működő konfigurációt hoztunk létre.

A következőkben az Intel Firmware alatt kell megadni az elérési utakat. Engedélyezze ezeket az opciókat:

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

Az elérési utak opcióinak most meg kell jelennie. Ezeknek meg kell egyezniük a korábban használt nevekkel, de ha nem, akkor javítsa ki őket, hogy egyezzenek.

Devices

Ez a terület nagyrészt a grafikát érinti, különösen a laptopokkal összefüggésben. Személy szerint én a Graphics Initialisationt a ‘Use native graphics init’-re, a Display/Framebuffer Mode-ot pedig a ‘Linear “high-resolution” framebuffer’-re állítottam. A többi opciót már be kell állítani a géphez. Ha az adott eszköz VGA BIOS-képet igényel, kövesd a coreboot wikiben leírtakat.

Generic Drivers

I often enable:

  • PS/2 keyboard init

Ha az eszköz Intel PCIe WiFi kártyával rendelkezik, engedélyezze az opciót

  • Support Intel PCI-e WiFi adapterek támogatása

Security

Ezt gyakran magára hagyom, mivel jelenleg csak Verified Boot opciókat tartalmaz, de ha ennek támogatása szükséges, engedélyezze.

Konzol

Ez a szakasz a konzolok hibakeresésére vonatkozó beállításokat tartalmazza. Hasznos lehet bizonyos opciók engedélyezése, különösen akkor, ha problémák merülnek fel. Engedélyeztem:

  • Az AP CPU-k korai konzolról való kikapcsolása.
  • Konzol kimenet CBMEM pufferbe küldése
  • POST kódok megjelenítése a debug konzolon

System Tables

Enable Generate SMBIOS tables, az egyetlen opció itt.

Payloads

Ebben a szakaszban lehet kiválasztani a payloadot. Ezen az oldalon részletezzük a SeaBIOS beállítását, mivel ez rendelkezik a legnagyobb kompatibilitással az operációs rendszerekkel, de lehetőség van a GRUB2 használatára is a gyorsabb bootolás érdekében, vagy akár egy kernel elhelyezésére a flash chipen (ha van elég hely).

A SeaBIOS megfelelő beállításához a következőket kell kiválasztani:

  • Fizetőeszköz hozzáadása > SeaBIOS
  • SeaBIOS verzió > master
  • Hardware init az opció ROM végrehajtása során
  • LZMA tömörítés használata a fizetőeszközökhöz

Az ember esetleg néhány másodlagos fizetőeszközt is engedélyezni szeretne. Ezek hibakeresésre és az opciók módosítására használhatók. Az egyik ajánlott opció az nvramcui, amely hasonlóan működik, mint a szabványos BIOS opciók menüje.

Hibakeresés

Ezek az opciók nagyrészt a fejlesztést szolgálják. A normál felhasználóknak nem kell engedélyezniük semmit ebben az almenüben.

Kompilálás

Most, hogy a konfiguráció elkészült, a corebootot le kell fordítani. Először a cross-compilert kell megépíteni:

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

Ez megköveteli a dev-lang/gnat-gpl telepítését, különben sok funkció nem fog megfelelően működni.

Ha ez megtörtént, fordítsuk le az IASL-t:

user $make iasl

És végül fordítsuk le a coreboot-ot

user $make

Flashing coreboot.rom

Ezzel egy coreboot.rom nevű fájlt kell létrehozni a build/ könyvtárban. Ez a végleges kép, amelyet villantani kell. Másoljuk ezt a flasherre, ha még nincs rajta, szedjük szét a céleszközt, és csatlakoztassuk a flasherhez a flash chipet.

A flasheren használjuk a flashrom-ot a flasheléshez:

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

A második parancsnak VERIFIED-et kell adnia. Ha igen, akkor a coreboot sikeresen flashelt az eszközre.

Flashelés belső

A coreboot kezdeti flashelése után később belső flashelésre is sor kerülhet, külső flashelő eszköz nélkül. Ehhez egy új coreboot.rom összeállítása után egyszerűen tegye a következőket:

root #flashrom -p internal:laptop=force_I_want_a_brick -w coreboot.rom
Figyelmeztetés
Míg ezt több laptopon is teszteltük, előfordulhat, hogy a használt eszközön nem működik. Ellenőrizze, hogy másoknak volt-e sikerük vagy kudarcuk az adott modell belső flasherével.

Hibaelhárítás

A Coreboot nem bootol (Broken build)

Ha a coreboot nem bootol, akkor ez általában azt jelenti, hogy vagy nincs megfelelően konfigurálva, vagy hiányzik egy payload. Győződjön meg róla, hogy megfelelő payload került kiválasztásra, amely helyesen van lefordítva, és megfelelően konfigurálva van.

Ez is lehetséges, hogy a coreboot helyesen működik, de a grafikus komponens nem. Ezt okozhatja a natív gfx init használata. Próbálj meg egy VGA BIOS-t dömpingelni, és azt használni helyette. Ez lehet fordítva is; próbáljon meg VGA BIOS-ról natív gfx initre váltani. Végső megoldásként próbálja meg használni a Legacy VGA szöveges módot a framebuffer módhoz a Devices/Display alatt.

Semmi sem bootol többé (aka SPI chip bricked)

Ezt általában az okozza, ha bekapcsolva hagyja a gépet, miközben dömpingeli vagy külső villogtatóval villogtatja. Ha a gép egyáltalán nem kapcsol be (bootoláskor nem kapcsolnak be a fények, ventilátorok vagy a kijelző), akkor ez azt jelentheti, hogy a gép bricked. Lehetséges a javítás egy új flash chip vásárlásával (győződjön meg róla, hogy kompatibilis – a legjobb eredmény érdekében próbálja ugyanazt a gyártót és modellt használni) és ennek flashelésével vagy az eredeti BIOS-szal vagy a coreboot ROM-mal. Ez gyakran nagyon finom forrasztást igényel, és nem a gyengeelméjűeknek való. Ez azt is jelentheti, hogy új gépet kell vásárolni, vagy legalábbis új alaplapot.

Megjegyzés
Mindig ellenőrizze, hogy az ok nem egy rosszul konfigurált coreboot-e!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.