Coreboot はフリーでオープンソースのファームウェアで、UEFI に代わる高速、安全、柔軟なファームウェアを目標としています。 このガイドでは、サポートされたデバイスに SeaBIOS ペイロードを持つ coreboot をインストールする方法、ユーザースペースツールの取り扱い、flashrom の使用について説明します。 完全に最新の表は以下のリンクから入手可能です。 下の表は、よくサポートされているデバイスで、多かれ少なかれ最近リリースされたものです。 古いデバイスを使用している場合、すべてのプロプライエタリなバイナリブロブを削除することが可能かもしれません。 これには libreboot ガイドを使用してください。
Hardware | Supported | Blob Free | Native RAM Init | Native Graphics Init | Blob Free | Hardware | Supported | Native RAM Init | Native Graphics Init ハードウェアでフラッシュ可能 | ソフトウェアでフラッシュ可能 | はんだ除去が必要 |
---|---|---|---|---|---|---|---|---|---|---|---|
Lenovo Thinkpad T530 | はい / 現在故障中 | いいえ | はい | 部分的 | はい | 部分的 / OEM BIOS付きではない | |||||
Lenovo Thinkpad T430s | はい / 現在故障中 | いいえ | はい | 部分的に | 部分的 / OEM BIOS非搭載 | はい | |||||
Lenovo Thinkpad X230 | はい | いいえ | 部分的 | Yes | 部分的 / OEM BIOS非搭載 | No | |||||
Lenovo Thinkpad T420s | はい | いいえ | はい | 部分的 | はい | 部分的/OEM BIOSなし | いいえ | ||||
Lenovo Thinkpad T420 | No / WIP | No | Yes | Partial | Yes | Partial / OEM非搭載 BIOS | No | ||||
Lenovo Thinkpad T520 | Yes | No | Yes | Partial | Yes | 部分的 / OEM BIOS非搭載 | No | ||||
Lenovo Thinkpad X220 | Yes | No | Yes | 部分的 | はい | 部分的 / OEM BIOS非搭載 | いいえ | ||||
Lenovo Thinkpad X220 | はい | No | Yes | Partial | Yes | Partial / not with OEM BIOS | No | ||||
Lenovo(レノボ Thinkpad T410 | No / WIP | No | Yes | Partial | Yes | Partial / OEM BIOS | No | ||||
Lenovo Thinkpad T510 | No / WIP | No | Yes | Partial | Yes | 部分的 / OEM BIOS非搭載 | No | ||||
Lenovo Thinkpad X201 | Yes / 現在故障中 | No | Yes | Partial | Yes | Partial / not with OEM BIOS | No | ||||
Apple Macbook Air 4,2 | Yes | No | Yes | Partial / not with OEM BIOS | No |
- The Basics
- SPI flash
- flashrom
- USE flags for sys-apps/flashrom 読み書きのためのユーティリティです。 フラッシュ ROM チップの消去と検証
- Intel ME and Gigabit Ethernet Configuration Data
- Coreboot の設定とコンパイル
- General Setup
- Mainboard
- Chipset
- Generic Drivers
- Security
- Console
- システム テーブル
- Payloads
- コンパイル
- Flashing coreboot.rom
- 内部でフラッシュする
- トラブルシューティング
- Coreboot が起動しない (Broken build)
- Nothing is booting anymore (aka SPI chip bricked)
The Basics
一般に、フラッシュチップは選択したハードウェアの基板上に見つける必要があります。 これは、ベンダーが通常ソフト ロックダウンによってフラッシュ チップをロックするため、重要なことです。 チップを見つけるためのガイドは、一般的に coreboot wiki にあります。 このガイドでは、デバイスが SPI フラッシュチップを含んでいると仮定し、フラッシャーに接続するためのクリップを必要とします。 しかし、以前のものは、それだけでcorebootをコンパイルするのに十分なRAMを持っていないことに注意してください。 このようなものを使用する場合は、フラッシュチップのダンプをより高性能なコンピュータにコピーするようにしてください。 もしフラッシュチップが SPI ベースのものであれば、 Pomona SOIC-8 テストクリップを 15 ポンドで買ってください。 他にもいろいろなプログラマがあります。
SPI flash
SPIチップには様々な種類があります(リスト)。 これらのチップの最も一般的なパッケージはSOIC-8で、テストクリップでフラッシュすることができます。 時々、これらのチップは WSON-8 パッケージに入っています。その場合、WSON-8 チップの半田付けを解除し、新しい SOIC-8 と再半田付けする必要があります。 もし、ハンダ付けの手助けが必要なら、お近くのハッカースペースに尋ねてみてください。 SPIチップは、2MBから16MBまでのサイズが一般的です。 ベンダーはコストを削減するために2つのチップをハンダ付けすることがよくあります。
flashrom
USE flags for sys-apps/flashrom 読み書きのためのユーティリティです。 フラッシュ ROM チップの消去と検証
atahpt |
Highpoint (HPT) ATA/RAID コントローラ サポート |
atapromise |
|
atavia |
VIA VT6421A SATAコントローラをサポート |
buspirate-spi |
Bus Pirate SPI を有効化する。 プログラマ |
ch341a-spi |
WCH CH341A SPI プログラマを有効にする |
dediprog |
Dediprog SF100 サポート |
developerbox-spi |
Devloperbox SPI recoveryのサポートを有効にする |
digilent-spi |
Digilent iCEblink40開発ボードのサポートを有効にする |
drkaiser |
Dr. Dr.のサポートを有効にする Kaiserプログラマ |
dummy |
Enable dummy tracing |
ene-lpc |
Enable ENE LPC interface keyboard controller |
ft2232-spi |
Enable ftdi programmer.DIGI CARD.COM |
Enable FPDI programmer.DIGI CARD.COM FTDI/SPI USBインターフェースを通してのフラッシュ | |
gfxnvidia |
NVIDIAプログラマを有効にする |
internal |
内部/基板サポートを有効にする |
internal-dmi |
DMIデコードではなく内部デコーダを有効にする – システムを使用せず- <9705apps/dmidecode |
it8212 |
ITE IT8212F ATA/RAIDコントローラのサポート |
jlink-spi |
SEGGER J- のサポートリンクと互換性のあるデバイス |
linux-mtd |
Linux mtd SPIフラッシュデバイスのサポートを有効にする |
linux-spi |
Linuxユーザー空間 spidevインターフェースのサポートを有効にする |
lspcon-i2c-spi |
Parade lspcon USB-> |
mec1308 |
Enable support for Microchip MEC1308 embedded controller |
mstarddc-spi |
Support for SPI flash ROM accessible through DDC in MSTAR-> |
nic3com |
3Com NICプログラマを有効にする |
nicintel |
Intel NICをサポート |
<151> | Intel Gigabit ネットワーク カードにおける EEPROM のサポート |
nicintel-spi |
Intel NIC における SPI のサポート |
nicnatsemi |
のサポート National Semiconductor製NICの場合 |
nicrealtek |
Realtek製NICの場合 |
ogp-spi |
OGP (Open Graphics) をサポートできるよう にする。 SPI フラッシュのサポート |
pickit2-spi |
Microchip PICkit2 からアクセスできる SPI フラッシュ ROM のサポート |
pony-spi |
SI-Unable support for SPI flashing PICkit2 からアクセスできる SPI フラッシュ ROM をサポート。LancosによるProgライクなハードウェア |
raiden-debug-spi |
ChromiumOS Servo DUTデバッグボードを使用可能にする |
rayer-spi |
RayeR SPIPGM ハードウェアのサポート |
realtek-mst-i2c-spi |
Realtek MultiStream Transport (MST) のサポートを有効にする |
satamv |
Marvell SATA コントローラ用のプログラマを有効にする |
satasii |
プログラマを有効にする SiI SATA コントローラ用 |
serprog |
Serial Flasher programmer を有効にする |
static |
!!ブートストラップ中に設定しないでください! バイナリを動的リンクではなく静的リンクにする |
stlinkv3-spi |
STLINK-V3 で SPI プログラマを有効にする |
tools |
ich_descriptor_tool.Installation ICH_DESCRIPTOR_Tool, IntelチップセットのディスクリプタモードSPIフラッシュイメージを読み込むためのツール |
usbblaster-spi |
Altera USB-Blaster dongleのサポートを有効にする |
wiki |
サポートデバイスなどのWiki情報を有効化する。 |
flashrom はフラッシュチップへの書き込みとダンプに最もよく使われます。 これはフラッシャー、またはフラッシャーが接続されているマシンにインストールされなければなりません。
coreboot が最初にフラッシュされると、分解やフラッシャーを使用せずに内部でフラッシュすることができるので、フラッシュされるシステム上に flashrom をインストールすると便利です。
一旦フラッシュ・チップがフラッシャーに接続されると、フラッシュ・チップの内容をダンプするためにflashromを使用します。
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
接続エラーがある場合に、複数のダンプを取っておくことが重要です。 適切なダンプが得られたら、必要であれば、とりあえずフラッシャーを切り離しても大丈夫です。 Raspberry Pi v1 で実行する場合、コンパイルに十分な RAM がないため、この時点でダンプを別のマシンに転送する必要があることを覚えておいてください。 フラッシュ チップをダンプしたコンピューターを使用することも可能ですが、この場合、後で再アセンブリと再度の逆アセンブリが必要になります。 また、特定のメーカーとモデル用のディレクトリを作成する必要があります。
user $
git clone --recursive https://review.coreboot.org/coreboot.git
user $
cd coreboot
user $
mkdir -p 3rdparty/blobs/mainboard/<manufacturer>/<model>
<manufacturer> と <model> はそれぞれメーカーとモデル(例:³)に置き換えます。
次のステップは、フラッシュダンプのリージョンを抽出することです。 領域はパーティションに似ており、フラッシュ チップには、いくつかのプロパティを追加した SPI フラッシュのパーティション テーブルと見なせるフラッシュ ディスクリプタがあります。 このディスクリプタは ifdtool と呼ばれるプログラムによって読み取られ、個々のパーティションを獲得するために使用されます。
最初に、ifdtool をコンパイルする必要があります。 そのソースは coreboot の下に含まれているので、coreboot をクローンしたディレクトリに cd してください。
user $
cd util/ifdtool
user $
make
グローバルにインストールすると良いですが、必要ないようです。
root #
make install
それから、cd で flash.bin があるところに戻ります。
user $
ifdtool -x flash.bin
これはパーティション・テーブルを表示し、いくつかの blob を展開するものです。 標準的なパーティションテーブルは次のようになります。
Region | Description | Start Region | End Region |
---|---|---|---|
0 | Flash Descriptor | 0x00000000 | 0x00000fff |
1 | BIOS (Firmware) | 0x00500000 | 0x00bfffff |
2 | ME | 0x00003000 | 0x004fff |
3 | GbE | 0x00001000 | 0x00002fff |
4 | Platform Data | unused | unused |
Intel ME and Gigabit Ethernet Configuration Data
上の表で ME と GbE がどう含まれているかに注目してください。 これらは、コンピュータの一部 (この場合、Intel Management Engine と Gigabit Ethernet) を初期化するバイナリ blob です。 古いデバイスでは、これらは libreboot で安全に削除できますが、Sandy Bridge 以降では、コンピュータを正しく動作させるために必要です。 これらのボードでは Intel ME が必要なので、それを抽出する必要があります。 しかし、coreboot はそのサイズを大幅に縮小し、ネットワークとシステムリソースへのアクセスを削除することができます。 これは、セキュリティを向上させるだけでなく、フラッシュチップ上に他のペイロードのためのスペースを確保することができるため、推奨される方法です。 ギガビットイーサネットの設定データは各マシンに固有であり、そのため、フラッシュチップから抽出する必要があります。
この時点で、作業ディレクトリには、flashregion_*.bin という形式に従って、4 つの新しいファイルが含まれているはずです。 これらは、印刷されたテーブルに対応する必要があります。 前に述べたように、ディスクリプタ、Intel ME、GbEブロブが必要です。 これらをそれぞれ descriptor.bin、me.bin、gbe.bin にリネームし、 coreboot/3rdparty/blobs/mainboard/<manufacturer>/<model>/ にコピーします。
Coreboot の設定とコンパイル
さて、特定のマシン用に coreboot を設定しなければなりません。 特定の要件がある場合に備えて、指定されたデバイスの coreboot wiki ページを確認するのが一番です。 そのため、このページではインストールの大部分で設定しなければならない設定のみを詳しく説明しようとします。
最初に、設定を入力する必要があります。 これはカーネルの設定と同様の方法で行います。
user $
make nconfig
あるいは menuconfig や、 (nconfig/menuconfig で一度生成した) 設定ファイルを手で編集することも可能でしょう。
General Setup
以下の設定を有効にすることをお勧めします:
- Use CMOS for configuration values
- Compress ramstage with LZMA
- include the coreboot .config ファイルを ROM イメージに含める
- ブート中に収集したタイムスタンプのテーブルを作成する
- 32 ビットアドレス空間で再配置可能な ramstage を構築する
Sandy Bridge またはそれ以降のデバイスの場合。
- Allow use of binary-only repository
また、以前に coreboot をコンパイルしている場合、以下を有効にすると、さらにコンパイル時間を短縮できます。
- Update existing coreboot.rom image
Mainboard
ここで、ベンダーとモデルを選択しなければなりません。 派生製品 (例: X220/X220t) がある場合、正確なモデルが入力されていることを確認してください。 ROM チップ サイズも選択する必要があります。 これはflashromによって出力されているはずですが、そうでない場合はflash.binのファイルサイズをチェックすることによって判断できます。
Chipset
このメニューには、チップセット固有のオプションと、先に抽出したバイナリ blob の位置が含まれています。
- Enable VMX for virtualization
- Set lock bit after configuring VMX
- Beep on fatal error
- Flash LEDs on fatal error
これらは、不良フラッシュがある場合のデバッグを容易にするために有効になっています。 これらは、既知の動作設定が作成されると無効にすることができます。
次に、Intel ファームウェアでパスを提供する必要があります。 これらのオプションを有効にします:
- Add Intel descriptor.bin file
- Add Intel ME/TXE firmware
- Strip down the Intel ME/TXE firmware
- Add gigabit ethernet firmware
これでパスのためのオプションが表示されているはずです。 これらのオプションは、以前使用した名前と一致しているはずですが、一致していない場合は、一致するように訂正してください。 個人的には、グラフィックスの初期化を「Use native graphics init」に設定し、ディスプレイ/フレームバッファモードを「Linear “high-resolution” frame buffer」に設定しました。 これらのオプションの残りは、そのマシン用にすでに設定されているはずです。 特定のデバイスに VGA BIOS イメージが必要な場合は、coreboot wiki に従ってください。
Generic Drivers
私はしばしば有効にしています。
- PS/2 keyboard init
デバイスに Intel PCIe WiFi カードがある場合、オプション
- Support Intel PCI-e WiFi adaptters
Security
現在は Verified Boot オプションのみが含まれているのでそのままにしますが、これに対する支援が必要であれば有効化してください。
Console
このセクションには、コンソールのデバッグに関するオプションが含まれています。 特に、問題が発生している場合、特定のオプションを有効にすると便利な場合があります。 私は、以下を有効にしました:
- Squelch AP CPUs from early console.
- Send console output to a CBMEM buffer
- Show POST codes on the debug console
システム テーブル
Generate SMBIOS table, only option here.Enable SMBIOS テーブルは、このオプションだけしか使用できません。
Payloads
このセクションでは、ペイロードを選択することができます。 このページでは、OSとの互換性が最も高いSeaBIOSの設定方法を詳しく説明しますが、より高速なブートのためにGRUB2を使用したり、フラッシュチップにカーネルを配置することも可能です(十分なスペースがある場合)。
適切な SeaBIOS セットアップのために以下を選択します:
- ペイロードを追加する > SeaBIOS
- SeaBIOSバージョン > master
- オプションROM実行中のHardware init
- Use LZMA compression for payloads
また、いくつかの二次ペイロードの有効化が望まれる場合もあるでしょう。 これらはデバッグやオプションの変更に使用することができます。 推奨されるオプションは nvramcui で、これは標準的な BIOS オプションメニューと同様の働きをします。 一般ユーザーは、このサブメニューで何も有効にする必要はありません。
コンパイル
設定が完了したので、coreboot をコンパイルする必要があります。
user $
make crossgcc-i386 CPUS=${nproc}
これには dev-lang/gnat-gpl がインストールされている必要があり、さもなければ多くの機能が正しく動作しません。
これが終わったら、IASLをコンパイルします:
user $
make iasl
そして最後に、 coreboot
user $
make
Flashing coreboot.rom
これで build/ ディレクトリに coreboot.rom というファイルが作成されるはずです。 これは、フラッシュする必要がある最終的なイメージです。 これをフラッシャーにコピーします。もしフラッシャーになければ、ターゲットデバイスを分解し、フラッシャーをフラッシュチップに取り付けます。
フラッシャー上で、flashromを使ってフラッシュします:
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -w coreboot.rom
root #
flashrom -p linux_spi:dev=/dev/spidev0.0 -v coreboot.rom
2番目のコマンドはVERIFIEDと返すはずです。
内部でフラッシュする
一度 coreboot をフラッシュすると、外部フラッシュデバイスを必要とせず、内部でフラッシュすることが可能です。 これを行うには、新しい coreboot.rom がコンパイルされたら、次のようにします:
root #
flashrom -p internal:laptop=force_I_want_a_brick -w coreboot.rom
これはいくつかのラップトップ上でテストされていますが、使用中のデバイスで動作しないかもしれません。
トラブルシューティング
Coreboot が起動しない (Broken build)
コアブートが起動しない場合、通常、正しく設定されていないか、ペイロードが不足していることを意味します。 正しくコンパイルされ、適切に設定された適切なペイロードが選択されたことを確認します。
また、coreboot は正しく動作しているが、グラフィック コンポーネントが動作していないこともあります。 これは、ネイティブの gfx init を使用することによって引き起こされるかもしれません。 VGA BIOS をダンプして、代わりにそれを使ってみてください。 VGA BIOS からネイティブ gfx init に切り替えてみてください。 最後の手段として、Devices/Display でフレームバッファモードに Legacy VGA text mode を使用してみてください。
Nothing is booting anymore (aka SPI chip bricked)
これは通常、ダンプまたは外部フラッシャーでのフラッシュ中にマシンに電源を入れたままにすると発生するものです。 マシンの電源が全く入らない (起動時にライト、ファン、ディスプレイが点灯しない) 場合は、マシンがレンガ化されている可能性があります。 新しいフラッシュチップを購入し、オリジナルのBIOSまたはcoreboot ROMでフラッシュすることで修復できる場合があります(互換性があることを確認し、同じメーカーとモデルを使用するようにしてください)。 この作業には非常に繊細なハンダ付けが必要な場合が多く、気の弱い人には向いていません。 新しいマシンを購入するか、少なくとも新しいマザーボードを購入しなければならないかもしれません。
Coreboot の設定ミスが原因でないことを常に確認するようにしてください!
。