Coreboot

Resurse
Acasă

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

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.
Date furnizate de baza de date a pachetelor Gentoo – Ultima actualizare: 2021-01-27 17:12 Mai multe informații despre stegulețele USE

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ț.

Avertisment
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
Atenție
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ă.

Notă
Atenție
Aveți întotdeauna grijă să verificați dacă cauza nu este un coreboot configurat greșit!

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.