LoginSignup
1
0

More than 5 years have passed since last update.

BitVisor tools/logの使い方

Last updated at Posted at 2017-12-03

もうみなさんご存知かも知れませんが、BitVisorのtools/logの使い方の紹介です。

tools/logとは

このディレクトリには、BitVisorのログをLinuxのログに出すためのカーネルモジュールのソースコードが入っています。

BitVisorのログを見る手っ取り早い方法としてはtools/dbgshがありますが、インタラクティブなインターフェイスでprintfデバッグのログを観察するには不便なところがあります。tools/logでは、Linuxカーネルのタイマー機能を用いて自動的にログをポーリングして出してくれて、しかもたいていのGNU/Linuxディストリビューションでは最初からカーネルログがファイルに書き込まれる設定になっているので、ファイルにも残って便利というわけです。

BitVisor側の設定

make configでLOG_TO_GUESTを有効にしましょう。

$ make config

本機能はdbgshとは異なり、特権レベル0からしか制御できないようになっていますので、一般ユーザーからどうこうできるようなものではありませんが、デフォルトではオフになっています。

カーネルモジュールのビルド

tools/logディレクトリでmakeコマンドを実行すると、現在動作中のカーネルソースあるいはヘッダーを用いてカーネルモジュールがビルドされます。

$ make -C tools/log

Debian GNU/Linuxをお使いであればlinux-headers-amd64などの必要なパッケージをインストールしておきましょう。別のカーネルソースを利用する場合は、そのディレクトリに移動して、make SUBDIRS=/path/to/tools/log modulesという風にしてビルドします。

カーネルモジュールのロード

BitVisor上でGNU/Linuxを起動したら、tools/logディレクトリでmake loadコマンドを実行すると、カーネルモジュールがロードされます。

# make -C tools/log load

余談ですが、GNU Make 4.0からはload directiveというものが追加されたため、以下のMakefileの記述はload directiveに:という引数を与えたと解釈されてしまい、エラーになります:

load :

これの対策のため現在は以下のようにスペースを除いた記述となっています:

load:

なお、GNU Makeのinfoを見ても:の前後にスペースを入れるのは普通のことであるようですし、他のmakeコマンドの実装ではload directiveなどというものは存在しないので、こんな回避策を入れなければならないのは奇妙な話ではあります。loadというファイルをターゲットにすることはありそうですが、:なんてファイル名を使うことはまず考えられないので、GNU Make側でうまく解釈してくれよ、という感じがします。

ログの確認

カーネルモジュールをロードしたらログが出るようになっています。試しにdbgshで以下のように"free"宛にmsgsendintします:

$ ~/dbgsh
> sendint 
sendint> free
send 0 to free
sendint>
> exit

これはBitVisor内の空きメモリーの容量を出力するものです。以下のように出力されていることが確認できます:

$ dmesg|tail -1
[  438.934984] VMM: 2663 pages (10652 KiB) free
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0