coreboot
coreboot(以前は LinuxBIOS[2]として知られていた)は、フリーソフトウェア財団(Free Software Foundation; FSF)による支持[3]を受けているフリーソフトウェアプロジェクトである。FSFは、このプロジェクトにより、多くのコンピュータに存在するプロプライエタリなBIOSファームウェアを、現代的な32ビットもしくは64ビットオペレーティングシステムをロード及び稼働するのに無くてはならない最小限のタスクのみを実行するよう設計された軽量なシステムで置き換えることを目指している。
作者 | Ronald G. Minnich, Eric Biederman, Olli Lo, Stefan Reinauer, corebootコミュニティ |
---|---|
初版 | 1999年 |
最新版 |
4.13
/ 2020年11月20日 |
リポジトリ | |
プラットフォーム | x86, x86-64, ARM[1] |
種別 | ファームウェア |
ライセンス | GNU General Public License |
公式サイト | coreboot.org |
歴史
編集corebootプロジェクトは、1999年冬、ロスアラモス国立研究所(Los Alamos National Laboratory; LANL)のAdvanced Computing Laboratory(高度計算機研究所)にて開始された[4]。目標は、高速な起動と高性能なエラー処理を行うBIOSを作成することである[5]。このソフトウェアはGNU General Public License(GPL)の条項の下ライセンスされている。主な貢献者は、LANL、AMD、coresystems GmbH[6]そしてLinux Networx, Inc[注釈 1]である。更に、MSI(en)、GIGABYTE(en)、Tyanといったマザーボードベンダーは、corebootを次世代の標準BIOSに位置付け、自社の最新マザーボードの持つ数種のハードウェアインタフェースの仕様をプロジェクトに提供している。しかしながら、どうやらTyanはcorebootのサポートを取りやめてしまった様である[要出典]。Googleはcorebootプロジェクトの一部をスポンサードしている[7]。金融先物取引の企業集団であるCME Groupは2009年よりcorebootプロジェクトへの援助を開始している[8]。
また、ARMアーキテクチャのサポートを可能とするためDas U-Boot由来のコードが投入、統合されている[9]。
サポートするプラットフォーム
編集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プロセッサやチップセット上に拡張された。サポートされたプロセッサは、
などが含まれる。またcorebootはAMDのチップセット
にもサポートを拡大している。このことから、同様に新規のプロセッサやチップセットが市場に投入されても、corebootは即座にそれらに対応できると予測される。
設計
編集corebootは通常、ブートローダを使用せず、直接Linuxカーネルをロードする。しかし、ブートサーバ(boot server)からのコールによりネットワーク上でLinuxを起動させるiPXE(元Etherboot)[注釈 2]や、Linux、Microsoft Windows 2000/XP/Vista/7やBSDをロードするのに使用されるSeaBIOS[注釈 3][10][11]のような、他の任意のスタンドアローンなELF実行ファイルをロードすることも可能である(以前は、coreboot自身が提供していたAdd-on Layer(ADLO)[12][13]によりWindows 2000/XP, OpenBSDのサポートを行っていた)。corebootはまたMyrinet, Quadrics, SCIクラスター接続をはじめとする任意の機器から、ほとんど全てのオペレーティングシステムをロードできる。前述のとおり、Windows 2000/XP/Vista/7、BSDを含むいくつかのOSはSeaBIOSにより提供されるレガシーBIOS機能を必要とする。
coreboot固有の特徴として、x86アーキテクチャ版においては、たった10の命令数のみで32ビットモードに移行し動作するという点が挙げられる[14](他ほとんど全てのx86用BIOSが16ビットモードでしか動作できないにもかかわらずである)。これはインテルベースのMacintoshコンピュータやその他新規格のPCハードウェアで利用されている、最新のUEFIファームウェアに類似する。
corebootは他のカーネルをロードする、または、カーネルもしくはイメージをブートする代わりにブートローダに制御を渡すこともできる。この方法を利用すれば、Plan 9 from Bell Labsオペレーティングシステム・カーネルを直接ブートすることも可能である[15]。corebootはGNU GRUB2にも対応している。
デフォルトでは、corebootは、他のBIOSがハードウェアアクセスに利用するBIOS割り込みルーチンサービスを提供しない。ペイロードとなるSeaBIOSはBIOS呼び出しを提供しているが故に、たとえそのようなBIOSサービスを要求するOSがあったとしてもcorebootはロードできる。しかしながら、近代的なオペレーティングシステムはBIOSコールとは別の方法でハードウェアにアクセスし、起動段階の初期ならびにフォールバック機構としてしかBIOSコールを使用しないはずである。
corebootの開発とデバッグ
編集corebootは何もない状態から、ハードウェアを初期化しなければならない為、サポートするチップセットやマザーボードへの移植が必要となる。RAMの初期化前の段階で、corebootは、シリアルポートを(キャッシュとレジスタのアドレッシングのみ)初期化する。こうすることで、接続する端末にデバッグテキストを送出することができる[注釈 4]。また同様にPOSTカード(POSTで報告されるエラーコードを診断できるICチップ)を接続し、2桁の16進数診断用コードを出力させるためのポート0x80にバイトコードを送信可能である。別の移植への助力は、IOSS社が販売する商用製品"RD1 BIOS Savior"(日本語名: "RD1 ROM焼き だいじょうぶ!")[16]へ向けられている。この製品は、二つのブートメモリデバイスを組み合わせたもので、ブートメモリソケットに接続し手動で2つのデバイスを切り替えられる。コンピュータは一方のデバイスから起動し、2番目のメモリデバイスに切り替えることで、イメージをリプログラム即ち焼き込む事が可能となっている。より高価な代替品は外部に取り付けるEPROMやフラッシュメモリプログラマブルデバイスである。またCPUの代わりとして、もしくはJTAGポート経由で接続するCPUエミュレータの利用も考慮されている。JTAGポートを利用したcorebootを組み込んだ製品の例として、Sage SmartProbeというものがある[17]。BIOSデバイスに焼き込む代わりに、BIOSエミュレータ上でコードをビルド、またはダウンロードできる。
ペイロード
編集corebootは以下の各種ペイロードも読み込み可能である。ペイロードはlibpayloadヘルパーライブラリを利用して作成することが出来るがそれは必須ではない。
- SeaBIOSはx86 BIOSの一実装である。データサイズは小さく、GCCを利用し、ほとんどが16ビットC言語で書かれている。
- FILO[18]はGRUBに似たブートローダであり、USBブートをサポートしている。
- Etherbootはネットワーク越しにオペレーティングシステムを起動可能なペイロードである。
- gPXEそして現在の名前iPXEはSeaBIOSのもとで稼働するEtherbootの後継ソフトウェアである。
- TianoCore[19]はUEFIのオープンソース実装である。TianoCoreはハードウェア初期化機構を持たず、実際の初期化はcorebootの仕事となる。両者を組み合わせることでUEFIの完全なサポートが可能となる。
- Chromium OSにおいてGoogleが採用したブートローダDas U-Bootはその派生物がcorebootのペイロードとして利用可能である[20]。
DRAMの初期化
編集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[21]モードで初期化されなければならない。しかし、これはDRAMの初期化と比べ命令数が少なくて済む。またCache-as-RAMモードはCPUアーキテクチャ依存ではあるが、チップセットやマザーボード単位で変化するDRAMの初期化に比べれば幾分汎用的ではある。
脚注
編集注釈
編集出典
編集- ^ “Announcing coreboot 4.1”. blogs.coreboot.org (2015年7月14日). 2015年7月30日閲覧。
- ^ ron minnich (2008年1月12日). “[LinuxBIOS] Welcome to coreboot”. coreboot.org. 2011年2月14日閲覧。
- ^ Peter Brown (2010年2月17日). “Campaign for Free BIOS”. FSF. 2011年2月15日閲覧。
- ^ “Who is working on coreboot?”. coreboot.org (2010年5月29日). 2011年2月15日閲覧。
- ^ Anton Borisov (2009年1月6日). “The Open Source BIOS is Ten”. The H Open Source. 2011年2月15日閲覧。coreboot開発者へのインタビュー。
- ^ “coresystems GmbH i.L.”. coresystems.de. 2011年2月15日閲覧。
- ^ Stefan Reinauer (2006年11月13日). “Google Sponsors the LinuxBIOS project”. The official Google Code blog. 2011年2月15日閲覧。
- ^ Ivy Schmerken (2009年5月12日). “CME Group Dives Into Coreboot and Other Linux Open Source Projects”. Wall Street & Technology. 2011年2月15日閲覧。同社が運用するx86 Linuxサーバのダウンタイムの軽減のため、高速な起動を実現するBIOSとして目をつけた。
- ^ “GSoC2011(Week 1): Analysis of U-boot ARM boot code”. coreboot developer blogs. blogs.coreboot.org. 2011年10月10日閲覧。
- ^ “SeaBIOS”. seabios.org (2009年12月13日). 2011年2月15日閲覧。
- ^ “SeaBIOS - coreboot”. coreboot.org (2011年1月15日). 2011年2月15日閲覧。
- ^ “ADLO - coreboot”. coreboot.org (2009年1月21日). 2011年2月15日閲覧。
- ^ “SEBOS, Security Enhanced Bootloader for Operating Systems, Phase 2”. www.missl.cs.umd.edu. 2007年6月19日時点のオリジナルよりアーカイブ。2011年2月15日閲覧。Bochsに付属のBIOS経由でPC BIOSサービスをcorebootに追加したとの発表。
- ^ “coreboot v3 early startup code”. lxr.linux.no. 2011年2月15日閲覧。
- ^ “Integrating 9load into the LinuxBIOS”. plan9.bell-labs.com. 2011年7月10日閲覧。
- ^ “RD1 BIOS Savior”. ioss.com.tw. 2011年2月15日閲覧。
- ^ “Sage Electronic Engineering”. www.se-eng.com. 2011年3月24日閲覧。
- ^ “FILO - coreboot”. www.coreboot.org. 2011年7月10日閲覧。
- ^ “TianoCore - coreboot”. www.coreboot.org. 2011年7月10日閲覧。
- ^ “Modify u-boot code to allow building coreboot payload. [chromiumos/third_party/u-boot-next : chromeos-v2011.03]”. groups.google.com (2011年7月24日). 2011年7月25日閲覧。
- ^ “A Framework for Using Processor Cache as RAM (CAR)” (PDF). coreboot.org (2006年10月10日). 2011年2月15日閲覧。
関連項目
編集関連文書
編集- "Open BIOSes for Linux" Peter Seebachによる。
- "Linux のためのオープン BIOS" 上記の翻訳記事。IBM dW.
- "LinuxBIOS ready to go mainstream" Bruce Byfieldによる。
- "表舞台に立つ準備を整えたLinuxBIOS" 上記の翻訳記事。OSDN Magazine提供。
- "First desktop motherboard supported by LinuxBIOS: GIGABYTE M57SLI-S4" ブランドン・ホワード(Brandon Howard)による。
- Trying Coreboot under QEMU/KVM emulator