coreboot(以前は
LinuxBIOSとして知られていた)は、Free Software Foundation(FSF)が支援する自由ソフトウェアプロジェクトです。高速な起動と高性能な
エラー処理を目標として、
1999年に
ロスアラモス国立研究所で開発が始まりました。
歴史
corebootプロジェクトは、
ロスアラモス国立研究所の高度計算機研究所にて
1999年の冬にスタートしました。その目的は、高速起動と高度な
エラー処理を実現するBIOSを作成することでした。このソフトウェアは、
GNU General Public License(GPL)の条項に基づいて
ライセンスされており、主な貢献者として、LANL、AMD、coresystems GmbH、そして
Linux Networx, Inc.が挙げられます。
Googleもこのプロジェクトの一部を支援しており、
金融先物取引企業のCME Groupも
2009年から支援を行っています。
また、
ARMアーキテクチャのサポートを可能にするため、Das U-Boot由来のコードが組み込まれています。
設計
通常、corebootは
ブートローダーを使用せず、直接
Linuxカーネルをロードします。しかし、iPXE(旧Etherboot)を介してネットワークから
Linuxを起動したり、SeaBIOSのような他のスタンドアロンELF
実行ファイルをロードすることも可能です。SeaBIOSは
Linux、Windows、BSDなどのOSを起動する際に利用されます。以前は、coreboot自身が提供していたAdd-on Layer(ADLO)を通じてWindowsやOpenBSDのサポートが行われていました。
corebootは、Myrinet、Quadrics、SCIクラスター接続など、さまざまな機器からほとんどすべての
オペレーティングシステムをロードできます。Windows、BSDを含む一部のOSは、SeaBIOSが提供するレガシーBIOS機能に依存しています。
x86アーキテクチャ版のcorebootの特徴として、わずか10の命令で32ビットモードに移行できる点が挙げられます。これは、
インテルベースのMacintoshコンピュータやその他の新しいPC
ハードウェアで使用されているUEFI
ファームウェアに似ています。corebootは、他の
カーネルをロードしたり、
ブートローダーに制御を渡すことも可能です。これにより、
Plan 9 from Bell Labsオペレーティングシステムを直接
ブートすることもできます。corebootは
GNU GRUB2にも対応しています。
デフォルトでは、corebootは他のBIOSが
ハードウェアアクセスに利用する
BIOS割り込みルーチンサービスを提供しません。ただし、ペイロードであるSeaBIOSがBIOS呼び出しを提供するため、そのようなBIOSサービスを必要とするOSもロード可能です。
corebootの開発とデバッグ
corebootは、
ハードウェアをゼロから初期化する必要があるため、サポートする
チップセットや
マザーボードへの移植が不可欠です。RAMの初期化前には、
シリアルポートを初期化し、
デバッグテキストを
端末に送ることができます。また、POSTカードを接続して診断コードを出力することも可能です。
別の移植方法としては、IOSS社の商用製品である"RD1 BIOS Savior"があります。この製品は、2つの
ブートメモリデバイスを組み合わせ、手動で切り替えることができます。これにより、一方のデバイスから起動し、別のデバイスにイメージを書き込むことが可能です。また、高価な代替品として、外部の
EPROMや
フラッシュメモリプログラマブルデバイス、
CPUエミュレータなども利用されます。Sage SmartProbeのように、JTAGポートを利用した製品もあり、BIOSデバイスに書き込む代わりにBIOS
エミュレータでコードをビルドできます。
ペイロード
corebootは、以下の各種ペイロードを読み込むことができます。これらのペイロードは、libpayloadヘルパー
ライブラリを使用して作成できますが、必須ではありません。
SeaBIOS:x86 BIOSの実装で、データサイズが小さく、ほとんどが16ビットC言語で記述されています。
FILO:GRUBに似た
ブートローダーで、USB
ブートをサポートしています。
Etherboot:ネットワーク経由でオペレーティングシステムを起動可能なペイロードです。
gPXE(iPXE):SeaBIOSのもとで動作するEtherbootの後継ソフトウェアです。
TianoCore:UEFIのオープンソース実装で、ハードウェア初期化機構は持たないため、corebootが初期化を行います。両者を組み合わせることでUEFIの完全なサポートが可能になります。
Das U-Boot:
Chromium OSで
Googleが採用した
ブートローダーで、その派生物がcorebootのペイロードとして利用可能です。
DRAMの初期化
corebootが初期化する最も複雑な
ハードウェアは、DRAMコントローラとDRAM自体です。この技術に関するドキュメントは
秘密保持契約(NDA)で制限されている場合や、利用できない場合があります。RAMが初期化されるまでは
CPUがそれを使用できないため、RAMの初期化は特に複雑です。
DRAMコントローラとDRAMの初期化のため、初期化コードは
CPUの汎用レジスタやCache-as-RAMのような一時的な記憶領域を使用します。
romccは、RAMの代わりにレジスタを記憶装置として使用するC
コンパイラです。これにより、タスクをより簡単に実行できます。romccを使用することで、System Management Bus(SMBus)から、DRAMの
DIMM上にあるSerial presence detect(SPD)ROMへのアクセスも容易になり、RAMを使用できるようになります。
最近のx86プロセッサでは、DRAMが初期化されるまでプロセッサキャッシュをRAMとして利用できます。ただし、プロセッサキャッシュはCache-as-RAMモードで初期化する必要があります。この初期化は、DRAMの初期化よりも命令数が少なく済み、
CPUアーキテクチャに依存しますが、
チップセットや
マザーボード単位で変化するDRAMの初期化よりも汎用的です。
サポートされているプラットフォーム
corebootは、
IA-32、x86-64、ARM、ARM64、MIPS、
RISC-Vなどの
CPUアーキテクチャをサポートしています。システムオンチップ(SOC)プラットフォームには、OLPC用に開発された
Geode GXプロセッサをはじめとするAMD
Geodeがあります。Artec Groupは、ThinCanモデルDBE61に
Geode LXのサポートを追加しました。このコードはAMDに採用され、
Geode LXプラットフォームにアップグレードされた後、OLPC用として改良され、corebootコミュニティによって他の
Geodeバリエーションにもサポートが拡大しました。
AMD
Geodeベースのプラットフォームでの初期開発以来、corebootのサポートは多くのAMDプロセッサと
チップセットに拡張されています。プロセッサには、ファミリ0Fhおよび10h(K8コア)、最近ではファミリ14h(Bobcatコア、Fusion APU)が含まれます。corebootのサポートは、AMD
チップセットRS690、RS7xx、SB600、SB8xxにも拡張されています。
AMDは、AMD64
マザーボード上のシステムデバイスを初期化する
ブートストラッププロトコルであるGeneric Encapsulated Software Architecture(AGESA)が2011年初頭にオープンソース化され、AMD64
ハードウェア上のコア
ブートシステム初期化に必要な機能を提供することを目指していました。しかし、2014年時点では、そのようなリリースはAMDによる将来の開発の基礎となることはなく、その後中止されました。