tapdiskドライバを作ってみよう
作ってみましょう。これができるとゲストOSのIOをユーザ空間の比較的わかりやすいコードで自由自在に操ることができるようになります。
tools/blktap2/README に基本的な手順は書いてありますが、かなり古くていろいろ食い違っているのでそれのメモです。ドキュメントと同じような流れで作っていきます。私はxen-4.1.2で試しましたがxen-unstable.hgもそんなに変わっていなさそうなのでなんとかなるかもしれません。
1.tap_disk構造体のインスタンスを前方宣言
tools/bktap2/drivers/tapdisk-disktype.cに前方宣言を追加します。
2.disktypeに未使用の番号を割り当て
tools/blktap2/drivers/tapdisk-disktype.hに番号の定義が並んでいるのでそこに追加します。このとき、DISK_TYPE_VINDEXは実装が削除されているにもかかわらずなぜか残骸だけ残っていてよくわからないので消しておきます。
3.disk_info_t構造体のインスタンスを作成
tools/blktap2/drivers/tapdisk-disktype.cに追加します。
4.tapdisk_disk_typesに作成した構造体を追加
同じくtools/blktap2/drivers/tapdisk-disktype.cにあるtapdisk_disk_typesという配列に作成したdisk_info_t構造体のアドレスを追加します。
5.tapdisk_disk_driversにtap_diskを追加
tap_disk構造体も配列に追加しておきます。
6.実装する
実装します。とりあえず動作確認するのであれば、tools/blktap2/drivers/block-aio.cをblock-mynewdisk.cとしてコピーし、識別子の名前を書き換えてあげるとよいでしょう。
7.Makefileに追加する
tools/blktap2/Makefileに1行追加してmake時に組み込まれるようにします。
8.インストール
9.動作確認
前回の記事を参考にしてください。