Coreboot

coreboot
作者 Ronald G. Minnich, Eric Biederman, Olli Lo, Stefan Reinauer, corebootコミュニティ
初版 1999年
最新版
4.13 / 2020年11月20日 (3年前) (2020-11-20)
リポジトリ
  • review.coreboot.org/cgit/coreboot.git
ウィキデータを編集
プラットフォーム x86, x86-64, ARM[1]
種別 ファームウェア
ライセンス GNU General Public License
公式サイト coreboot.org
テンプレートを表示

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

歴史

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プロセッサやチップセット上に拡張された。サポートされたプロセッサは、

  • ファミリー 0Fh, 10h(Athlon 64などのK8コア)
  • ファミリー 14h(Bobcatコア、FusionAPU(英語版)

などが含まれる。またcorebootはAMDのチップセット

  • RS690
  • RS7xx(英語版)
  • SB600(英語版)
  • SB8xx(英語版)

にもサポートを拡大している。このことから、同様に新規のプロセッサやチップセットが市場に投入されても、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エミュレータ上でコードをビルド、またはダウンロードできる。

ペイロード

Das U-boot

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の初期化

LinuxBIOS搭載機器の出荷予測(2006年)

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の初期化に比べれば幾分汎用的ではある。

脚注

[脚注の使い方]

注釈

  1. ^ 現在はSGIの一部門である。
  2. ^ Preboot Execution Environmentを参照。
  3. ^ 以前はLegacyBIOSという名前であった。レガシーBIOSをオープンソースとして実装するプロジェクト。
  4. ^ 同様の手法でGNU GRUBもシリアルポート経由のデバッグが可能となっている。

出典

  1. ^ “Announcing coreboot 4.1”. blogs.coreboot.org (2015年7月14日). 2015年7月30日閲覧。
  2. ^ ron minnich (2008年1月12日). “[LinuxBIOS] Welcome to coreboot”. coreboot.org. 2011年2月14日閲覧。
  3. ^ Peter Brown (2010年2月17日). “Campaign for Free BIOS”. FSF. 2011年2月15日閲覧。
  4. ^ “Who is working on coreboot?”. coreboot.org (2010年5月29日). 2011年2月15日閲覧。
  5. ^ Anton Borisov (2009年1月6日). “The Open Source BIOS is Ten”. The H(英語版) Open Source. 2011年2月15日閲覧。coreboot開発者へのインタビュー。
  6. ^ “coresystems GmbH i.L.”. coresystems.de. 2011年2月15日閲覧。
  7. ^ Stefan Reinauer (2006年11月13日). “Google Sponsors the LinuxBIOS project”. The official Google Code blog. 2011年2月15日閲覧。
  8. ^ 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として目をつけた。
  9. ^ “GSoC2011(Week 1): Analysis of U-boot ARM boot code”. coreboot developer blogs. blogs.coreboot.org. 2011年10月10日閲覧。
  10. ^ “SeaBIOS”. seabios.org (2009年12月13日). 2011年2月15日閲覧。
  11. ^ “SeaBIOS - coreboot”. coreboot.org (2011年1月15日). 2011年2月15日閲覧。
  12. ^ “ADLO - coreboot”. coreboot.org (2009年1月21日). 2011年2月15日閲覧。
  13. ^ “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に追加したとの発表。
  14. ^ “coreboot v3 early startup code”. lxr.linux.no. 2011年2月15日閲覧。
  15. ^ “Integrating 9load into the LinuxBIOS”. plan9.bell-labs.com. 2011年7月10日閲覧。
  16. ^ “RD1 BIOS Savior”. ioss.com.tw. 2011年2月15日閲覧。
  17. ^ “Sage Electronic Engineering”. www.se-eng.com. 2011年3月24日閲覧。
  18. ^ “FILO - coreboot”. www.coreboot.org. 2011年7月10日閲覧。
  19. ^ “TianoCore - coreboot”. www.coreboot.org. 2011年7月10日閲覧。
  20. ^ “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日閲覧。
  21. ^ “A Framework for Using Processor Cache as RAM (CAR)” (PDF). coreboot.org (2006年10月10日). 2011年2月15日閲覧。

関連項目

ポータル FLOSS
ポータル FLOSS
  • OpenBIOS(英語版)
  • Open Firmware
  • ThinCan(英語版)
  • Splashtop(en)
  • Latitude ON(英語版)
  • Rapid Boot(英語版)
  • LOBOS(英語版)

関連文書

  • "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

外部リンク

  • 公式ウェブサイト
  • FOSDEM 2007にて開発者のロン・ミニック(Ron Minnich)がLinuxBIOSについて語るビデオ。(Oggビデオ)
  • Coreboot with X Server Inside - YouTube
  • OLPC booting with coreboot - YouTube
  • 表示
  • 編集