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
- Az alapok
- Flasher
- SPI flash
- flashrom
- USE flags for sys-apps/flashrom Utility for reading, writing, törléséhez és ellenőrzéséhez
- Dumping és fordítási eszközök
- Intel ME és Gigabit Ethernet konfigurációs adatok
- Configuring and Compiling Coreboot
- Általános beállítás
- Mainboard
- Chipset
- Devices
- Generic Drivers
- Security
- Konzol
- System Tables
- Payloads
- Hibakeresés
- Kompilálás
- Flashing coreboot.rom
- Flashelés belső
- Hibaelhárítás
- A Coreboot nem bootol (Broken build)
- Semmi sem bootol többé (aka SPI chip bricked)
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. |
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.
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
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.
Mindig ellenőrizze, hogy az ok nem egy rosszul konfigurált coreboot-e!