フリーのエミュレータQEMUを使おう

 
  YAMAMORI Takenori ●yamamori

●QEMUの入手とインストール

そこそこ高速なフリーのエミュレータであるQEMUは, http://fabrice.bellard.free.fr/qemu/ より,ソースファイルまたはバイナリがtarボールの形でダウンロードできます. しかし,より最新版の機能を使いたい場合は,CVSでのソースの取得が 必要になるため,CVSでのソースの取得方法も覚えておいてください. 実際,qemu-0.7.0のリリース前に後述のQEMUアクセラレータ(kqemu)を使うには, CVSでのソースファイルの取得が必須でした.

○CVSでのソースファイルの取得

CVSでのQEMUのソースファイルの取得方法は, 前述のQEMUサイトのリンクからたどれる, http://savannah.nongnu.org/cvs/?group=qemu に詳しく書かれています.これは「anonymous CVS over SSH」となっており, 下のように環境変数CVS_RSHにsshをセットした状態で, 所定のCVSルートからco(checkout)を行ない,ソースファイル一式を取得します.

* CVSによるQEMUソースファイルの取得(初回)
----
$ CVS_RSH=ssh cvs -z3 -d:ext:anoncvs@savannah.nongnu.org:/cvsroot/qemu co qemu
----

すでにCVSで取得したソースファイル一式がある場合は, そのソースツリーのトップディレクトリで,下のようにupdateを行なえば, 最新のソースファイルの状態に更新できます.

* CVSによるqemuソースファイルの更新(2回目以降)
---
$ CVS_RSH=ssh cvs -z3 update
---
○QEMU(単体)のインストール

QEMUのインストールは,一般のフリーソフトウェアの場合と同様に, ソースファイルを展開したディレクトリで次のように実行すれば完了です.

$ ./configure
$ make
$ su
# make install

ただし,QEMU単体ではなく,アクセラレータkqemuを使う場合には, configureの実行前に次項の手順が必要です.


●アクセラレータkqemuを使う

kqemuは,モジュールとしてカーネルにロードし,QEMUの実行速度を高速化する アクセラレータです.kqemuは同じくQEMUサイトよりダウンロードできます. QEMUのWebサイトの記述によると,kqemuを使わないQEMU単体では, 仮想PCの実行時間が実PCの2〜5倍(速度は1/2〜1/5)になるのに対し, kqemuを使えば,仮想PCの実行時間は実PCの1〜2倍(速度は1〜1/2) 程度になるとされており,かなりの高速化が期待できそうです.

kqemuはQEMU本体とは異なり,現在はLinux(x86版)のバイナリのみが 公開されています(※注).kqemuの本稿執筆時点での最新版は kqemu-0.6.2-1.tar.gzで,これをqemu-0.7.0と合わせて使用します.

※注
kqemuに代わるオープンソースのカーネルモジュールとして, qvm86(http://savannah.nongnu.org/projects/qvm86/)が存在します.
○kqemuの展開

kqemuのtarボールは,QEMU本体のソースツリーのトップディレクトリで展開します. この状態でQEMU本体のconfigureスクリプトを実行すると,kqemuのサブディレクトリが 自動的に認識され,kqemu対応のQEMUがmake可能になります. kqemuのサブディレクトリには,kqemu-mod-i386.oというバイナリファイルが 含まれており,makeするとほかのソースとリンクされて,カーネルにロード可能な kqemu.o(またはkqemu.ko)というモジュールになります.

○カーネルソースツリーの修正

kqemuを使うために,カーネルを再構築する必要はありません. しかし,kqemuのmakeの際にカーネルのソースツリーが参照されるため, 実行中のカーネルと同じバージョンのカーネルソースが/usr/src以下に インストールされている必要があります.さらに,Red Hat Linux 9などでは, 次のようにMakefileの修正と.configファイルの配置を行なう必要があります.

・Makefileの修正

/usr/src/linux-<カーネルバージョン>/Makefileの先頭付近にある, EXTRAVERSIONの行から,次のようにcustomの文字列を取り除いてください.

EXTRAVERSION = -31.9custom
    ↓
EXTRAVERSION = -31.9

Red Hat Linux 9などでは,ユーザ作成のカーネルのバージョン名に customの文字列が含まれるように,カーネルソースのMakefileに記述されていますが, 今回のようにkqemuモジュールのみを追加で作成する場合,customの文字列があると, モジュールのシンボル名が動作中のカーネルと合致せず,モジュールがロード できなくなるため,この修正が必要になります.

・.configファイルの配置

/usr/src/linux-<カーネルバージョン>ディレクトリの下に .configファイルがない場合は,/bootディレクトリまたは カーネルソース中のconfigsディレクトリの下にあるconfigファイルのうち, 現在動作中のカーネルのものを.configとしてコピーしてください.

○QEMUとkqemuのインストール

以上で準備が整いましたので,前述のQEMU単体のインストールと同様に, QEMUソースツリーのトップディレクトリで「./configure; make」などを行なえば インストールできます.make install時には,kqemu/install.shが呼び出され, kqemuのインストールも行なわれます.

・インストールされるもの

QEMUをmake installすると, /usr/local/binにqemuやqemu-i386などのバイナリファイル(下表)が, /usr/local/share/qemuに仮想PC用のBIOSとキーボードマップファイルが, /usr/local/share/manにマニュアルが, /usr/local/share/doc/qemuにHTMLドキュメントがインストールされます.

さらに,kqemuについては,モジュールが /lib/modules/<カーネルバージョン>/miscにインストールされ, /dev/kqemuというデバイスファイルが作成されます.

表 /usr/local/binにインストールされるバイナリファイル
-------------------+-------------------------------------------------------
ファイル名         | 説明
-------------------+-------------------------------------------------------
qemu               | x86用,システムエミュレータ
qemu-system-x86_64 | x86(64bit)用,システムエミュレータ
qemu-system-ppc    | PPC用,システムエミュレータ
qemu-system-sparc  | SPARC用,システムエミュレータ
qemu-img           | QEMUディスクイメージ作成・変換コマンド
qemu-i386          | i386用,ユーザモードエミュレーションコマンド
qemu-ppc           | PPC用,ユーザモードエミュレーションコマンド
qemu-sparc         | SPARC用,ユーザモードエミュレーションコマンド
qemu-arm           | ARM用,ユーザモードエミュレーションコマンド
qemu-armeb         | ARM(big endian)用,ユーザモードエミュレーションコマンド
-------------------+-------------------------------------------------------
※注
ユーザモードエミュレーションは,仮想PC方式ではなく,コマンドレベルでの バイナリエミュレーションを行なうものです.
○kqemuモジュールのロード

kqemuを使うためには,あらかじめ次のように実行してkqemuモジュールを ロードする必要があります.常にkqemuを使う場合は/etc/rc.localなどに 記述しておくと良いでしょう.

# modprobe kqemu

なお,udevを使用しているディストリビューション(Fedoraなど)では, 次のようにデバイスファイルの再作成も必要になります.

# mknod /dev/kqemu c 250 0
# chmod 666 /dev/kqemu

To『フリーのエミュレータQEMUを使おう』[index]


このページは、技術評論社 Software Design 2005年7月号、『QEMU使いこなしテクニック(Linux編)』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 [Home]
yamamori