以下の記事でBitVisorに組み込まれたSQLiteを有効にしてビルドして動かす方法が紹介されていました:
https://qiita.com/mmi/items/613bef0fdc6f41d3cb6b
ここではmemoryではなくてstorage_ioのほうを使ってみることにします。QEMUとLinux KVMを使って試します。
defconfig
ここではconfig.vmm.driver.pciを以下のように設定しておきます:
.pci = "driver=ata",
ビルド
これでbitvisor.elfの他、loadvmm.efiとdbgsh*.efiをビルドしておきます。
$ make
$ make -C boot/uefi-loader
$ make -C tools/dbgsh-uefi
準備
適当なディレクトリ(ここでは/tmp)にいくつかファイルを準備しておきます:
$ mkdir /tmp/hoge
$ cp bitvisor.elf boot/uefi-loader/loadvmm.efi tools/dbgsh-uefi/*.efi /tmp/hoge
$ dd if=/dev/zero of=/tmp/db count=8192
実行
$ qemu-system-x86_64 -enable-kvm -cpu host -m 1024 -bios OVMF.fd -net none -drive file=fat:/tmp/hoge,snapshot=on -drive file=/tmp/db,format=raw
これで、ATAのprimary masterに/tmp/hogeをFATパーティション化したものが見え、primary slaveにraw imageの/tmp/dbが見える形になります。
EFI Shellが起動したらまずloadvmmを実行します:
次にdbgsh-a(for AMD)またはdbgsh-i(for Intel)を実行し、sqliteexampleを実行してデータベースに何か書き込んでみます:
Device numberはprimary masterが0, primary slaveが1となりますので、1を指定しています。また、8192セクターのディスク全体を使用することにしたので、Start LBAを0, End LBAを8191としています。Storage sizeは正しく検出されていませんが、気にせず進めます。
そして簡単なSQLにより1から100までの数字が入った簡単なテーブルを作成します。
次に、一度QEMUを終了し、もう一度起動して、中身が残っているかを確認してみます:
大丈夫そうです。QEMUを終了して、disk imageを直接見てみると、以下のようにSQLiteのデータベースらしきものが入っていることがわかります: