Coreboot

coreboot（以前は LinuxBIOSとして知られていた）は、フリーソフトウェア財団（Free Software Foundation; FSF）による支持を受けているフリーソフトウェアプロジェクトである。FSFは、このプロジェクトにより、多くのコンピュータに存在するプロプライエタリなBIOSファームウェアを、現代的な32ビットもしくは64ビットオペレーティングシステムをロード及び稼働するのに無くてはならない最小限のタスクのみを実行するよう設計された軽量なシステムで置き換えることを目指している。 corebootプロジェクトは、1999年冬、ロスアラモス国立研究所（Los Alamos National Laboratory; LANL）のAdvanced Computing Laboratory（高度計算機研究所）にて開始された。目標は、高速な起動と高性能なエラー処理を行うBIOSを作成することである。このソフトウェアはGNU General Public License（GPL）の条項の下ライセンスされている。主な貢献者は、LANL、AMD、coresystems GmbHそしてLinux Networx, Incである。更に、MSI（en）、GIGABYTE（en）、Tyan（英語版）といったマザーボードベンダーは、corebootを次世代の標準BIOSに位置付け、自社の最新マザーボードの持つ数種のハードウェアインタフェースの仕様をプロジェクトに提供している。しかしながら、どうやらTyanはcorebootのサポートを取りやめてしまった様である[要出典]。Googleはcorebootプロジェクトの一部をスポンサードしている。金融先物取引の企業集団であるCME Group（英語版）は2009年よりcorebootプロジェクトへの援助を開始している。 また、ARMアーキテクチャのサポートを可能とするためDas U-Boot由来のコードが投入、統合されている。 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（Athlon 64などのK8コア） ファミリー 14h（Bobcatコア、FusionAPU（英語版）） などが含まれる。またcorebootはAMDのチップセット RS690 RS7xx（英語版） SB600（英語版） SB8xx（英語版） にもサポートを拡大している。このことから、同様に新規のプロセッサやチップセットが市場に投入されても、corebootは即座にそれらに対応できると予測される。 corebootは通常、ブートローダを使用せず、直接Linuxカーネルをロードする。しかし、ブートサーバ（boot server）からのコールによりネットワーク上で（英語版）Linuxを起動させるiPXE（元Etherboot）や、Linux、Microsoft Windows 2000/XP/Vista/7やBSDをロードするのに使用されるSeaBIOS（英語版）のような、他の任意のスタンドアローンなELF実行ファイルをロードすることも可能である（以前は、coreboot自身が提供していたAdd-on Layer（ADLO）によりWindows 2000/XP, OpenBSDのサポートを行っていた）。corebootはまたMyrinet, Quadrics（英語版）, SCI（英語版）クラスター接続をはじめとする任意の機器から、ほとんど全てのオペレーティングシステムをロードできる。前述のとおり、Windows 2000/XP/Vista/7、BSDを含むいくつかのOSはSeaBIOSにより提供されるレガシーBIOS機能を必要とする。 coreboot固有の特徴として、x86アーキテクチャ版においては、たった10の命令数のみで32ビットモードに移行し動作するという点が挙げられる（他ほとんど全てのx86用BIOSが16ビットモードでしか動作できないにもかかわらずである）。これはインテルベースのMacintoshコンピュータやその他新規格のPCハードウェアで利用されている、最新のUEFIファームウェアに類似する。 corebootは他のカーネルをロードする、または、カーネルもしくはイメージをブートする代わりにブートローダに制御を渡すこともできる。この方法を利用すれば、Plan 9 from Bell Labsオペレーティングシステム・カーネルを直接ブートすることも可能である。corebootはGNU GRUB2にも対応している。 デフォルトでは、corebootは、他のBIOSがハードウェアアクセスに利用するBIOS割り込みルーチンサービスを提供しない。ペイロードとなるSeaBIOSはBIOS呼び出しを提供しているが故に、たとえそのようなBIOSサービスを要求するOSがあったとしてもcorebootはロードできる。しかしながら、近代的なオペレーティングシステムはBIOSコールとは別の方法でハードウェアにアクセスし、起動段階の初期ならびにフォールバック機構としてしかBIOSコールを使用しないはずである。 corebootは何もない状態から、ハードウェアを初期化しなければならない為、サポートするチップセットやマザーボードへの移植が必要となる。RAMの初期化前の段階で、corebootは、シリアルポートを（キャッシュとレジスタのアドレッシングのみ）初期化する。こうすることで、接続する端末にデバッグテキストを送出することができる。また同様にPOSTカード（英語版）（POSTで報告されるエラーコードを診断できるICチップ）を接続し、2桁の16進数診断用コードを出力させるためのポート0x80にバイトコードを送信可能である。別の移植への助力は、IOSS社が販売する商用製品"RD1 BIOS Savior"（日本語名: "RD1 ROM焼き だいじょうぶ!"）へ向けられている。この製品は、二つのブートメモリデバイスを組み合わせたもので、ブートメモリソケットに接続し手動で2つのデバイスを切り替えられる。コンピュータは一方のデバイスから起動し、2番目のメモリデバイスに切り替えることで、イメージをリプログラム即ち焼き込む事が可能となっている。より高価な代替品は外部に取り付けるEPROMやフラッシュメモリプログラマブルデバイスである。またCPUの代わりとして、もしくはJTAGポート経由で接続するCPUエミュレータの利用も考慮されている。JTAGポートを利用したcorebootを組み込んだ製品の例として、Sage SmartProbeというものがある。BIOSデバイスに焼き込む代わりに、BIOSエミュレータ上でコードをビルド、またはダウンロードできる。 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のペイロードとして利用可能である。 corebootが初期化する最も複雑なハードウェアはDRAMコントローラ（DRAM controller）とDRAM自身である。いくつかのケースでは、課題となるテクノロジーに関する文書が秘密保持契約（Non-disclosure agreement; NDA）に縛られている、またはそもそも利用できない。RAMが初期化されるまではCPUがそれを使用できないため、RAMの初期化プロセスはとりわけ複雑である。それゆえDRAMコントローラとDRAMの初期化のために、初期化コードはCPUの汎用（目的）レジスタ（general purpose register）または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の初期化と比べ命令数が少なくて済む。またCache-as-RAMモードはCPUアーキテクチャ依存ではあるが、チップセットやマザーボード単位で変化するDRAMの初期化に比べれば幾分汎用的ではある。