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
- Perusteet
- Flasher
- SPI-flash
- flashrom
- USE flags for sys-apps/flashrom Utility for reading, writing, pyyhkimiseen ja tarkistamiseen flash ROM -piirien
- Dumppaus- ja kääntämistyökalut
- Intel ME:n ja Gigabit Ethernetin konfigurointitiedot
- Configuring and Compiling Coreboot
- Yleiset asetukset
- Mainboard
- Chipset
- Devices
- Generic Drivers
- Security
- Console
- System Tables
- Payloads
- Debuggaus
- Kompilointi
- Flashaa coreboot.rom
- Flashaus sisäisesti
- Vianmääritys
- Coreboot ei käynnisty (Broken build)
- Mikään ei enää käynnisty (aka SPI-siru on muurattu)
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. |
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.
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
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.
Varmista aina, ettei syynä ole väärin konfiguroitu coreboot!