Posted at

QEMU上でBitVisorの準パススルードライバーを動かす

以下の記事でQEMU上でBitVisorが動くことがわかります。

https://qiita.com/hdk_2/items/dab49edf80975f4cc7d0

この時は準パススルードライバーを何も入れていなかったのですが、入れるとどうなるか試してみましょう。今回はLinux KVMを有効にしたQEMUを使用し、UEFI(OVMF)を指定しています。


Intel GbE NIC

設定:


defconfig

(省略)

.tty_mac_address = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
},
.tty_syslog = {
.enable = 1,
.src_ipaddr = { 192, 168, 0, 64 },
.dst_ipaddr = { 192, 168, 0, 27 },
},
.driver = {
.pci = "driver=pro1000, tty=1",
},
(省略)

とりあえず、Intel GbE NIC用のドライバーを指定して、syslogログ出力を有効にしてみます。IPアドレスはUDPのsyslogを受け付けるコンピューターのIPアドレスに変えてください。ログ出力の設定に関しては以下の記事をご覧ください。

https://qiita.com/hdk_2/items/2431710fcf257904fc8a

QEMUは適当に以下のようにして起動します。デフォルトでIntel GbE NICがNAT接続になっているので、ネットワーク関連のオプションはすべて省略しています。

$ mkdir _

$ ln -s ../bitvisor.elf ../boot/uefi-loader/loadvmm.efi _
$ qemu-system-x86_64 -bios OVMF.fd -cpu host -enable-kvm -m 2048 -snapshot -hda fat:_

EFI Shellが起動したらloadvmmと打ち込んでBitVisorを起動します。

Shell> loadvmm

a.png

起動しました。それではsyslogの内容を確認してみましょう。

# tail -2 /var/log/messages

Dec 1 10:48:03 192.168.0.27 bitvisor: PCI: 6 devices found
Dec 1 10:48:03 192.168.0.27 bitvisor: Starting a virtual machine.

ちゃんとログが出ています。実機ではリンクアップに時間が掛かって最初のログが失われると思いますが、QEMU上ではそんなことはないので最初からきちんと残ります。


ATA

設定:


defconfig

(省略)

.keys_conf[0] = {
.guid = STORAGE_GUID_NULL,
.type = STORAGE_TYPE_ATA,
.host_id = -1,
.device_id = -1,
.lba_low = 0ULL,
.lba_high = ~0ULL,
.crypto_name = "aes-xts",
.keyindex = 0,
.keybits = 256,
},
(省略)
.driver = {
.pci = "driver=pro1000, tty=1, and, driver=ata",
},
(省略)

とりあえず、ATAのドライバーを指定して、ディスク全体の暗号化を指定します。起動方法は同じですが、起動前にまずディスクの内容を確認しておきましょう。

Shell> dblk fs0 -b

a.png

FATのヘッダーが見えると思います。次にBitVisorを起動してから、同様のコマンドを叩きます。

Shell> loadvmm

(省略)
Shell> dblk fs0 -b

a.png

FATのヘッダーだったところがぐちゃぐちゃに化けました。これは、暗号化されていないデータを、暗号化されているものとみなして復号したために、データが化けた様子を表しています。


USB, AHCI, その他

皆さんでお試しください。