2. BitVisor の設定とビルド
Kconfig とランタイム設定(defconfig)の記述、およびハイパーバイザ・UEFI ローダーのビルド
Kconfig によるコンパイル時設定
ソースディレクトリで以下を実行します:
make config
入門として推奨する設定項目:
- 64 # 64ビットモード
- CPU_MMU_SPT_1
- CPU_MMU_SPT_USE_PAE
- DBGSH # デバッグシェル
- ACPI_DSDT
- DISABLE_SLEEP # スリープ無効
- ENABLE_ASSERT
- NET_DRIVER # ネットワークドライバを有効化
- NET_PRO1000 # Intel NIC の場合
- NET_RE # Realtek NIC の場合
- NET_BNX # Broadcom NIC の場合
- NET_AQ # Aquantia NIC の場合
- NET_VIRTIO_NET # ゲストに virtio NIC として見せる(推奨)
- ACPI_TIME_SOURCE
- TCG_BIOS
- BACKTRACE
- IP # IP スタック
- THREAD_1CPU
- ACPI_IGNORE_ERROR
- DISABLE_VTD
- DMAR_PASS_THROUGH
コンパイル時の警告は外部コードや過去の研究コードに由来するものがあり、 現時点では無視して問題ありません。
ランタイム設定(defconfig)
defconfig.tmpl を defconfig にコピーし、必要なパラメータを編集します:
cp defconfig.tmpl defconfig
defconfig は C 構造体の初期化構文で記述します。
設定構造の定義は include/share/config.h を参照してください。
ネットワーク・syslog の設定例(最小構成)
struct config_data config = {
.vmm = {
.tty_mac_address = {
0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF /* syslog 受信側のMACアドレス */
},
.tty_syslog = {
.enable = 1,
.src_ipaddr = { 192, 168, 0, 7 }, /* BitVisor の送信元 IP */
.dst_ipaddr = { 192, 168, 0, 1 }, /* syslog 受信側の IP */
},
.driver = {
.pci = "driver=pro1000, net=ippass, tty=1, virtio=1",
},
},
.ip = {
.use_dhcp = 0,
.ipaddr = { 192, 168, 0, 7 },
.netmask = { 255, 255, 255, 0 },
.gateway = { 192, 168, 0, 1 },
},
};
net= オプションの説明
| 値 | 動作 |
|---|---|
net=pass |
BitVisor は IP スタックを使わず、トラフィックはゲストのみに渡る |
net=ip |
BitVisor が IP スタックを使う。トラフィックはゲストには渡らない |
net=ippass |
BitVisor と ゲスト両方がトラフィックを受け取る |
net=ippassfilter |
可能な限りトラフィックを分離する |
net=ippassfilter2 |
スプリアス割り込み対策付き(bnx, re, aq に推奨) |
pro1000 は MSI 割り込みを使うため net=ippass で動作します。
bnx, re, aq はピン割り込みを使うため ippassfilter2 を推奨します。
NIC ドライバの指定
| NIC | driver= の値 |
|---|---|
| Intel | pro1000 |
| Broadcom | bnx |
| Realtek | re |
| Aquantia | aq |
ハイパーバイザ本体のビルド
make
成功すると bitvisor.elf が生成されます。
UEFI ローダーのビルド
cd boot/uefi-loader
make
成功すると boot/uefi-loader/loadvmm.efi が生成されます。
AArch64 向けのクロスコンパイル(実験的)
x86_64 ホスト上で AArch64 向けにクロスコンパイルする場合:
# ハイパーバイザ本体
CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=aarch64 make
# UEFI ローダー
cd boot/uefi-loader
CROSS_COMPILE=aarch64-none-linux-gnu- ARCH=aarch64 make
CROSS_COMPILE プレフィックスはシステムにインストールされているツールチェインに合わせて変更してください。
生成されたファイルのアーキテクチャを確認:
file bitvisor.elf
# → ELF 64-bit LSB executable, ARM aarch64, ...
file boot/uefi-loader/loadvmm.efi
# → PE32+ executable (DLL) (EFI application) Aarch64, ...