Coreboot

corebootは、フリーソフトウェア財団による支持を受けているフリーソフトウェアプロジェクトである。FSFは、このプロジェクトにより、多くのコンピュータに存在するプロプライエタリなBIOSファームウェアを、現代的な32ビットもしくは64ビットオペレーティングシステムをロード及び稼働するのに無くてはならない最小限のタスクのみを実行するよう設計された軽量なシステムで置き換えることを目指している。

1. 歴史
-----

corebootプロジェクトは、1999年冬、ロスアラモス国立研究所の//Advanced Computing Laboratory//にて開始された。目標は、高速な起動と高性能なエラー処理を行うBIOSを作成することである。このソフトウェアはGNU General Public Licenseの条項の下ライセンスされている。主な貢献者は、LANL、AMD、coresystems GmbHそしてLinux Networx, Incである。更に、MSI、GIGABYTE、Tyanといったマザーボードベンダーは、corebootを次世代の標準BIOSに位置付け、自社の最新マザーボードの持つ数種のハードウェアインタフェースの仕様をプロジェクトに提供している。しかしながら、どうやらTyanはcorebootのサポートを取りやめてしまった様であるdate=January 2008}}。Googleはcorebootプロジェクトの一部をスポンサードしている。金融先物取引の企業集団であるCME Groupは2009年よりcorebootプロジェクトへの援助を開始している。

また、ARMアーキテクチャのサポートを可能とするためDas U-Boot由来のコードが投入、統合されている。

2. サポートするプラットフォーム
-----------------

x86, x86-64アーキテクチャに加え、AMD Geodeプロセッサシステムもサポートしている。Geode GXサポートはAMDにより、OLPCのために開発が開始され、Artec Groupが同社のDBE61 ThinCanモデル用にGeode LXのサポートを加えている。近年では、AMDによりコードが導入された為、サポートするGeode LXプラットフォームが増加しており、OLPCでの動作のため更なる改良が加えられている。AMDが寄贈したコードは他のGeodeベース・システムのサポートのため、corebootコミュニティにより更なる開発が現在も続けられている。

corebootはフラッシュロムを利用するマザーボードに焼き込むことも可能である。フラッシュロムを利用するAMD Geodeプラットフォームではこの方法でcorebootを導入することとなる。

AMD Geodeベースプラットフォームでの初期の開発から、corebootのサポートは多くのAMDプロセッサやチップセット上に拡張された。サポートされたプロセッサは、

ファミリー 0Fh, 10h
ファミリー 14hなどが含まれる。またcorebootはAMDのチップセット

RS690
にもサポートを拡大している。このことから、同様に新規のプロセッサやチップセットが市場に投入されても、corebootは即座にそれらに対応できると予測される。

3. 設計
-----

corebootは通常、ブートローダを使用せず、直接Linuxカーネルをロードする。しかし、ブートサーバからのコールによりネットワーク・ブーティングLinuxを起動させるiPXEや、Linux、Microsoft Windows 2000/XP/Vista/7やBSDをロードするのに使用されるSeaBIOSのような、他の任意のスタンドアローンなELF実行ファイルをロードすることも可能である。corebootはまたMyrinet, Quadrics, Scalable Coherent Interfaceクラスター接続をはじめとする任意の機器から、ほとんど全てのオペレーティングシステムをロードできる。前述のとおり、Windows 2000/XP/Vista/7、BSDを含むいくつかのOSはSeaBIOSにより提供されるレガシーBIOS機能を必要とする。

coreboot固有の特徴として、x86アーキテクチャ版においては、たった10の命令数のみで32ビットモードに移行し動作するという点が挙げられる。これはインテルベースのMacintoshコンピュータやその他新規格のPCハードウェアで利用されている、最新のUEFIファームウェアに類似する。

corebootは他のカーネルをロードする、または、カーネルもしくはイメージをブートする代わりにブートローダに制御を渡すこともできる。この方法を利用すれば、Plan 9 from Bell Labsオペレーティングシステム・カーネルを直接ブートすることも可能である。corebootはGNU GRUB2にも対応している。

デフォルトでは、corebootは、他のBIOSがハードウェアアクセスに利用するBIOS割り込みルーチンサービスを提供しない。ペイロードとなるSeaBIOSはBIOS呼び出しを提供しているが故に、たとえそのようなBIOSサービスを要求するOSがあったとしてもcorebootはロードできる。しかしながら、近代的なオペレーティングシステムはBIOSコールとは別の方法でハードウェアにアクセスし、起動段階の初期ならびにフォールバック機構としてしかBIOSコールを使用しないはずである。

4. corebootの開発とデバッグ
-------------------

corebootは何もない状態から、ハードウェアを初期化しなければならない為、サポートするチップセットやマザーボードへの移植が必要となる。RAMの初期化前の段階で、corebootは、シリアルポートを初期化する。こうすることで、接続する端末にデバッグテキストを送出することができる。また同様にPOSTカードを接続し、2桁の16進数診断用コードを出力させるためのポート0x80にバイトコードを送信可能である。別の移植への助力は、IOSS社が販売する商用製品"RD1 BIOS Savior"へ向けられている。この製品は、二つのブートメモリデバイスを組み合わせたもので、ブートメモリソケットに接続し手動で2つのデバイスを切り替えられる。コンピュータは一方のデバイスから起動し、2番目のメモリデバイスに切り替えることで、イメージをリプログラム即ち焼き込む事が可能となっている。より高価な代替品は外部に取り付けるEPROMやフラッシュメモリプログラマブルデバイスである。またCPUの代わりとして、もしくはJTAGポート経由で接続するCPUエミュレータの利用も考慮されている。JTAGポートを利用したcorebootを組み込んだ製品の例として、Sage SmartProbeというものがある。BIOSデバイスに焼き込む代わりに、BIOSエミュレータ上でコードをビルド、またはダウンロードできる。

5. ペイロード
--------

corebootは以下の各種ペイロードも読み込み可能である。ペイロードはlibpayloadヘルパーライブラリを利用して作成することが出来るがそれは必須ではない。

SeaBIOSはx86 BIOSの一実装である。データサイズは小さく、GCCを利用し、ほとんどが16ビットC言語で書かれている。
FILOはGRUBに似たブートローダであり、USBブートをサポートしている。
Etherbootはネットワーク越しにオペレーティングシステムを起動可能なペイロードである。
gPXEそして現在の名前iPXEはSeaBIOSのもとで稼働するEtherbootの後継ソフトウェアである。
TianoCoreはUEFIのオープンソース実装である。TianoCoreはハードウェア初期化機構を持たず、実際の初期化はcorebootの仕事となる。両者を組み合わせることでUEFIの完全なサポートが可能となる。
Chromium OSにおいてGoogleが採用したブートローダDas U-Bootはその派生物がcorebootのペイロードとして利用可能である。

6. DRAMの初期化
-----------

corebootが初期化する最も複雑なハードウェアはDRAMコントローラとDRAM自身である。いくつかのケースでは、課題となるテクノロジーに関する文書が秘密保持契約に縛られている、またはそもそも利用できない。RAMが初期化されるまではCPUがそれを使用できないため、RAMの初期化プロセスはとりわけ複雑である。それゆえDRAMコントローラとDRAMの初期化のために、初期化コードはCPUの汎用レジスタまたは//Cache-as-RAM//のような一時記憶領域の形態をとるしかない。

romccはRAMの代わりにレジスタを記憶装置として使用するCコンパイラである。これを利用するとタスクはより簡単に実行できる。romccを利用することで、System Management Busから、DRAMのDIMM上にあるSerial presence detectROMへのアクセスも比較的容易になり、RAMを使用できるようになる。

比較的最近のx86プロセッサでは、DRAMが初期化されるまでプロセッサキャッシュがRAMとして利用可能である。ただプロセッサキャッシュは//Cache-as-RAM//モードで初期化されなければならない。しかし、これはDRAMの初期化と比べ命令数が少なくて済む。またCache-as-RAMモードはCPUアーキテクチャ依存ではあるが、チップセットやマザーボード単位で変化するDRAMの初期化に比べれば幾分汎用的ではある。

7. 脚注
-----

7.1. 注釈
-------

7.2. 出典
-------

8. 関連項目
-------

Open Firmware
Splashtop

9. 関連文書
-------

"[1]" Peter Seebachによる。
"[2]" 上記の翻訳記事。IBM dW.
"[3]" Bruce Byfieldによる。
"[4]" 上記の翻訳記事。OSDN Magazine提供。
"[5]" ブランドン・ホワードによる。
[6]

10. 外部リンク
---------

[7]