3. 起動
実機での起動(USB ドライブ+EFI シェル)
実機での最も簡単な方法は、USB ドライブに EFI シェルを用意して BitVisor を起動することです。
USB ドライブの準備
USB ドライブを FAT32 でフォーマットし、以下のフォルダ構成を作ります:
USB ドライブ/
├── EFI/
│ └── boot/
│ └── bootx64.efi ← EFI シェルを bootx64.efi にリネームして配置
└── bitvisor/
├── loadvmm.efi ← UEFI ローダー
└── bitvisor.elf ← ハイパーバイザ本体
EFI シェルは Arch Linux Wiki などからビルド済みバイナリを入手できます(x86_64 用を選択してください)。
UEFI ファームウェアが外部ドライブから起動する際、デフォルトで EFI\boot\bootx64.efi を探します。
シェルの EFI ファイルを bootx64.efi にリネームして配置してください。
EFI シェルからの起動
USB ドライブから起動すると EFI シェルが表示されます。
画面に fs0, fs1 などのファイルシステム情報が表示されます
(内蔵ドライブが先に表示され、外部ドライブがその後に続くのが一般的です)。
ファイルシステムを切り替えてから BitVisor を起動します:
Shell> fs1: ← USB ドライブに対応する番号に変更
fs1:\> cd bitvisor
fs1:\bitvisor\> loadvmm.efi
BitVisor が起動すると次のようなログが表示されます:
Copyright (c) 2007, 2008 University of Tsukuba
All rights reserved.
ACPI DMAR not found.
...
Starting a virtual machine.
syslog の設定が正しければ、受信側の /var/log/bitvisor.log にも以下のようなログが記録されます:
Feb 3 17:30:45 host bitvisor: Starting a virtual machine.
Feb 3 17:30:45 host bitvisor: IP address changed: 0.0.0.0 -> 192.168.0.7
Feb 3 17:30:45 host bitvisor: telnet server "dbgsh" ready
BitVisor の起動後、exit で EFI シェルを終了すれば通常の OS ブートが続きます。
または手動で OS の EFI ローダーを指定することもできます:
- Linux:
EFI\ディストリ名\grubx64.efi - Windows:
EFI\Microsoft\Boot\bootmgfw.efi
QEMU での起動(x86_64)
QEMU を使えばすぐに試すことができます。
bitvisor.elf と loadvmm.efi を同じフォルダ(例: ~/x86_test/)に置いてください。
qemu-system-x86_64 \
-cpu host -enable-kvm \
-bios /path/to/OVMF.fd \
-drive file=fat:rw:~/x86_test/,format=raw \
-cdrom /path/to/bootable.iso \
-nic user,model=e1000e \
-M q35 -m 4096
-biosには OVMF(UEFI ファームウェアイメージ)を指定します- NIC は
e1000e(Intel エミュレーション)なのでpro1000ドライバを有効にしてください - 起動時に
ESCキーを連打してセットアップメニューから EFI シェルを選択します (-boot menu=onを追加すると起動遅延が増え操作しやすくなります)
KVM 使用時の注意
近年の Intel CPU では、kvm_intel の enable_apicv=Y の状態で BitVisor を起動すると、
ゲスト OS でタイマーパニックや SMP 起動の問題が発生することがあります。
apicv を一時的に無効化するには:
sudo modprobe -r kvm-intel && sudo modprobe kvm-intel enable_apicv=N
また、defconfig で .localapic_intercept = 1 を設定することで QEMU + KVM 上の問題を回避できます。
QEMU での起動(AArch64 実験的)
AArch64 BitVisor は現在実験的な状態です。現時点では neoverse-n1 または a64fx CPU で起動できます。
qemu-system-aarch64 \
-m 8G \
-M virt,gic-version=3,virtualization=true \
-cpu neoverse-n1 \
-bios /path/to/aarch64/qemu_efi.fd \
-drive file=fat:rw:/path/to/bitvisor_dir/,format=raw \
-cdrom /path/to/aarch64/linux.iso \
-nic user,model=e1000e \
-serial vc:1024x768 \
-smp 4
-cpu maxは現在未対応のオプション機能を有効化するため使用できません。
起動後は x86_64 の場合と同様に EFI シェルから loadvmm.efi を実行します。
デバイスツリーを使う場合は -M に acpi=off を追加し、
Kconfig で CONFIG_DEVICETREE=y を有効にしてください。