mBootは、mnuのABIを使ってmochiOSとmDriverを動かすx86_64向けType-1ハイパーバイザーです。UEFIから直接起動します。LinuxをホストOSとして起動する旧方式は、このリポジトリから削除しました。
Intel CPUではVMXとEPT、AMD CPUではSVMとNPTを使います。mBootが管理するのはCPU、RAM、IOMMU、PCIデバイス、割り込み、Domain間の共有ページです。ファイルシステム、ネットワーク、GUI、一般的なデバイスドライバは持ちません。
| 場所 | 内容 |
|---|---|
mboot/ |
ハイパーバイザー本体です |
config/ |
Domain、メモリ、Capability、PCI割り当てを記述します |
scripts/ |
Launch Manifestと起動イメージを作り、QEMUで検査します |
firmware/ |
QEMUテストで使うOVMFです。実機イメージには入りません |
mboot-protocolとmbootdはありません。どちらもLinuxホストからmochiOSのQEMUを操作するためのコードだったため、Type-1 mBootには不要です。
mBoot単体リポジトリの隣にmnuを置いた場合は、次のコマンドでoutput/mochiOS.isoを作れます。
make imagemnuが別の場所にある場合は明示します。
make image MNU_DIR=/path/to/mnu CONFIG=config/intel-hardware.tomlmochiOS.isoはISO9660ではありません。USBメモリへそのまま書き込めるraw GPTディスクイメージです。EFI System PartitionにはmBoot、Launch Manifest、設定で選んだDomainイメージが入ります。
mochiOSワークスペースからは、ルートでmake mbootを実行します。通常の出力先はout/mochiOS.isoです。
mDriverはmBootの外でビルドします。mBootは完成済みのkernelとinitramfsを受け取ります。
mDriverを含む設定でイメージを作る場合は、2つの成果物を渡します。
make image \
CONFIG=config/qemu-mdriver.toml \
MDRIVER_KERNEL=/path/to/vmlinux \
MDRIVER_INITRAMFS=/path/to/initramfs.cpio指定したファイルがない場合、mBootは代わりのLinuxを自動生成せず、その場でエラーにします。古いBuildrootの出力を黙って使うこともありません。
詳しい説明は、mochiOSリポジトリのmBootについて、mDriver、物理ストレージ、OVMFにまとめています。
ホスト上の単体テストは次のコマンドで実行します。
make testQEMUで起動まで確認する場合は、CPU仮想化を使える環境で実行します。
make image-test MNU_DIR=/path/to/mnu
make qemu-test MNU_DIR=/path/to/mnu
make device-io-test MNU_DIR=/path/to/mnuconfig/intel-hardware.tomlはIntel実機向け、config/qemu.tomlは通常のDomain起動試験向けです。config/qemu-device-io.tomlはPCI、DMA、IOMMU、MSI-Xの試験に使います。
mBootは画面とシリアルへ進行状況を出します。IntelではINTEL VMX、AMDではAMD SVMと表示します。mochiOS System Domainまで起動するとMOCHIOS OK、Hardware Domainの準備が終わるとHardware OKになります。
赤い画面にERRORが出た場合は、番号と直前のシリアルログを確認してください。VMCSの後ろに出る4桁の値は、Intel VMCSへ書き込めなかったフィールド番号です。