coreboot
この記事には独自研究が含まれているおそれがあります。 |
作者 | Ronald G. Minnich, Eric Biederman, Olli Lo, Stefan Reinauer, corebootコミュニティ |
---|---|
初版 | 1999年 |
最新版 |
24.08
/ 2024年9月2日 |
リポジトリ | http://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]を受けているフリーソフトウェアプロジェクトのひとつである。
歴史
[編集]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]である。Googleはcorebootプロジェクトの一部をスポンサードしている[7]。金融先物取引の企業集団であるCME Groupは2009年よりcorebootプロジェクトへの援助を開始している[8]。
また、ARMアーキテクチャのサポートを可能とするためDas U-Boot由来のコードが投入、統合されている[9]。
設計
[編集]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はロードできる。
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の初期化に比べれば幾分汎用的ではある。
サポートされているプラットフォーム
[編集]coreboot がサポートする CPU アーキテクチャには、IA-32、x86-64、ARM、ARM64、MIPS、RISC-Vなどがある。サポートされるシステム オン チップ(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による将来の開発の基礎となることはなく、その後中止された[22]。
脚注
[編集]注釈
[編集]出典
[編集]- ^ “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日閲覧。
- ^ Griffith, Bruce (Wed Nov 5 10:50:15 CET 2014). “[coreboot AMD's binary-only AGESA libraries]”. 2024年9月19日閲覧。
関連項目
[編集]関連文書
[編集]- "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