Coreboot

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-BootChromium OSGoogleが採用したブートローダーで、その派生物が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による将来の開発の基礎となることはなく、その後中止されました。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。