coreboot(旧称LinuxBIOS)[ 5 ]は、ハードウェアを初期化し、オペレーティングシステムをロードするための軽量ファームウェアを提供する無料のオープンソースプロジェクトです。これは、最新の32ビットまたは64ビットオペレーティングシステムを起動するために必要な最小限のタスクを実行することで、独自のファームウェア(従来のBIOSまたはUEFI実装)を置き換えるように設計されています。
corebootは低レベルのハードウェア初期化を実行するため、サポートされている各チップセットとマザーボードモデルに移植する必要があります。したがって、利用できるプラットフォームは、サポートが実装されているプラットフォームに限定されます。
corebootのよく知られた派生版の一つにLibrebootがある。これはファームウェアスタックから独自のバイナリブロブを削除することに特化したソフトウェアディストリビューションである。
coreboot プロジェクトは、高速に起動し、エラーをインテリジェントに処理する BIOS を作成することを目標として始まりました。[ 6 ]これは、 GNU General Public Licenseバージョン 2 (GPLv2)の条件に基づいて配布されています。主な貢献者には、 LANL、SiS、AMD、Coresystems、Linux Networx, Inc のほか、標準 BIOS とともに coreboot を提供したり、一部のマザーボードのハードウェア インターフェイスの仕様を提供したりするマザーボード ベンダーのMSI、Gigabyte、Tyanが含まれます。Googleはcoreboot プロジェクトを部分的にスポンサーしています。[ 7 ]金融上場企業であるCME Group は、2009 年に coreboot プロジェクトのサポートを開始しました。[ 8 ]
最初の 3 つのモデルを除き、すべてのChromebook はcoreboot を実行します。[ 9 ] Das U-Boot のコードが統合され、 ARM 命令セットに基づくプロセッサのサポートが可能になりました。[ 10 ]
2019年6月、corebootはNSAのソフトウェアGhidraを、フリーかつオープンソースのソフトウェアとしてリリースされたことを受けて、ファームウェア固有の問題に対するリバースエンジニアリング作業に使用し始めた。[ 11 ]
coreboot は、 IA-32、x86-64、ARM、ARM64、MIPS、RISC-Vなど、複数の CPU アーキテクチャをサポートしています。また、さまざまなシステム オン チップ(SoC) プラットフォームもサポートしています。初期の開発は、AMD Geodeプロセッサ (特にOLPCプロジェクトで使用されているもの) に重点を置いていました。Artec Group は、 ThinCanモデル DBE61に Geode LX サポートを追加しました。このコードは AMD に採用され、OLPC が Geode LX プラットフォームにアップグレードされた後にさらに改良され、coreboot コミュニティによって他の Geode バリアントをサポートするようにさらに開発されています。coreboot はFlashromを使用して Geode プラットフォームにフラッシュできます。
AMD Geodeベースのプラットフォームでの初期開発以来、corebootのサポートは多くのAMDプロセッサとチップセットに拡張されてきました。プロセッサには、ファミリー0Fhと10h(K8コア)、そして最近ではファミリー14h(Bobcatコア、Fusion APU )が含まれます。corebootのサポートは、AMDチップセットのRS690、RS7xx、SB600、およびSB8xxにも拡張されています。
AMD Generic Encapsulated Software Architecture ( AGESA )は、 AMD64 マザーボード上のシステム デバイスを初期化するためのブートストラップ プロトコルであり、2011年初頭にオープンソース化されました[ 12 ]しかし、2014 年現在、このようなリリースは AMD による将来の開発の基礎となることはなく、その後中止されました。[ 13 ]
corebootまたはその派生版がプリロードされている可能性のあるデバイスには、以下のようなものがあります。
Coreboot は通常Linux カーネルをロードしますが、ネットワーク経由でLinux カーネルを起動できるiPXE、gPXE 、Etherbootなどの他のスタンドアロンELF実行可能ファイル、または Linux カーネル、 Windows 2000以降、および BSDをロードできるSeaBIOS [ 23 ]をロードすることもできます。Windows 2000/ XPおよびOpenBSD のサポートは、以前は ADLO によって提供されていました。[ 24 ] [ 25 ] coreboot は、 Myrinet、Quadrics、または SCIクラスタ相互接続などのサポートされているデバイスからカーネルをロードすることもできます。Plan 9カーネルなどの他のカーネルを直接起動することも可能です。カーネルを直接ロードする代わりに、coreboot は、coreboot 対応バージョンのGNU GRUB 2などの専用のブートローダーに制御を渡すことができます。
Corebootは主にC言語で実装されており、アセンブリ言語のコードも少量使用されています。C言語を主要なプログラミング言語として選択することで、一般的にアセンブリ言語で記述されていた従来のPC BIOSと比較してコード監査が容易になり、セキュリティが向上します[ 26 ] 。セキュリティをさらに高めるために、Corebootの一部をAda言語で記述するためのビルドおよびランタイムサポートがありますが[ 27 ] 、現在、散発的にしか使用されていません。ソースコードはGNU GPLバージョン2ライセンスの下で公開されています。
Coreboot は最小限のハードウェア初期化を実行し、その後オペレーティングシステムに制御を渡します。そのため、オペレーティングシステムが制御を引き継いだ後は、coreboot のコードは実行されません。coreboot の特徴は、x86バージョンではわずか 10 個の命令を実行した後に32 ビットモードで動作することです[ 28 ] (他のほとんどすべての x86 BIOS は16 ビットモードでのみ動作します)。これは、最新の PC ハードウェアで使用されている最新のUEFIファームウェアに似ています。
corebootが初期化するハードウェアの中で最も難しいのは、DRAMコントローラとDRAMです。場合によっては、この件に関する技術文書はNDAによって制限されているか、入手できないことがあります。RAMの初期化は、初期化されるまで使用できないため、特に困難です。そのため、DRAMコントローラとDRAMを初期化する初期化コードでは、CPUの汎用レジスタまたはキャッシュをRAMとして一時的な記憶領域として使用する場合があります。
RAMの代わりにレジスタを使用するCコンパイラであるromccは、この作業を容易にします。romccを使用すると、 DRAM DIMMのSPD ROMへのSMBusアクセスを比較的簡単に行うことができ、RAMを使用できるようになります。
最新のx86プロセッサでは、DRAMが初期化されるまでプロセッサキャッシュをRAMとして使用できます。プロセッサキャッシュもCache-as-RAM [ 29 ] [ 30 ]モードで初期化する必要がありますが、これはDRAMの初期化よりも少ない命令数で済みます。また、Cache-as-RAMモードの初期化はCPUアーキテクチャに固有のものであるため、チップセットやマザーボードごとに固有のDRAMの初期化よりも汎用的です。
ほとんどの最新のx86プラットフォームでは、ベンダーが提供するクローズドソースのバイナリのみのコンポーネントがDRAMセットアップに使用されます。IntelシステムではFSP-Mが必要ですが、AMDは現在サポートしていません。バイナリAGESAは現在、AMDシステムの独自のUEFIファームウェアに使用されており、このモデルは将来のAMD関連のcorebootサポートにも引き継がれると予想されます。[ 31 ]

開発者は、coreboot の作業中にさまざまなハードウェアおよびソフトウェアのデバッグツールを使用します。これには、インサーキットエミュレータ、JTAGプローブ (たとえば Sage SmartProbe)、および BIOS/ファームウェアエミュレータが含まれます。コードは、BIOS デバイスに直接フラッシュするのではなく、エミュレータでテストしたり、ターゲット ハードウェアにダウンロードしたりできます。[ 32 ] [ 33 ]はその一例です。BIOS デバイスにフラッシュする代わりに、BIOS エミュレータ上でコードをビルドしたり、BIOS エミュレータにダウンロードしたりできます。
corebootはハードウェア初期化後にペイロードをロードします。ペイロードはlibpayloadヘルパーライブラリを使用して作成することも、独立したプロジェクトとして作成することもできます。注目すべきペイロードには、以下のようなものがあります。
対面形式での会議としては、2017年10月に開催され、3日間続いた欧州コアブート会議が挙げられる。
corebootには、元のコードベースから派生したいくつかのバリアントがあり、それぞれ目的が少しずつ異なります。
{{cite web}}: CS1 maint: bot: 元の URL の状態が不明です (リンク){{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)