Coreboot este un firmware liber și opensource care își propune să fie un înlocuitor rapid, sigur și flexibil pentru UEFI. Acesta suportă mai multe sarcini utile, de la o implementare BIOS (SeaBIOS), la o instalare GRUB2, până la un kernel linux complet. acest ghid va arăta cum se instalează coreboot cu o sarcină utilă SeaBIOS pe dispozitivele acceptate, manipularea instrumentelor de spațiu utilizator și utilizarea flashrom.
- Hardware acceptat
- Elemente de bază
- Flasher
- SPI flash
- flashrom
- USE flags for sys-apps/flashrom Utilitar pentru citire, scriere, ștergerea și verificarea cipurilor flash ROM
- Unelte de descărcare și compilare
- Intel ME și Gigabit Ethernet Configuration Data
- Configurarea și compilarea Coreboot
- Configurare generală
- Mainboard
- Chipset
- Dispozitive
- Generic Drivers
- Security
- Console
- System Tables
- Payloads
- Debugging
- Compilare
- Flashing coreboot.rom
- Flashing prin intern
- Soluționarea problemelor
- Coreboot nu pornește (Broken build)
- Nimic nu mai pornește (aka SPI chip bricked)
Hardware acceptat
Există diferite tipuri de arhitecturi și hardware acceptat. Tabelul complet actualizat este disponibil la următorul link. În tabelul de mai jos sunt câteva dispozitive bine suportate, care sunt mai mult sau mai puțin recent lansate. În cazul în care se utilizează un dispozitiv mai vechi, este posibil să se elimine toate blocurile binare proprietare. Pentru aceasta, utilizați ghidul libreboot.
Hardware | Supported | Blob Free | Native RAM Init | Native Graphics Init | Native RAM Init | Native Graphics Init | Flashable prin hardware | Flashable prin software | Este necesară dezlipirea |
---|---|---|---|---|---|---|---|---|---|
Lenovo Thinkpad T530 | Da / În prezent rupt | Nu | Da | Parțial | Da | Parțial / nu cu BIOS OEM | . Da | ||
Lenovo Thinkpad T430s | Da / Momentan stricat | Nu | Da | Parțial | . Da | Parțial / nu cu BIOS OEM | Da | ||
Lenovo Thinkpad X230 | Da | Nu | . Da | Parțial | Da | Parțial / nu cu BIOS OEM | Nu | ||
Lenovo Thinkpad T420s | Da | Nu | Da | Parțial | Da | Parțial / nu cu BIOS OEM | Nu | ||
Lenovo Thinkpad T420 | Nu / WIP | Nu | Da | Parțial | Da | Parțial / nu cu OEM BIOS | Nu | ||
Lenovo Thinkpad T520 | Da | Nu | Da | Parțial | Da | Parțial / nu cu BIOS OEM | Nu | ||
Lenovo Thinkpad X220 | Da | Nu | Da | Parțial | Da | Parțial / nu cu BIOS OEM | Nu | ||
Lenovo Thinkpad X220 | Da | Nu | Da | Parțial | Da | Parțial / nu cu BIOS OEM | Nu | ||
Lenovo Thinkpad T410 | Nu / WIP | Nu | Da | Parțial | Da | Parțial / nu cu BIOS OEM | Nu | ||
Lenovo Thinkpad T510 | Nu / WIP | Nu | Da | Parțial | Da | Parțial / nu cu BIOS OEM | Nu | ||
Lenovo Thinkpad X201 | Da / În prezent stricat | Nu | Da | Parțial | Da | Parțial / nu cu BIOS OEM | Nu | ||
Apple Macbook Air 4,2 | Da | Nu | Da | Nu | Da | Parțial / nu cu BIOS OEM | Nu |
Elemente de bază
În general, cipul flash trebuie să se găsească pe placa hardware-ului selectat. Acest lucru este important, deoarece vânzătorul blochează de obicei cipul flash prin soft lockdown. Ghidurile pentru localizarea cipului vor fi în general pe wiki-ul coreboot. Acest ghid presupune că dispozitivul conține un cip flash SPI, care necesită o clemă pentru a fi conectat la flasher.
Flasher
Ca flasher, un Raspberry Pi poate fi utilizat cu ușurință. Orice model și orice revizie este suficientă, dar vă avertizăm că cele mai vechi nu au suficientă memorie RAM pentru a compila singure coreboot. Dacă folosiți unul dintre acestea, asigurați-vă că copiați dump-ul cipului flash pe un computer mai puternic. Dacă cipul flash este bazat pe SPI, asigurați-vă că obțineți un testclip Pomona SOIC-8 pentru 15 £. Dar există și multe alte programatoare. Asigurați-vă că obțineți și niște fire de depanare.
SPI flash
Există diferite tipuri de cipuri SPI (listă). Cel mai comun pachet pentru aceste cipuri este SOIC-8 care poate fi flashat prin testclip. Uneori, aceste cipuri se află într-un pachet WSON-8; în acest caz, cipul WSON-8 trebuie să fie dezasamblat și reasamblat cu un nou SOIC-8. Dacă aveți nevoie de ajutor cu lipirea întrebați hackerspaces din apropierea locației dvs. Cipurile SPI sunt obișnuite în dimensiuni cuprinse între 2MB – 16MB. Adesea, vânzătorii lipesc două cipuri pentru a economisi bani.
flashrom
USE flags for sys-apps/flashrom Utilitar pentru citire, scriere, ștergerea și verificarea cipurilor flash ROM
atahpt |
Suport pentru controler ATA/RAID Highpoint (HPT) | |
atapromise |
. Suport pentru Promise PDC2026x (FastTrak/Ultra) | |
atavia |
Suport pentru controllere SATA VIA VT6421A | |
buspirate-spi |
Activare Bus Pirate SPI programator | |
ch341a-spi |
Enable WCH CH341A SPI programator | |
dediprog |
Suport Dediprog SF100 | |
developerbox-spi |
. Activare suport Devloperbox SPI recovery | |
digilent-spi |
Activare suport pentru placa de dezvoltare Digilent iCEblink40 | |
drkaiser |
Activare suport pentru placa de dezvoltare Digilent iCEblink40 | |
drkaiser |
Activare suport Dr. Kaiser programator | |
dummy |
Enable dummy tracing | |
ene-lpc |
Enable ENE LPC interface keyboard controller | |
ft2232-spi |
Enable ftdi programmer, intermitent prin interfața USB FTDI/SPI | |
gfxnvidia |
Activare programator NVIDIA | |
internal |
Activare suport intern/onboard | |
internal-dmi |
Activare decodare DMI internă, mai degrabă decât să se folosească sys.apps/dmidecode | |
it8212 |
Suport pentru controllerele ITE IT8212F ATA/RAID | |
jlink-spi |
Suport pentru SEGGER J-.Link și dispozitive compatibile | |
linux-mtd |
Activarea suportului pentru dispozitive flash SPI Linux mtd | |
linux-spi |
Activarea suportului pentru interfața Linux userspace spidev | |
lspcon-i2c-spi |
Activarea suportului pentru Parade lspcon USB-C to HDMI protocol translator | |
mec1308 |
Enable support for Microchip MEC1308 embedded controller | |
mstarddc-spi |
Support for SPI flash ROMs accessible prin DDC în MSTAR-display-uri echipate | |
nic3com |
Activare programator 3Com NIC | |
nicintel |
Suport pentru NIC-uri Intel | |
nicintel-eeprom . |
Suport pentru EEPROM-urile de pe plăcile de rețea Intel Gigabit | |
nicintel-spi |
Suport pentru SPI pe NIC-urile Intel | |
nicnatsemi |
Suport pentru NIC-urile National Semiconductor | |
nicrealtek |
Suport pentru NIC-urile Realtek | |
ogp-spi |
Activați suportul pentru OGP (Open Graphics Project) SPI flashing | |
pickit2-spi |
SUport pentru ROM-uri flash SPI accesibile prin Microchip PICkit2 | |
pony-spi |
Activarea suportului pentru SI-Prog like hardware by Lancos | |
raiden-debug-spi |
Enable ChromiumOS Servo DUT debug board | |
rayer-spi . |
Suport hardware RayeR SPIPGM | |
realtek-mst-i2c-spi |
Activați suportul pentru Realtek MultiStream Transport (MST) | Activați suportul pentru Realtek MultiStream Transport (MST) |
satamv |
Activare programator pentru controllere Marvell SATA | |
satasii |
Activare programator pentru controllere SATA SiI | |
serprog |
Enable Serial Flasher programmer | |
static |
!!nu setați acest lucru în timpul bootstrap-ului!!! Face ca binarele să fie legate static în loc să fie legate dinamic | |
stlinkv3-spi |
Enable SPI programmer using STLINK-V3 | |
tools |
Install ich_descriptor_tool, un instrument pentru citirea imaginilor SPI-flash în modul descriptor pentru chipset-urile Intel | |
usbblaster-spi |
Activați suportul pentru dongle-urile Altera USB-Blaster | |
wiki |
Activați informațiile wiki, cum ar fi dispozitivele acceptate etc. |
flashrom este cel mai frecvent utilizat pentru a descărca și scrie pe cipuri flash. Acesta trebuie instalat pe flasher, sau pe mașina la care este conectat flasherul.
Este util să instalați flashrom pe sistemul pe care va fi flashat, deoarece odată ce coreboot este flashat inițial, acesta poate fi reflasherat intern, fără dezasamblare sau utilizarea unui flasher.
root #
emerge --ask sys-apps/flashrom
Acum, mașina trebuie dezasamblată. Urmați manualul, sau un ghid online până când cipul flash este accesibil, apoi atașați clema și cablați-o la bliț.
Asigurați-vă că TOATE sursele de alimentare sunt deconectate de la mașină, în afară de bateria CMOS. Este posibil să se prăjească plăcile de bază dacă acestea sunt conectate în timp ce sunt flashate.
După ce cipul flash este conectat la un flasher, utilizați flashrom pentru a descărca conținutul cipului 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
Este important să faceți mai multe descărcări, în cazul în care există o eroare de conexiune. Odată obținut un dump corespunzător, este sigur să deconectați deocamdată flasherul, dacă se dorește acest lucru. Nu uitați că, dacă rulează pe un Raspberry Pi v1, acesta nu va avea suficientă memorie RAM pentru a compila, așa că, în acest moment, dump-ul trebuie transferat pe o altă mașină. Este posibil să folosiți calculatorul de pe care a fost descărcat cipul flash, deși acest lucru va necesita reasamblare și o altă dezasamblare mai târziu.
Unelte de descărcare și compilare
Acum, depozitul git coreboot git trebuie să fie clonat într-un director de lucru, deoarece conține instrumentele necesare pentru a continua. De asemenea, trebuie create directoare pentru producătorul și modelul specific.
user $
git clone --recursive https://review.coreboot.org/coreboot.git
user $
cd coreboot
user $
mkdir -p 3rdparty/blobs/mainboard/<manufacturer>/<model>
Înlocuiți <manufacturer> și <model> cu producătorul și, respectiv, modelul dumneavoastră (de ex.g. lenovo/x220).
Postul următor constă în extragerea regiunilor din descărcarea flash. Regiunile sunt similare cu partițiile și sunt un cip flash conține un descriptor flash care poate fi văzut ca o tabelă de partiții pentru flash-ul SPI cu unele proprietăți suplimentare. Acest descriptor este citit de un program numit ifdtool, care va fi utilizat pentru a obține partițiile individuale.
În primul rând, ifdtool trebuie să fie compilat. Sursa sa este conținută sub cea a lui coreboot, așa că faceți cd în directorul în care a fost clonat coreboot.
user $
cd util/ifdtool
user $
make
Este o idee bună să îl instalați la nivel global, dar nu este necesar.
root #
make install
Apoi, cd înapoi la locul unde se află flash.bin.
user $
ifdtool -x flash.bin
Aceasta va imprima o tabelă de partiții și va extrage niște blobs. Un tabel de partiții standard poate arăta astfel:
Region | Description | Start Region | End Region |
---|---|---|---|
0 | Flash Descriptor | 0x000000000000 | 0x00000fff |
1 | BIOS (Firmware) | 0x00500000 | 0x00bfffff |
2 | ME | 0x00003000 | 0x004fffff |
3 | GbE | 0x00001000 | 0x00002fff |
4 | Datele platformei | nefolosit | nefolosit |
Intel ME și Gigabit Ethernet Configuration Data
Observați cum tabelul de mai sus conține ME și GbE. Acestea sunt blocuri binare care inițializează părți ale computerului (în acest caz, Intel Management Engine și Gigabit Ethernet). Pe dispozitivele mai vechi, acestea pot fi eliminate în siguranță cu libreboot, dar pe Sandy Bridge și mai nou, sunt necesare pentru ca computerul să funcționeze corect. Deoarece Intel ME este necesar pe aceste plăci, acesta trebuie extras. Cu toate acestea, coreboot poate reduce drastic dimensiunea acestuia, eliminând accesul său la rețea și la resursele de sistem. Acest lucru este recomandat, deoarece nu numai că îmbunătățește securitatea, dar lasă și mai mult spațiu pe cipul flash pentru alte sarcini utile. Datele de configurare Gigabit Ethernet sunt specifice fiecărei mașini și, ca atare, trebuie, de asemenea, extrase din cipul flash.
În acest moment, directorul de lucru ar trebui să conțină patru fișiere noi, care urmează formatul flashregion_*.bin. Acestea ar trebui să corespundă tabelului care a fost tipărit. După cum s-a menționat anterior, sunt necesare descriptorul, Intel ME și blocurile GbE. Redenumiți-le în descriptor.bin, me.bin și, respectiv, gbe.bin și copiați-le în coreboot/3rdparty/blobs/mainboard/<manufacturer>/<model>/; directorul care a fost creat mai devreme.
Configurarea și compilarea Coreboot
Acum, coreboot trebuie configurat pentru mașina specifică. Cel mai bine este să verificați pagina wiki coreboot pentru dispozitivul dat, în cazul în care există anumite cerințe. Ca atare, această pagină va încerca să detalieze doar setările care trebuie să fie setate în majoritatea instalațiilor. Acest lucru nu poate fi garantat, iar unele setări pot cauza conflicte cu mașina.
În primul rând, trebuie să introduceți configurația. Aceasta se realizează într-un mod similar cu configurarea unui kernel.
user $
make nconfig
Alternativ, se poate utiliza menuconfig, sau chiar se poate edita manual fișierul de configurare (după ce acesta a fost generat de nconfig/menuconfig).
Configurare generală
Vă recomand să activați următoarele:
- Utilizați CMOS pentru valorile de configurare
- Comprimați ramstage cu LZMA
- Includeți fișierul coreboot .config în imaginea ROM
- Creați un tabel de timestamps colectate în timpul pornirii
- Construiți ramstage pentru a putea fi relocat în spațiul de adrese pe 32 de biți.
Pentru un dispozitiv Sandy Bridge sau ulterior:
- Permite utilizarea unui depozit binar
Și dacă ați compilat anterior coreboot, puteți reduce și mai mult timpii de compilare prin activarea:
- Update existing coreboot.rom image
Mainboard
Aici trebuie selectate furnizorul și modelul. Asigurați-vă că este introdus modelul exact, dacă sunt disponibile derivate (de exemplu, X220/X220t). Trebuie selectată, de asemenea, dimensiunea cipului ROM. Aceasta ar trebui să fi fost emisă de flashrom, dar dacă nu, poate fi determinată prin verificarea mărimii fișierelor din flash.bin.
Chipset
Acest meniu conține opțiuni specifice chipset-ului și, de asemenea, locațiile pentru blocurile binare extrase mai devreme. deoarece acest lucru este în mare parte specific mașinii, există doar anumite opțiuni care ar trebui să fie activate la nivelul întregii plăci. Vă recomand să activați:
- Activați VMX pentru virtualizare
- Setați bitul de blocare după configurarea VMX
- Bip la eroare fatală
- Leduri flash la eroare fatală
Acestea vor permite o depanare mai ușoară dacă aveți un flash defect. Ele pot fi dezactivate odată ce este creată o configurație de lucru cunoscută.
În continuare, trebuie furnizate căile de acces sub Intel Firmware. Activați aceste opțiuni:
- Adaugați fișierul Intel descriptor.bin
- Adaugați firmware-ul Intel ME/TXE
- Adaugați firmware-ul Intel ME/TXE
- Adaugați firmware-ul gigabit ethernet
Opțiunile pentru căi ar trebui să apară acum. Acestea ar trebui să se potrivească cu numele folosite anterior, dar dacă nu, corectați-le astfel încât să se potrivească.
Dispozitive
Acest domeniu se referă în mare parte la grafică, în special în contextul laptopurilor. Personal, am inițializarea grafică setată la „Use native graphics init”, iar modul de afișare/framebuffer setat la „Linear „high-resolution” framebuffer”. Restul acestor opțiuni ar trebui să fie deja setate pentru mașina respectivă. În cazul în care dispozitivul specific necesită o imagine BIOS VGA, urmați instrucțiunile din wiki coreboot.
Generic Drivers
De multe ori activez:
- PS/2 keyboard init
Dacă dispozitivul are o placă Intel PCIe WiFi, activați opțiunea
- Support Intel PCI-e WiFi adapters
Security
De cele mai multe ori o las în pace, deoarece în prezent conține doar opțiuni Verified Boot, dar dacă este necesar suportul pentru aceasta, activați-o.
Console
Această secțiune conține opțiuni despre depanarea consolelor. Poate fi util să activați anumite opțiuni, în special dacă apar probleme. Eu am activat:
- Squelch AP CPUs from early console.
- Send console output to a CBMEM buffer
- Show POST codes on the debug console
System Tables
Activați Generate SMBIOS tables, singura opțiune de aici.
Payloads
În această secțiune, se poate alege sarcina utilă. Această pagină va detalia modul de configurare a SeaBIOS, deoarece are cea mai mare compatibilitate cu sistemele de operare, dar este posibilă și utilizarea GRUB2 pentru o pornire mai rapidă, sau chiar plasarea unui kernel pe cipul flash (dacă există suficient spațiu).
Selectați următoarele pentru o configurare corectă a SeaBIOS:
- Adaugați o sarcină utilă > SeaBIOS
- Versiunea SeaBIOS > master
- Hardware init în timpul execuției ROM-ului opțional
- Utilizați compresia LZMA pentru sarcinile utile
Se poate dori, de asemenea, să activați unele sarcini utile secundare. Acestea pot fi utilizate pentru depanare și pentru modificarea opțiunilor. O opțiune recomandată este nvramcui, care acționează într-un mod similar cu un meniu standard de opțiuni BIOS.
Debugging
Aceste opțiuni sunt în mare parte pentru dezvoltare. Utilizatorii obișnuiți nu trebuie să activeze nimic din acest submeniu.
Compilare
Acum că configurația este gata, coreboot trebuie compilat. Mai întâi, trebuie compilat compilatorul încrucișat:
user $
make crossgcc-i386 CPUS=${nproc}
Aceasta necesită ca dev-lang/gnat-gpl să fie instalat, altfel multe funcții nu vor funcționa corect.
După ce acest lucru este făcut, compilați IASL:
user $
make iasl
Și în final, compilați coreboot
user $
make
Flashing coreboot.rom
Acest lucru ar trebui să producă un fișier în directorul build/ numit coreboot.rom. Aceasta este imaginea finală care trebuie să fie flashată. Copiați această imagine pe flasher, dacă nu se află deja pe acesta, dezasamblați dispozitivul țintă și atașați flasherul la cipul flash.
Pe flasher, folosiți flashrom pentru a flasha:
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -w coreboot.rom
root #
Cea de-a doua comandă ar trebui să returneze VERIFIED. În caz afirmativ, coreboot a fost flashat cu succes pe dispozitiv.
Flashing prin intern
După ce coreboot a fost flashat inițial, acesta poate fi ulterior flashat intern, fără a fi nevoie de un dispozitiv de flashing extern. Pentru a face acest lucru, odată ce un nou coreboot.rom a fost compilat, pur și simplu faceți următoarele:
root #
flashrom -p internal:laptop=force_I_want_a_brick -w coreboot.rom
Chiar dacă acest lucru a fost testat pe mai multe laptopuri, este posibil să nu funcționeze pe dispozitivul utilizat. Asigurați-vă că ați verificat dacă alții au avut succes sau au avut eșecuri cu flasherul intern pentru modelul specific.
Soluționarea problemelor
Coreboot nu pornește (Broken build)
Dacă coreboot nu pornește, atunci de obicei înseamnă că fie nu este configurat corespunzător, fie că îi lipsește o sarcină utilă. Asigurați-vă că a fost selectată o sarcină utilă corespunzătoare, compilată corect și configurată în mod corespunzător.
Este posibil, de asemenea, ca coreboot să funcționeze corect, dar componenta grafică să nu funcționeze. Acest lucru poate fi cauzat de utilizarea init gfx nativ. Încercați să descărcați un BIOS VGA și să îl folosiți în schimb. Ar putea fi și invers; încercați să treceți de la un BIOS VGA la gfx init nativ. În ultimă instanță, încercați să folosiți modul text Legacy VGA pentru modul framebuffer în Devices/Display.
Nimic nu mai pornește (aka SPI chip bricked)
Acest lucru este de obicei cauzat de lăsarea mașinii sub tensiune în timp ce se face dumping-ul sau flashing-ul cu un flasher extern. Dacă mașina nu pornește deloc (nu se aprind luminile, ventilatoarele sau afișajul la pornire), acest lucru poate însemna că mașina este bruiată. Ar putea fi posibilă repararea prin achiziționarea unui nou cip flash (asigurați-vă că este compatibil – încercați să folosiți același producător și model pentru cele mai bune rezultate) și flasharea acestuia fie cu BIOS-ul original, fie cu ROM-ul coreboot. Acest lucru necesită adesea o lipire foarte delicată și nu este pentru cei slabi de inimă. Aceasta poate însemna că trebuie achiziționată o mașină nouă sau cel puțin o placă de bază nouă.
Atenție
Aveți întotdeauna grijă să verificați dacă cauza nu este un coreboot configurat greșit!
.