Coreboot

Resources
Home

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

一般に、フラッシュチップは選択したハードウェアの基板上に見つける必要があります。 これは、ベンダーが通常ソフト ロックダウンによってフラッシュ チップをロックするため、重要なことです。 チップを見つけるためのガイドは、一般的に 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 チップの消去と検証

<9705>

linux-mtd Linuxユーザー空間 SPIフラッシュデバイスのサポートを有効にするC to HDMI protocol translator

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情報を有効化する。

Data provided by the Gentoo Package Database – Last update: 2021-01-27 17:12 USE フラグの詳細

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
Warning
これはいくつかのラップトップ上でテストされていますが、使用中のデバイスで動作しないかもしれません。

トラブルシューティング

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でフラッシュすることで修復できる場合があります(互換性があることを確認し、同じメーカーとモデルを使用するようにしてください)。 この作業には非常に繊細なハンダ付けが必要な場合が多く、気の弱い人には向いていません。 新しいマシンを購入するか、少なくとも新しいマザーボードを購入しなければならないかもしれません。

Note
Coreboot の設定ミスが原因でないことを常に確認するようにしてください!

コメントを残す

メールアドレスが公開されることはありません。