フリーのエミュレータQEMUを使おう |
||
YAMAMORI Takenori ●yamamori |
そこそこ高速なフリーのエミュレータであるQEMUは, http://fabrice.bellard.free.fr/qemu/ より,ソースファイルまたはバイナリがtarボールの形でダウンロードできます. しかし,より最新版の機能を使いたい場合は,CVSでのソースの取得が 必要になるため,CVSでのソースの取得方法も覚えておいてください. 実際,qemu-0.7.0のリリース前に後述のQEMUアクセラレータ(kqemu)を使うには, 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のインストールは,一般のフリーソフトウェアの場合と同様に, ソースファイルを展開したディレクトリで次のように実行すれば完了です.
$ ./configure $ make $ su # make install
ただし,QEMU単体ではなく,アクセラレータkqemuを使う場合には, configureの実行前に次項の手順が必要です.
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の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ファイルの配置を行なう必要があります.
/usr/src/linux-<カーネルバージョン>/Makefileの先頭付近にある, EXTRAVERSIONの行から,次のようにcustomの文字列を取り除いてください.
EXTRAVERSION = -31.9custom ↓ EXTRAVERSION = -31.9
Red Hat Linux 9などでは,ユーザ作成のカーネルのバージョン名に customの文字列が含まれるように,カーネルソースのMakefileに記述されていますが, 今回のようにkqemuモジュールのみを追加で作成する場合,customの文字列があると, モジュールのシンボル名が動作中のカーネルと合致せず,モジュールがロード できなくなるため,この修正が必要になります.
/usr/src/linux-<カーネルバージョン>ディレクトリの下に .configファイルがない場合は,/bootディレクトリまたは カーネルソース中のconfigsディレクトリの下にあるconfigファイルのうち, 現在動作中のカーネルのものを.configとしてコピーしてください.
以上で準備が整いましたので,前述の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)用,ユーザモードエミュレーションコマンド -------------------+-------------------------------------------------------
kqemuを使うためには,あらかじめ次のように実行してkqemuモジュールを ロードする必要があります.常にkqemuを使う場合は/etc/rc.localなどに 記述しておくと良いでしょう.
# modprobe kqemu
なお,udevを使用しているディストリビューション(Fedoraなど)では, 次のようにデバイスファイルの再作成も必要になります.
# mknod /dev/kqemu c 250 0 # chmod 666 /dev/kqemu