Coreboot

Resources
Home

Coreboot on ilmainen ja avoimen lähdekoodin firmware, jonka tavoitteena on olla nopea, turvallinen ja joustava UEFI:n korvaaja. Se tukee useita hyötykuormia, jotka vaihtelevat BIOS-toteutuksesta (SeaBIOS) GRUB2-asennukseen ja täydelliseen linux-ytimeen.Tässä oppaassa näytetään, miten coreboot asennetaan SeaBIOS-hyötykuormalla tuettuihin laitteisiin, käyttäjäavaruuden työkalujen käsittely ja flashromin käyttö.

Tuettu laitteisto

Arkkitehtuureja ja tuettuja laitteistoja on erilaisia. Täysin ajantasainen taulukko on saatavilla seuraavasta linkistä. Alla olevassa taulukossa on joitakin hyvin tuettuja laitteita, jotka ovat enemmän tai vähemmän hiljattain julkaistuja. Jos käytössä on vanhempi laite, voi olla mahdollista poistaa kaikki omat binääritiedostot. Käytä tähän libreboot-opasta.

Hardware Supported Blob Free Native RAM Init Native Graphics Init Salamoitavissa laitteiston kautta Salamoitavissa ohjelmiston kautta Poisto tarvitaan
Lenovo Thinkpad T530 Kyllä / Tällä hetkellä rikki Ei Kyllä Osittain Kyllä Osittain / ei OEM BIOSin kanssa Kyllä
Lenovo Thinkpad T430s Kyllä / Tällä hetkellä rikki Ei Kyllä Osittain Kyllä Osittain / ei OEM BIOSin kanssa Kyllä
Lenovo Thinkpad X230 Kyllä Ei Kyllä Osittain Kyllä Osittain / ei OEM BIOSin kanssa Ei
Lenovo Thinkpad T420s Kyllä Ei Kyllä Osittain Kyllä Osittain / ei OEM BIOSilla Ei
Lenovo Thinkpad T420 Ei / WIP Ei Kyllä Osittainen Kyllä Osittainen / ei OEM:n kanssa. BIOS Ei
Lenovo Thinkpad T520 Kyllä Ei Kyllä Osittain Kyllä Osittain / ei OEM BIOSin kanssa Ei
Lenovo Thinkpad X220 Kyllä Ei Kyllä Osittain Kyllä Osittain / ei OEM BIOSin kanssa Ei
Lenovo Thinkpad X220 Kyllä Ei Kyllä Osittain Kyllä Osittain / ei OEM BIOSilla Ei
Lenovo Thinkpad T410 Ei / WIP Ei Kyllä Osittainen Kyllä Osittainen / ei OEM BIOSilla Ei
Lenovo Thinkpad T510 Ei / WIP Ei Kyllä Osittain Kyllä Osittain / ei OEM BIOSin kanssa Ei
Lenovo Thinkpad X201 Kyllä / Tällä hetkellä rikki Ei Kyllä Osittain Kyllä Osittain / ei OEM BIOSin kanssa Ei
Apple Macbook Air 4,2 Kyllä Ei Kyllä Ei Kyllä Osittainen / ei OEM BIOSin kanssa Ei

Perusteet

Yleisesti ottaen flash-sirun on löydyttävä valitun laitteiston piirilevyltä. Tämä on tärkeää, koska myyjä yleensä lukitsee flash-sirun pehmeällä lukituksella. Oppaita sirun paikantamiseen löytyy yleensä corebootin wikistä. Tässä oppaassa oletetaan, että laitteessa on SPI-flash-piiri, jonka liittäminen flasheriin vaatii klipsin.

Flasher

Flasherina voidaan helposti käyttää Raspberry Pi:tä. Mikä tahansa malli ja versio kelpaa, mutta varoitetaan, että aikaisemmissa ei ole tarpeeksi RAM-muistia corebootin kääntämiseen itsestään. Jos käytät sellaista, varmista, että kopioit flash-sirun dumpin tehokkaampaan tietokoneeseen. Jos flash-siru on SPI-pohjainen, hanki Pomona SOIC-8 -testiliitin 15 punnan hintaan. Mutta on myös monia muita ohjelmointilaitteita. Muista hankkia myös virheenkorjausjohtoja.

SPI-flash

SPI-siruja on erityyppisiä (luettelo). Yleisin pakkaus näille siruille on SOIC-8, joka voidaan flashata testclipin kautta. Joskus nämä piirit ovat WSON-8-paketissa, jolloin WSON-8-piiri on irrotettava ja juotettava uudella SOIC-8-paketilla. Jos tarvitset apua juottamisessa, kysy hackerspacesista lähelläsi. SPI-siruja on yleisesti 2MB – 16MB kokoisia. Usein myyjät juottavat kaksi sirua säästääkseen rahaa.

flashrom

USE flags for sys-apps/flashrom Utility for reading, writing, pyyhkimiseen ja tarkistamiseen flash ROM -piirien

atahpt Highpoint (HPT) ATA/RAID-ohjaimen tuki
atapromise Tuki Promise PDC2026x:lle (FastTrak/Ultra)
atavia Tuki VIA VT6421A SATA-ohjaimille
buspirate-spi Väyläpiraatti SPI:n käyttöönotto ohjelmoija
ch341a-spi Ota käyttöön WCH CH341A SPI-ohjelmoija
dediprog Dediprog SF100 tuki
developerbox-spi Enable Devloperbox SPI recovery support
digilent-spi Enable support for Digilent iCEblink40 development board
drkaiser Enable Dr. Kaiser -ohjelmointilaite
dummy Enable dummy tracing
ene-lpc Enable ENE LPC -liitännän näppäimistöohjain
ft2232-spi Enable ftdi programmer, vilkkuminen FTDI/SPI USB-liitännän kautta
gfxnvidia Ota käyttöön NVIDIA-ohjelmoija
internal Ota käyttöön sisäinen/piirilevytuki
internal-dmi Ota käyttöön sisäinen DMI-dekoodaus sen sijaan, että käytettäisiin järjestelmäkoodeja.apps/dmidecode
it8212 Tuki ITE IT8212F ATA/RAID-ohjaimille
jlink-spi Tuki SEGGER J-Linkille ja yhteensopiville laitteille
linux-mtd Ota käyttöön tuki Linuxin mtd SPI-flash-laitteille
linux-spi Ota käyttöön tuki Linuxin käyttäjätilan spidev-rajapinnalle
lspcon-i2c-spi Ota käyttöön tuki Parade lspcon USB-C to HDMI protocol translator
mec1308 Ota käyttöön tuki Microchip MEC1308 sulautetulle ohjaimelle
mstarddc-spi Tuki SPI-flash-ROM:eille, joihin pääsee käsiksi DDC:n välityksellä DDC:ssa MSTAR-varustettuihin näyttöihin
nic3com 3Com NIC-ohjelmointilaitteen käyttöönotto
nicintel Tuki Intelin verkkokortille
nicintel-eeprom Tuki Intelin gigabitin verkkokorttien EEPROM-muisteille
nicintel-spi Tuki SPI:lle Intelin verkkokorteissa
nicnatsemi Tuki National Semiconductorin verkkokorteille
nicrealtek Tuki Realtekin verkkokorteille
ogp-spi Ota käyttöön tuki OGP:lle (Open Graphics Project) SPI flash
pickit2-spi SUpport for SPI flash ROMs accessible via Microchip PICkit2
pony-spi Enable support for SI-Prog like hardware by Lancos
raiden-debug-spi Enable ChromiumOS Servo DUT debug board
rayer-spi RayeR SPIPGM -laitteistotuki
realtek-mst-i2c-spi Ota käyttöön Realtek MultiStream Transport (MST) -tuki
satamv Ota käyttöön Marvellin SATA-ohjainten ohjelmointilaite
satasii Ota käyttöön ohjelmointilaite. SiI SATA-ohjaimille
serprog Enable Serial Flasher programmer
static !!älä aseta tätä käynnistyksen aikana!!! Aiheuttaa binäärien staattisen linkittämisen dynaamisen linkittämisen sijaan
stlinkv3-spi Enable SPI programmer using STLINK-V3
tools Asenna ich_descriptor_tool, työkalu descriptor-moodin SPI-flash-kuvien lukemiseen Intelin piirisarjoille
usbblaster-spi Ota käyttöön tuki Alteran USB-Blaster-dongleille
wiki Ota käyttöön wiki-tiedot, kuten tuetut laitteet jne.
Gentoo-pakettitietokannan tarjoamat tiedot – Viimeisin päivitys: 2021-01-27 17:12 Lisätietoja USE-lipuista

flashromia käytetään yleisimmin dumppaamiseen ja kirjoittamiseen flash-piireille. Se on asennettava flashromiin tai koneeseen, johon flashrom liitetään.

On hyödyllistä asentaa flashrom siihen järjestelmään, johon flashataan, sillä kun coreboot on alun perin flashattu, se voidaan sisäisesti uudelleen flashata ilman purkamista tai flashromin käyttöä.

root #emerge --ask sys-apps/flashrom

Nyt kone on purettava. Seuraa ohjekirjaa tai nettiopasta, kunnes flash-siruun pääsee käsiksi, ja kiinnitä sitten klipsi ja johdota se flasheriin.

Varoitus
Varmista, että KAIKKI virtalähteet on kytketty irti koneesta CMOS-paristoa lukuun ottamatta. On mahdollista, että emolevyt kärähtävät, jos ne ovat kytkettynä, kun niihin tehdään flashia.

Kun flash-siru on kytketty flasheriin, käytä flashromia dumpataksesi flash-sirun sisällön.

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

On tärkeää ottaa useampia dumpeja, jos yhteysvirhe tulee. Kun kunnollinen dumppi on saatu, on turvallista irrottaa vilkku toistaiseksi, jos niin halutaan. Muista, että jos sitä käytetään Raspberry Pi v1:ssä, siinä ei ole tarpeeksi RAM-muistia kääntämiseen, joten tässä vaiheessa dump on siirrettävä toiseen koneeseen. On mahdollista käyttää konetta, josta flash-piiri dumpattiin, vaikka tämä vaatii uudelleen kokoamisen ja toisen purkamisen myöhemmin.

Dumppaus- ja kääntämistyökalut

Nyt on kloonattava corebootin git-repository työhakemistoon, sillä se sisältää työkaluja, joita tarvitaan jatkamiseen. Lisäksi on luotava hakemistot valmistajakohtaisesti ja mallikohtaisesti.

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

Korvaa kohdat <valmistaja> ja <malli> valmistajallasi ja mallillasi vastaavasti (esim.esim. lenovo/x220).

Seuraavaksi poimitaan alueet flash-dumpista. Alueet ovat samanlaisia kuin osiot, ja ne ovat flash-siru sisältää flash-kuvaajan, jota voidaan pitää SPI-flashin osiotaulukkona, jossa on joitakin lisäominaisuuksia. Tämän kuvaajan lukee ohjelma nimeltä ifdtool, jota käytetään yksittäisten osioiden saamiseksi.

Ensin ifdtool on käännettävä. Sen lähdekoodi on corebootin lähdekoodin alla, joten cd-hakemistoon, johon coreboot kloonattiin.

user $cd util/ifdtool
user $make

Asennus kannattaa tehdä globaalisti, mutta ei ole välttämätöntä.

root #make install

Sitten cd takaisin sinne, missä flash.bin on.

user $ifdtool -x flash.bin

Tämä tulostaa osiotaulukon ja purkaa joitain blobeja. Tavallinen osiotaulukko voi näyttää tältä:

Region Description Start Region End Region
0 Flash Descriptor 0x00000000 0x00000fff
1 BIOS (Firmware) 0x00500000 0x00bfffff
2 ME 0x00003000 0x004fffff
3 GbE 0x00001000 0x00001000 0x00002fff
4 Alustatiedot käyttämätön käyttämätön

Intel ME:n ja Gigabit Ethernetin konfigurointitiedot

Huomaa, että yllä olevassa taulukossa on ME ja GbE. Nämä ovat binäärikappaleita, jotka alustavat tietokoneen osia (tässä tapauksessa Intel Management Engine ja Gigabit Ethernet). Vanhemmissa laitteissa nämä voidaan turvallisesti poistaa librebootin avulla, mutta Sandy Bridgessä ja uudemmissa laitteissa niitä tarvitaan, jotta tietokone toimii kunnolla. Koska Intel ME:tä tarvitaan näillä piirilevyillä, se on poistettava. Coreboot voi kuitenkin pienentää sitä huomattavasti poistamalla sen verkko- ja järjestelmäresurssien käytön. Tämä on suositeltavaa, sillä se ei ainoastaan paranna tietoturvaa, vaan jättää myös enemmän tilaa flash-sirulle muille hyötykuormille. Gigabit Ethernet -konfiguraatiotiedot ovat konekohtaisia, ja siksi ne on myös purettava flash-sirulta.

Tässä vaiheessa työhakemiston pitäisi sisältää neljä uutta tiedostoa, jotka noudattavat muotoa flashregion_*.bin. Näiden pitäisi vastata tulostettua taulukkoa. Kuten aiemmin mainittiin, tarvitaan kuvaaja, Intel ME ja GbE-blobit. Nimeä nämä vastaavasti nimiksi descriptor.bin, me.bin ja gbe.bin ja kopioi ne osoitteeseen coreboot/3rdparty/blobs/mainboard/<manufacturer>/<model>/; hakemistoon, joka luotiin aiemmin.

Configuring and Compiling Coreboot

Nyt coreboot on konfiguroitava kyseiselle koneelle. Kannattaa tarkistaa corebootin wiki-sivu kyseiselle laitteelle, jos siellä on tiettyjä vaatimuksia. Näin ollen tällä sivulla yritetään kertoa yksityiskohtaisesti vain asetukset, jotka on asetettava suurimmassa osassa asennuksia. Tätä ei voida taata, ja jotkin asetukset saattavat aiheuttaa ristiriitoja koneen kanssa.

Ensin on syötettävä asetukset. Tämä tehdään samalla tavalla kuin ytimen konfigurointi.

user $make nconfig

Vaihtoehtoisesti voidaan käyttää menuconfigia tai jopa muokata konfigurointitiedostoa manuaalisesti (kun se on luotu nconfig/menuconfigilla).

Yleiset asetukset

Suosittelen seuraavien toimintojen ottamista käyttöön:

  • Käytä CMOS:ia konfiguraatioarvoja varten
  • Pakkaa ramstage LZMA:lla
  • Pakkaa coreboot .config-tiedosto osaksi ROM-kuvaa
  • Luo taulukko käynnistyksen aikana kerätyistä aikaleimoista
  • Rakenna ramstage uudelleensijoitettavaksi 32-bittiseen osoiteavaruuteen.

Sandy Bridge tai uudempi laite:

  • Allow use of binary-only repository

Jos olet jo aiemmin kääntänyt corebootin, voit lyhentää kääntämisaikaa entisestään ottamalla käyttöön:

  • Update existing coreboot.rom image

Mainboard

Tässä on valittava myyjä ja malli. Varmista, että syötetään tarkka malli, jos johdannaisia on saatavilla (esim. X220/X220t). Myös ROM-piirin koko on valittava. Tämän pitäisi olla flashromin antama, mutta jos näin ei ole, se voidaan määrittää tarkistamalla tiedoston flash.bin tiedostokoko.

Chipset

Tämä valikko sisältää piirisarjakohtaiset asetukset ja myös aiemmin poimittujen binääritiedostojen sijainnit. koska tämä on pitkälti konekohtaista, vain tietyt asetukset on syytä ottaa käyttöön kaikkialla. Suosittelen ottamaan käyttöön:

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

Näillä helpotetaan virheenkorjausta, jos flash on huono. Ne voidaan poistaa käytöstä, kun tunnettu toimiva konfiguraatio on luotu.

Seuraavaksi on annettava polut kohdassa Intel Firmware. Ota nämä vaihtoehdot käyttöön:

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

Vaihtoehtojen polkujen pitäisi nyt näkyä. Niiden pitäisi vastata aiemmin käytettyjä nimiä, mutta jos näin ei ole, korjaa ne niin, että ne vastaavat.

Devices

Tämä alue koskee pitkälti grafiikkaa, erityisesti kannettavien tietokoneiden yhteydessä. Itse olen asettanut Graphics Initialisation -asetukseksi ’Use native graphics init’ ja Display/Framebuffer Mode -asetukseksi ’Linear ”high-resolution” framebuffer’. Loput näistä vaihtoehdoista pitäisi olla jo asetettu konetta varten. Jos tietty laite vaatii VGA BIOS-kuvan, noudata coreboot-wikiä.

Generic Drivers

Minä otan usein käyttöön:

  • PS/2 keyboard init

Jos laitteessa on Intel PCIe WiFi -kortti, ota käyttöön vaihtoehto

  • Support Intel PCI-e WiFi adapters

Security

Jättelen tämän usein rauhaan, koska se sisältää tällä hetkellä vain Verified Boot -vaihtoehdot, mutta jos tuki tälle on tarpeen, ota se käyttöön.

Console

Tämä osio sisältää konsolien debuggausta koskevia asetuksia. Tiettyjen vaihtoehtojen ottaminen käyttöön voi olla hyödyllistä, varsinkin jos ongelmia ilmenee. Olen ottanut käyttöön:

  • Squelch AP CPUs from early console.
  • Send console output to a CBMEM buffer
  • Show POST codes on the debug console

System Tables

Enable Generate SMBIOS tables, ainoa vaihtoehto tässä.

Payloads

Tässä kohdassa voidaan valita hyötykuorma. Tällä sivulla kerrotaan yksityiskohtaisesti, miten SeaBIOS asetetaan, koska sillä on suurin yhteensopivuus käyttöjärjestelmien kanssa, mutta on myös mahdollista käyttää GRUB2:ta nopeampaan käynnistykseen tai jopa sijoittaa ydin flash-sirulle (jos tilaa riittää).

Valitse seuraavat kohdat oikeaa SeaBIOS-asetusta varten:

  • Lisää hyötykuormaa > SeaBIOS
  • SeaBIOS-versio > master
  • Hardware init option ROM:n suorituksen aikana
  • Käytä hyötykuorman LZMA-pakkausta

Voi myös haluta ottaa käyttöön joitain toissijaisia hyötykuormia. Näitä voidaan käyttää virheenkorjaukseen ja optioiden muuttamiseen. Suositeltava vaihtoehto on nvramcui, joka toimii samalla tavalla kuin tavallinen BIOSin asetusvalikko.

Debuggaus

Nämä vaihtoehdot ovat pitkälti kehitystyötä varten. Tavallisten käyttäjien ei tarvitse ottaa mitään käyttöön tässä alivalikossa.

Kompilointi

Nyt kun konfigurointi on tehty, coreboot on käännettävä. Ensin on rakennettava ristiinkääntäjä:

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

Tämä edellyttää, että dev-lang/gnat-gpl on asennettu, muuten monet toiminnot eivät toimi oikein.

Kun tämä on tehty, käännä IASL:

käyttäjä $make iasl

Ja lopuksi käännä coreboot

käyttäjä $make

Flashaa coreboot.rom

Tämän pitäisi tuottaa build/-hakemistoon tiedosto nimeltä coreboot.rom. Tämä on lopullinen image, joka on flashattava. Kopioi tämä flasheriin, jos se ei ole jo siinä, pura kohdelaite ja kiinnitä flasheri flash-siruun.

Flasherissa käytä flashromia flashataksesi:

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

Kakkoskomennon pitäisi antaa tulokseksi VERIFIED. Jos näin on, coreboot on onnistuneesti flashattu laitteeseen.

Flashaus sisäisesti

Kun coreboot on alun perin flashattu, se voidaan myöhemmin flashata sisäisesti ilman ulkoista flashauslaitetta. Kun uusi coreboot.rom on käännetty, tee tätä varten yksinkertaisesti seuraavaa:

root #flashrom -p internal:laptop=force_I_want_a_brick -w coreboot.rom
Varoitus
Vaikka tämä on testattu useilla kannettavilla tietokoneilla, se ei välttämättä toimi käytettävässä laitteessa. Tarkista, onko muilla ollut onnistumisia tai epäonnistumisia kyseisen mallin sisäisen flasherin kanssa.

Vianmääritys

Coreboot ei käynnisty (Broken build)

Jos coreboot ei käynnisty, se tarkoittaa yleensä sitä, että sitä ei ole joko konfiguroitu kunnolla tai siitä puuttuu hyötykuorma. Varmista, että on valittu oikea hyötykuorma, joka on käännetty oikein ja konfiguroitu itse oikein.

On myös mahdollista, että coreboot toimii oikein, mutta graafinen komponentti ei. Tämä voi johtua natiivin gfx-initin käytöstä. Kokeile dumpata VGA BIOS ja käytä sitä sen sijaan. Vika voi olla myös päinvastainen; yritä vaihtaa VGA BIOSista natiiviin gfx-initiin. Viimeisenä keinona kokeile käyttää Legacy VGA -tekstitilaa framebuffer-tilana kohdassa Devices/Display.

Mikään ei enää käynnisty (aka SPI-siru on muurattu)

Tämä johtuu yleensä siitä, että kone jätetään päälle dumppauksen ajaksi tai että sitä vilkutetaan ulkoisella flasherilla. Jos kone ei käynnisty ollenkaan (valot, tuulettimet tai näyttö eivät käynnisty käynnistyksen yhteydessä), tämä voi tarkoittaa, että kone on muurattu. Korjaaminen voi olla mahdollista ostamalla uusi flash-siru (varmista, että se on yhteensopiva – yritä käyttää samaa valmistajaa ja mallia parhaan tuloksen saamiseksi) ja flashaamalla siihen joko alkuperäinen BIOS tai coreboot ROM. Tämä vaatii usein hyvin herkkää juottamista, eikä se ole heikkohermoisille. Se voi tarkoittaa, että on hankittava uusi kone tai ainakin uusi emolevy.

Huomautus
Varmista aina, ettei syynä ole väärin konfiguroitu coreboot!

Vastaa

Sähköpostiosoitettasi ei julkaista.