QEMU CPUエミュレータユーザードキュメント Table of Contents

QEMU CPUエミュレータユーザードキュメント
QEMU CPUエミュレータユーザードキュメント
Table of Contents
1. はじめに
1.1 特徴
2. Installation
2.1 Linux
2.2 Windows
2.3 Mac OS X
3. QEMU PCシステムエミュレータの起動
3.1 はじめに
3.2 クイックスタート
3.3 起動
3.4 キー操作
3.5 QEMUモニター
3.5.1 コマンド
3.5.2 整数の表現方法
3.6 ディスクイメージ
3.6.1 ディスクイメージ作成のクイックスタート
3.6.2 スナップショットモード
3.6.3 qemu-img の起動
3.6.4 Virtual FATディスクイメージ
3.7 ネットワークのエミュレーション
3.7.1 VLAN
3.7.2 TAPネットワークインターフェースの使い方
3.7.3 ユーザーモードでのネットワークの使い方
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
3.7.4 QEMUの間でのVLANの接続
3.8 Linuxの直接起動
3.9 USBのエミュレーション
3.9.1 仮想的なUSBデバイスの使い方
3.9.2 LinuxホストでのUSBデバイスの使い方
3.10 GDBの使い方
3.11 ターゲットOSに特有な情報
3.11.1 Linux
3.11.2 Windows
3.11.2.1 SVGAグラフィックモードのサポート
3.11.2.2 CPU使用率の低減
3.11.2.3 Windows 2000 disk fullという問題
3.11.2.4 Windows 2000のシャットダウン
3.11.2.5 UnixとWindowsの間のディレクトリの共有
3.11.2.6 Windows XP securityの問題
3.11.3 MS-DOS と FreeDOS
3.11.3.1 CPU使用率の低減
4. PCでないターゲットに対するQEMUシステムエミュレータ
4.1 QEMU PowerPCシステムエミュレータ
4.2 Sparc32システムエミュレータの起動
4.3 Sparc64システムエミュレータの起動
4.4 MIPSシステムエミュレータの起動
4.5 ARMシステムエミュレータの起動
5. QEMU Linux ユーザースペースエミュレータ
5.1 クイックスタート
5.2 Wineの起動
5.3 コマンドラインオプション
6. ソースコードからのコンパイル
6.1 Linux/Unix
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
6.1.1 コンパイル
6.1.2 テストされたツールのバージョン
6.2 Windows
6.3 Linux上のWindows用クロスコンパイル
6.4 Mac OS X
QEMU CPUエミュレータユーザードキュメント
1. はじめに
1.1 特徴
QEMUは、速い!プロセッサエミュレータです。ダイナミックトランスレーションを使って、良好なス
ピードでエミュレーションをします。 QEMUは2つの動作モードを持っています:
フルシステムエミュレーション。このモードでは、QEMUは(例えばPCでは)プロセッサや各種の周
辺装置を含めたすべてのシステムをエミュレートします。再起動することなく、異なったオペレー
ティングシステムを起動し、システムコードをデバッグすることができます。
ユーザーモードエミュレーション(Linuxホストのみ)。このモードでは、QEMUはあるCPUに対して
コンパイルされたLinuxのプログラムを別のCPUで起動できます。 WineというWindows APIエミュ
レータ (http://www.winehq.org)を起動する事に使うことができ、クロスコンパイルやクロスデ
バッグを容易にします。
QEMUを動かすために、ホストにカーネルドライバを必要としません。しかし、満足なパフォーマンスが
得られます。 システムエミュレーションでは、次のようなハードウエアに対するものがサポートされて
います。
PC (x86 or x86_64 processor)
ISA PC (old style PC without PCI bus)
PREP (PowerPC processor)
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
G3 BW PowerMac (PowerPC processor)
Mac99 PowerMac (PowerPC processor, 進行中)
Sun4m (32-bit Sparc processor)
Sun4u (64-bit Sparc processor, 進行中)
Malta board (32-bit MIPS processor)
ARM Integrator/CP (ARM1026E processor)
ユーザーモードでは、x86、PowerPC、ARM、SPARC32/64といったCPUがサポートされています。
2. Installation
もし、自分でQEMUをコンパイルする場合は、section 6. ソースコードからのコンパイルセクションを見
てください。
2.1 Linux
もし、あなたのディストリビューションにコンパイル済みのパッケージがあるなら、インストールする
だけです。そうでなければ、see section 6. ソースコードからのコンパイル.
2.2 Windows
実験的な実行ファイルのインストーラをこちらからダウンロードしてください。
http://www.freeoszoo.org/download.php.
2.3 Mac OS X
実験的な実行ファイルのインストーラをこちらからダウンロードしてください。
http://www.freeoszoo.org/download.php.
3. QEMU PCシステムエミュレータの起動
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
3.1 はじめに
QEMUシステムエミュレータは次のような周辺機器をシミュレートします。
i440FXホストのPCIブリッジとPIIX3 PCIからISAへのブリッジ
Cirrus CLGD 5446 PCI VGAカードもしくはBochs VESA extensionsを装備したダミーのVGAカード
(ハードウエアレベルで、すべての標準的でないモードを含みます)。
PS/2マウスとキーボード
2つのPCI IDEインターフェースと、ハードディスクと CD-ROM のサポート
フロッピーディスク
NE2000 PCIネットワークアダプタ
シリアルポート
Creative SoundBlaster 16 サウンドカード
ENSONIQ AudioPCI ES1370 サウンドカード
Adlib(OPL2) - Yamaha YM3812 互換チップ
PCI UHCI USB コントローラと仮想USBハブ
SMPは、255個までのCPUをサポートしています。 adlibは、QEMUが-enable-adlibオプションでコンパ
イルされているときだけ利用可能です。 QEMUは、BochsプロジェクトのPC BIOSと、Plex86/Bochs
LGPL VGA BIOSを使っています。 QEMUは、Tatsuyoshi SatohさんのYM3812エミュレーションを使って
います。
3.2 クイックスタート
Linuxイメージ(<TT>`linux.img'</TT>)をダウンロードして、展開します。そして、以下のようにタイプ
します:
qemu linux.img
Linuxが起動し、プロンプトが現れるはずです。
3.3 起動
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
使い方: qemu [options] [disk_image]
disk_image は IDEハードディスク0として使うraw ハードディスクイメージです。 一般的なオプション:
`-M machine'
エミュレーションするマシンを選択します。(リストを得るには、 -M ?)
`-fda file'
`-fdb file'
フロッピーディスク0/1イメージ (See section 3.6 ディスクイメージ) として file を使います。
ファイルネームとしてホストのフロッピーを `/dev/fd0' で使うことができます。
`-hda
`-hdb
`-hdc
`-hdd
file'
file'
file'
file'
ハードディスクイメージ0,1,2,3として file を使います。(See section 3.6 ディスクイメー
ジ).
`-cdrom file'
CD-ROMイメージとして file を使います。( `-hdc' と `-cdrom' を同時に使うことはできませ
ん。)ホストのCD-ROMは、 `/dev/cdrom' をファイルの名前として使えます。
`-boot [a|c|d]'
フロッピー (a, b), ハードディスク (c) CD-ROM (d) から起動します。ハードディスクがデフォルト
です。
`-snapshot'
ディスクイメージファイルのかわりに一時ファイルに保存します。この場合、使っているrawハー
ドディスクイメージには書き込まれません。しかし @keys{C-a s} を押すことで書き戻すことができ
ます。(See section 3.6 ディスクイメージ).
`-m megs'
仮想RAMサイズを megs メガバイトにします。デフォルトは128MBです。
`-smp n'
n 個のCPUのSMPシステムをシミュレートします。255までのCPUをサポートしてします。
`-nographic'
通常は、QEMUはVGAの出力としてSDLを使います。このオプションによってすべてのグラフィッ
クの出力を止めることができます。これで、QEMUは簡単なコマンドラインアプリケーションにな
ります。エミュレートされるシリアルポートはコンソールにリダイレクトされます。これによ
り、QEMUを使ってシリアルコンソール内でLinuxカーネルをデバッグすることができます。
`-k language'
キーボードレイアウトt language を使います。(たとえば、フランス語には、 fr 。) このオプショ
ンは、PCキーコードが簡単に得られないときに使われます。(たとえば、MacやX11サーバーで)。
PC/LinuxやPC/Windowsホストでは、必要ありません。 利用可能なレイアウトは:
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
ar
da
de
de-ch
en-gb
en-us
es
et
fi
fo
fr
fr-be
fr-ca
fr-ch
hr
hu
is
it
ja
lt
lv
mk
nl
nl-be
no
pl
pt
pt-br
ru
sl
sv
th
tr
デフォルトは、 en-usです。
`-audio-help'
オーディオサブシステムのヘルプを表示します。:ドラバーや、調整できるパラメータのリストを
示します。
`-soundhw card1,card2,... or -soundhw all'
オーディオをイネーブルにし、サウンドのハードウェアを選択します。すべてのサウンドのハード
ウェアを表示するには、?を使ってください。
qemu
qemu
qemu
qemu
-soundhw
-soundhw
-soundhw
-soundhw
sb16,adlib hda
es1370 hda
all hda
?
`-localtime'
リアルタイムクロックをローカルに設定します(デフォルトはUTCです)。このオプション
は、MS-DOSもしくはWindowsで正しい日時を設定するのに必要です。
`-full-screen'
フルスクリーンモードで起動します。
`-pidfile file'
QEMUのプロセスIDを file に書き込みます。QEMUをスクリプトから起動するのに便利です。
`-win2k-hack'
Disk full バグを回避するために、Windows 2000 をインストールするときに使ってくださ
い。Windows 2000 をインストールした後は、もはやこのオプションは必要ありません。(このオ
プションは、IDEの転送速度を遅くします。)
USBオプション:
`-usb'
USBドライバーを使用可能にします。(まもなくデフォルトになります。)
`-usbdevice devname'
USB デバイス devnameを付けます。情報は、モニターのコマンドusb_addを見てください。
ネットワークオプション:
`-net nic[,vlan=n][,macaddr=addr]'
新しいネットワークインターフェースカードを作成し、VLAN n (n = 0がデフォルトです。)に接
続します。NIC(ネットワークインターフェースカード)は、現在PCターゲットでは、NE200で
す。オプションで、MACアドレスが変更可能です。もし、 `-net' オプションが1つもなけれ
ば、NICが1つ作られます。
`-net user[,vlan=n]'
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
ユーザーモードのネットワークスタックが使われます。使用するのに管理者権限が必要ありませ
ん。-netオプションが1つも使われないとき、これがデフォルトになります。
`-net tap[,vlan=n][,fd=h][,ifname=name][,script=file]'
ホストのTAPインターフェースに接続します。名前はnameで、VLAN番号 n 、ネットワークスクリ
プトfile です。デフォルトのスクリプトは、`/etc/qemu-ifup' です。もし、nameが指定されないと
き、OSは、自動的に1つを作成します。オプション fd=h は、既にオープンされているTAPイン
ターフェースを指定するのに使います。
qemu linux.img -net nic -net tap
もっと複雑な例(2つのNIC、それぞれがTAPデバイスに接続)は、
qemu linux.img -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
-net nic,vlan=1 -net tap,vlan=1,ifname=tap1
`-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]'
TCPソケットによる接続を通して、VLAN n をもう1つのQEMU仮想マシンに接続します。 も
し、listen が指定されると、port番号で、QEMUは接続を待ち受けます。 hostはオプションで
す。connect は、listen を使用しているもう1つのQEMUに接続するのに使われます。 fd=h オプショ
ンは、すでにオープンされているTCPソケットを指定します。 例:
# 最初のQEMUを起動
qemu linux.img -net nic,macaddr=52:54:00:12:34:56 -net socket,listen=:1234
# VLAN 0 を最初のQEMUのVLAN 0に接続
qemu linux.img -net nic,macaddr=52:54:00:12:34:57 -net socket,connect=127.0.0.1:1234
`-net socket[,vlan=n][,fd=h][,mcast=maddr:port]'
UDPマルチキャストソケットを通じてVLAN n をもう1つのQEMUと分け合います。効率的に同じマ
ルチキャストアドレスmaddrとポートportで、すべてのQEMUが同じバスを共有します。 注意:
1. いくつかのQEMUが、異なったホスト上で同じバスを共有することができます。(ホストがマ
ルチキャストを適切に設定しているならば)
2. mcastサポートはUser Mode Linuxと互換性があります。(引数 `ethN=mcast') こちらを見て
ください。 http://user-mode-linux.sf.net.
3. `fd=h' をすでにオープンしているUDPマルチキャストソケットに使ってください。
例:
# QEMUを1つ起動します。
qemu linux.img -net nic,macaddr=52:54:00:12:34:56 -net socket,mcast=230.0.0.1:1234
# 同じ”バス”でもう1つQEMUを起動します。
qemu linux.img -net nic,macaddr=52:54:00:12:34:57 -net socket,mcast=230.0.0.1:1234
# 同じ”バス”でさらに1つQEMUを起動します。
qemu linux.img -net nic,macaddr=52:54:00:12:34:58 -net socket,mcast=230.0.0.1:1234
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
例(User Mode Linux互換):
# QEMUを起動します。(選んでいるmcastアドレスは、UMLのデフォルトのアドレスです。)
qemu linux.img -net nic,macaddr=52:54:00:12:34:56 -net socket,mcast=239.192.168.1:1102
# UMLを起動します。
/path/to/linux ubd0=/path/to/root_fs eth0=mcast
`-net none'
ネットワークデバイスを1つも使わないことを指定します。`-net' を使用しないときのデフォルト
を書き換えるのに使います。
`-tftp prefix'
ユーザーモードでのネットワークを使用しているとき、装備されているTFTPサーバを有効にしま
す。 名前が<VAR>prefix</VAR>で始まるすべてのファイルがホストからゲストへTFTPクライアン
トを用いてダウンロード可能です。ゲスト上のTFTPクライアントは、バイナリモードでなくてはな
りません。(UnixのTFTPクライアントでは<CODE>bin</CODE>コマンドを使います。) ゲスト上
でのホストのIPアドレスは、通常10.0.2.2です。
`-smb dir'
ユーザーモードでネットワークを使用しているとき、装備されているSMBサーバを有効にしま
す。Windows OSは `dir' を使ってホストのファイルにアクセスできます。 ゲストのWindows OSで
は、次の行:
10.0.2.4 smbserver
を、`C:\WINDOWS\LMHOSTS' というファイルに加えなければなりません。 (windows 9x/Meに対して)
もしくは、`C:\WINNT\SYSTEM32\DRIVERS\ETC\LMHOSTS' (Windows NT/2000)。 そして、`dir'
が、`\\smbserver\qemu' 内で、使えます。. SAMBAサーバがホストOSの `/usr/sbin/smbd'にインス
トールされていなければならないことにに注意してください。QEMUは、Red Hat 9のバージョン
2.2.7aとFedora Core 3のバージョン3.0.10-1.fc3のsmbdでのテストは成功しました。
`-redir [tcp|udp]:host-port:[guest-host]:guest-port'
ユーザーモードでネットワークを使用しているとき、入ってくるTCPもしくはUDPの接続をホスト
のポートhost-portからゲストのポートguest-portにリダイレクトします。もし、guest-hostが指定
されない場合は、その値は10.0.2.15(装備されたDHCPサーバのデフォルトのアドレス)になりま
す。 たとえば、ホストのX11コネクションをスクリーン1からゲストのスクリーン0へリダイレク
トするには、次のようにします。:
# on the host
qemu -redir tcp:6001::6000 [...]
# this host xterm should open in the guest X11 server
xterm -display :1
telnetのホストのポート5555からのコネクションをゲストのtelnetのポートにリダイレクトするに
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
は、次のようにします。:
# on the host
qemu -redir tcp:5555::23 [...]
telnet localhost 5555
これで、ホストで、telnet localhost 5555 を使うと、ゲストのtelnetサーバに接続することができ
ます。
Linuxの起動に関すること。このオプションを使うことで、ディスクイメージにインストールすることな
く、与えられたLinuxのカーネルを扱うことができます。いろいろなカーネルを容易にテストすることが
できます。
`-kernel bzImage'
bzImage をカーネルのイメージとして使います。
`-append cmdline'
cmdline をカーネルのコマンドラインとして使います。
`-initrd file'
file を初期化ラムディスクとして使います。
デバッグ/エクスパートオプション:
`-serial dev'
仮想シリアルポートをホストのデバイスdev にリダイレクトします。利用可能なデバイスは:
vc
仮想コンソール
pty
[Linux のみ] 擬似 TTY (新しい PTY は、自動的に割り当てられます)
null
空のデバイス
/dev/XXX
[Linuxのみ] ホストのttyを使います。つまり、 `/dev/ttyS0'を使います。ホストのシリアル
ポートのパラメータはエミュレートされるものに合わせてセットされます。
/dev/parportN
[Linuxのみ、パラレルポートのみ] ホストのパラレルポートN を使います。現在、SPPパラレ
ルポート機能のみ使うことができます。
file:filename
出力をfilenameに書きます。キャラクター文字は使えません。。
stdio
[Unix のみ] 標準入出力
pipe:filename
[Unix のみ] ネームパイプ filename
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
デフォルトのデバイスは、グラフィックモードではvc、グラフィックモードでなければstdio で
す。 このオプションは、4つのシリアルポートをシミュレートするまで何回か使えます。
`-parallel dev'
仮想パラレルポートをホストのデバイスdev (シリアルポートと同じデバイス名)にリダイレクト
します。Linuxホストでは、`/dev/parportN' が対応するホストのパラレルポートに接続されたハー
ドウェアデバイスを使うために使われます。 このオプションは、3つのパラレルポートをシミュ
レートするまで何回か使うことができます。
`-monitor dev'
モニターをホストのデバイスdev にリダイレクトします(シリアルポートのように同じデバイスで
す)。 デフォルトのデバイスは、グラフィックモードではvc、グラフィックモードでなけれ
ばstdio です。
`-s'
ポート1234でgdbの接続を待ちます。(See section 3.10 GDBの使い方).
`-p port'
gdbの接続ポートを変更します。
`-S'
スタートアップ時にCPUをスタートしません(モニターで'c'を入力する必要があります)。
`-d'
ログを /tmp/qemu.log に出力します。
`-hdachs c,h,s,[,t]'
ハードディスク0の物理ジオメトリを強制します。(1 <= c <= 16383, 1 <= h <= 16, 1 <= s <= 63)
そして、オプションとして、BIOSのトランスレーションモードを強制します。( t =none, lba or
auto). 通常QEMUは、これらすべてを推定することができます。このオプションは、古いMS-DOS
ディスクイメージを使う時に便利です。
`-std-vga'
BochsのVBE拡張をサポートした標準VGAカードをシミュレートします(デフォルトは、Cirrus
Logic GD5446 PCI VGAです)。
`-loadvm file'
セーブされた状態からすぐにスタートします(モニター内でloadvmしてください)。
3.4 キー操作
グラフィックモードでのエミュレーションでは、次のようなキーがつかえます。
Ctrl-Alt-f
フルスクリーンとの切り替え
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
Ctrl-Alt-n
仮想コンソール'n'に切り替えます。標準的なコンソールは:
1
ターゲットシステムの画面
2
モニター
3
シリアルポート
Ctrl-Alt
マウスとキーボードのゲストOSとの切り替え
仮想コンソール内ではCtrl-Up, Ctrl-Down , Ctrl-PageUp 、Ctrl-PageDown をつかって、前の入力に戻るこ
とができます。 エミュレーション時に `-nographic' オプションを使っている場合、 Ctrl-a hオプション
をターミナルコマンドを入力するのに使って下さい。
Ctrl-a h
このヘルプを表示します。
Ctrl-a x
エミュレータを終了します。
Ctrl-a s
ディスクデータをファイルに書き戻して保存します。( -snapshot の場合)
Ctrl-a b
breakを送信します。(Linuxでは、magic sysrqです)
Ctrl-a c
コンソールとモニターをスイッチします。
Ctrl-a Ctrl-a
Ctrl-aを送信します。
3.5 QEMUモニター
The QEMUモニターは、QEMUエミュレータに複雑なコマンドを与える時に使います。このようなことが
できます。:
リムーバブルメディアのイメージを取り出したり、入れたりすること (CD-ROMやフローピーの
ような)
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
バーチャルマシン(VM)を停止/再開し、その状態を保存したり、ディスク上のファイルから元に
戻すこと
VMの状態を外部のデバッガーなしで検査すること
3.5.1 コマンド
次のようなコマンドが使えます:
`help or ? [cmd]'
すべてのコマンドもしくは、cmd のヘルプを表示。
`commit'
ディスクイメージに変更点を書き込みます。(もし、-snapshotが使われている場合)
`info subcommand'
システムの状態についていろいろな情報を表示します。
`info network'
ネットワークの状態を表示します。
`info block'
ブロックデバイスを表示します。
`info registers'
CPUレジスタを表示します。
`info history'
コマンド履歴を表示します。
`info pci'
エミュレートされているPCIデバイスについて表示します。
`info usb'
仮想USBハブに接続されているUSBデバイスについて表示します。
`info usbhost'
すべてのUSBホストデバイスについて表示します。
`q or quit'
エミュレータを終了します。
`eject [-f] device'
リムーバブルメディアを取り出します。(強制的にするには'-f'オプションを使ってください。)
`change device filename'
リムーバブルメディアを入れ替えます。
`screendump filename'
filenameという名前で画面をPPMイメージに保存します。
`log item1[,...]'
`/tmp/qemu.log' に指定したものについてログを作成します。
`savevm filename'
すべてのバーチャルマシンの状態を filenameに保存します。
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
`loadvm filename'
すべてのバーチャルマシンの状態をfilenameから、元に戻します。
`stop'
エミュレーションをストップします。
`c or cont'
エミュレーションを再開します。
`gdbserver [port]'
gdbserverのセッションをスタートします。(デフォルトでは port=1234です。)
`x/fmt addr'
addr から、仮想メモリをダンプします。
`xp /fmt addr'
addr から、物理メモリをダンプします。 fmt により、コマンドの出力のデータのフォーマットを指
定します。 シンタックスは `/{count}{format}{size}' です。
count
は、ダンプする数を指定します。
format
は、 x (16進数), d (符号つき10進数), u (符号なし10進数), o (8進数), c (文字) or i (アセ
ンブラ命令)です。
size
は、b (8 bits), h (16 bits), w (32 bits), g (64 bits)です。x86では、 h と w は、i フォーマット
とともに指定し、16ビットと32ビットの命令のサイズを選択することができます。
例:
現在のインストラクションポインタの位置の10個の命令をダンプします。:
(qemu) x/10i
0x90107063:
0x90107064:
0x90107065:
0x90107069:
0x90107070:
0x90107071:
0x90107073:
0x90107074:
0x90107075:
0x90107076:
$eip
ret
sti
lea
lea
ret
jmp
nop
nop
nop
nop
0x0(%esi,1),%esi
0x0(%edi,1),%edi
0x90107080
ビデオメモリのスタート位置から、80個の16ビットの値をダンプします。
(qemu) xp/80hx 0xb8000
0x000b8000: 0x0b50 0x0b6c
0x000b8010: 0x0b6f 0x0b63
0x000b8020: 0x0b42 0x0b69
0x000b8030: 0x0b72 0x0b65
0x000b8040: 0x0b20 0x0b30
0x0b65
0x0b68
0x0b6f
0x0b6e
0x0b35
0x0b78
0x0b73
0x0b73
0x0b74
0x0b20
0x0b38
0x0b20
0x0b20
0x0b2d
0x0b4e
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
0x0b36
0x0b56
0x0b63
0x0b63
0x0b6f
0x0b2f
0x0b47
0x0b75
0x0b76
0x0b76
0x0b42
0x0b41
0x0b72
0x0b73
0x0b20
QEMU CPUエミュレータユーザードキュメント
0x000b8050:
0x000b8060:
0x000b8070:
0x000b8080:
0x000b8090:
0x0b32
0x0720
0x0720
0x0720
0x0720
0x0b30
0x0720
0x0720
0x0720
0x0720
0x0b30
0x0720
0x0720
0x0720
0x0720
0x0b33
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
0x0720
`p or print/fmt expr'
式の値を表示します。 fmt で表されるフォーマット部分だけが使われます。
`sendkey keys'
keysをエミュレータに送ります。 -を使って、いくつかのキーを同時に押すことができます。 例:
sendkey ctrl-alt-f1
このコマンドは、ローレベルでグラフィカルユーザーインターフェースに割り込みをかけるキーを
送るのに便利です。たとえば、X Windows のctrl-alt-f1などのように。
`system_reset'
システムをリセットします。
`usb_add devname'
USBデバイスdevnameをQEMUバーチャルハブに接続します。devnameは、仮想デバイス名(たと
えばmouse )もしくは、ホストのUSBデバイス識別子です。ホストのUSBデバイス識別子は、次のよ
うなシンタックスを持っています。host:bus.addr もしくは、host:vendor_id:product_id 。
`usb_del devname'
USBデバイス devnameをQEMU仮想USBハブから取り除きます。 devnameは、bus.addr というシン
タックスを持ちます。モニターコマンドのinfo_usb というコマンドで、取り除くデバイスを確認し
てください。
3.5.2 整数の表現方法
モニターでは、すべての整数の引数について整数の表現方法を使うことができます。 $というプレフィッ
クスをつけることで、レジスタの名前を使って、特定のCPUのレジスタの値を得ることができます。
3.6 ディスクイメージ
バージョン0.6.1から、QEMUは多くのディスクイメージをサポートします。 増加するディスクイメージ
(空でないセクターが書き込まれるごとに大きくなる)や、圧縮された、暗号化されたディスクイメー
ジを含みます。
3.6.1 ディスクイメージ作成のクイックスタート
次のコマンドを使ってディスクイメージをつくれます。
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
qemu-img create myimage.img mysize
ここで、myimage.img は、ディスクイメージのファイルの名前で、mysizeは、そのキロバイトでの大き
さです。 Mを後ろにつけることでメガバイトでサイズを指定したり、 Gを後ろにつけてギガバイトに指定
できます。 See section 3.6.3 qemu-img の起動 詳しくは、このセクションを見てください。
3.6.2 スナップショットモード
`-snapshot'
オプションを使う場合は、すべてのディスクイメージはリードオンリーとして扱われます。
ディスクのセクターに書き込みがあると、 `/tmp' ディレクトリにある一時ファイルに書かれることにな
ります。けれども、モニターでcommitを使う(もしくは、 シリアルコンソールでC-a s を押す)ことに
よって、rawディスクイメージに書き戻すことができます。
3.6.3 qemu-img の起動
使い方: qemu-img command [command options]
次のコマンドがサポートされます:
`create [-e] [-b base_image] [-f fmt] filename [size]'
`commit [-f fmt] filename'
`convert [-c] [-e] [-f fmt] filename [-O output_fmt] output_filename'
`info [-f fmt] filename'
コマンドのパラメータ:
filename
は、ディスクイメージのファイル名です。
base_image
は、コピーオンライトイメージのベースとして使われるリードオンリーのディスクイメージです。
コピーオンライトイメージは変更されたデータのみを保存します。
fmt
は、ディスクイメージのフォーマットです。 ほとんどのケースについて自動的に判断してくれま
す。 次のようなフォーマットがサポートされています:
raw
生の(Raw)ディスクイメージフォーマットです(デフォルト)。このフォーマットは、単
純で他のエミュレーターにエクスポートするのが容易だという利点があります。。 もし、
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
ファイルシステムがholes (Linux上のext2や、ext3のような)をサポートしていれば、書き込
まれたセクターのみがディスクの容量を使用します。 qemu-img info を使うか、Unix/Linux上
でls -lsを使うことで、イメージによって使われている現実のサイズを知ることができま
す。
qcow
QEMUのイメージフォーマット、最も多目的なフォーマットです。より小さなイメージを作る
ときに使ってください(たとえばWindows上のようなholesをサポートしていないファイルシ
ステムで便利です)。オプションでAES暗号やzlibベースの圧縮が使えます。
cow
ユーザーモードLinuxのコピーオンライトイメージフォーマット。QEMUで大きくなる唯一の
フォーマットとして使われています。以前のバージョンとの互換性のためだけにサポートさ
れます。win32上では使えません。
vmdk
VMware 3 と 4 互換のイメージフォーマット。
cloop
Linuxの圧縮ループ(Compressed Loop)イメージ。例えば、KnoppixのCD-ROMのような圧
縮されたCD-ROMイメージを直接再利用するときにのみ便利です。
size
は、キロバイトでのディスクイメージの大きさです。オプションでM(megabyteと G(gigabyte)を後
ろにつけることがサポートされています。
output_filename
は、出力するディスクイメージファイルの名前です。
output_fmt
は、出力するフォーマットです。
-c
は、出力するイメージが圧縮されること(qcowフォーマットのみ)を指定します。
-e
は、出力するイメージが暗号化されること(qcowフォーマットのみ)を指定します。
コマンドの解説:
`create [-e] [-b base_image] [-f fmt] filename [size]'
新しいディスクイメージをfilenameという名前、sizeというサイズ、 fmt というフォーマットで作り
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
ます。 もし、base_image が指定されると、イメージファイルには、base_image との違いのみが記
録されます。 この場合、サイズを指定する必要はありません。 commitというモニターのコマンド
が使われるまで、base_image は、けっして変更されません。
`commit [-f fmt] filename'
filenameという名前に記録された変更をベースのイメージファイルに書き込みます。
`convert [-c] [-e] [-f fmt] filename [-O output_fmt] output_filename'
filenameというディスクイメージを、output_fmt というフォーマットを用い
て、output_filename というディスクイメージに変換します。 オプションで、暗号化 ( -eオプショ
ン)もしくは、圧縮( -cオプション)が使えます。 qcow というフォーマットのみが、暗号化と圧縮をサ
ポートします。圧縮は、リードオンリーです。これは、圧縮されたセクターが再書き込みされる
と、圧縮されないデータとして再書き込みされることを意味します。 暗号化は、AESフォーマット
を使います。とても安全なものです(128bitキー)。最高の安全性を求めるには長いパスワード
(16文字)を用いてください。 qcow やcow といった大きくなるフォーマットを使うとき、イメージ
の変換はより小さなイメージを得るのにも便利です。:空のセクターは検出され、出力するイメー
ジには抑制されます。
`info [-f fmt] filename'
filenameという名前のディスクイメージについての情報を表示します。特に、表示されるサイズと
ディスク上のサイズが違うときにサイズを知るのに使います。
3.6.4 Virtual FATディスクイメージ
QEMUは、ディレクトリツリーから自動的にVirtual FATディスクイメージを作ります。 使うには、た
だ、次のようにタイプするだけです。
qemu linux.img -hdb fat:/my_directory
すると、`/my_directory' にあるすべてのファイルにアクセスできます。ディレクトリをディスクイメー
ジにコピーしたり、SAMBAやNFSでexportする必要がありません。デフォルトのアクセスは、read-
only です。 フロッピーは、:floppy: オプションでエミュレートされます。
qemu linux.img -fda fat:floppy:/my_directory
リード/ライトサポートは次のオプションでサポートされますが、テスト(ベータステージ)です。
:rw:
オプション:
qemu linux.img -fda fat:floppy:rw:/my_directory
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
決してしてはならないこと。
ASCIIでないファイル名をつかうこと。
”:rw:”とともに”-snapshot”をつかうこと。
loadvmとともに使えると期待すること。
ゲストのシステムがアクセスしているとき、FATディレクトリにホストからかきこむこと。
3.7 ネットワークのエミュレーション
QEMUは、いくつかのネットワークカード(PCターゲットではNE2000ボード)をシミュレートします。
そして、任意の仮想ローカルエリアネットワーク(VLAN)に接続できます。 ホストのTAPデバイス
は、QEMUのVLANに接続できます。VLANは、大きなネットワークをシミュレートするために分離され
たQEMUのインスタンスを接続することに使えます。 たとえば、特権を持たないユーザーモードネット
ワークスタックを基本的なネットワーク接続を持たせるため、TAPデバイスに取り替えることができま
す。
3.7.1 VLAN
QEMUは、いくつかのVLANをシミュレートします。VLANは、いくつかのネットワークデバイスの間
で、仮想コネクションを象徴的に表すことができます。これらのデバイスは、たとえば、QEMUの仮想
ネットワークカードであったり、ホストのデバイス(TAPデバイス)であったりします。
3.7.2 TAPネットワークインターフェースの使い方
これは、現実のネットワークとQEMUを接続する標準的な方法です。 QEMUは、ホスト( tapN と呼ぶ)
に仮想ネットワークデバイスを付加します。そして、現実のイーサネットカードであるかのように構成
することが可能です。 たとえば、`linux-test-xxx.tar.gz'ファイルをダウンロードし、`qemu-ifup' ス
クリプトを`/etc'にコピーします。そして、`qemu-ifup' に含まれるifconfig コマンドがrootで実行でき
るよう、sudo コマンドを適切に設定します。TAPネットワークインターフェースがあなたのカーネルでサ
ポートされていることを確認しなければなりません。`/dev/net/tun' デバイスがないといけません。
section 3.8 Linuxの直接起動を見て、Linuxのディストリビューションでネットワークを使う例を見てく
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
ださい。また、section 3.3 起動を見て、TAPネットワークインターフェースを使うコマンドラインの例
を見てください。
3.7.3 ユーザーモードでのネットワークの使い方
`-net user' オプションを付けることにより(`-net' を指定しない場合のデフォルトの設定で
す。)、QEMUは、完全なユーザーモードで、ネットワークを行います。(仮想ネットワークを使用する
ときにrootの特権が必要ありません。) 仮想的なネットワークの構成はつぎのようです。:
QEMU VLAN
<------>
|
|
---->
|
---->
ファイアーウォール/DHCP server <-----> インターネット
(10.0.2.2)
DNSサーバ (10.0.2.3)
SMBサーバ (10.0.2.4)
QEMU VMはファイアーウォールの後ろにあって、すべての入ってくる接続をブロックするよう動作しま
す。QEMU VM内では、DHCPクライアントを使って自動的にネットワークを設定することができます。
DHCPサーバは10.0.2.15から始まるアドレスを設定します。 ユーザーモードでのネットワークが動作し
ていることを確認するためには、アドレス10.0.2.2にpingしたり、QEMUの仮想DHCPサーバから10.0.2.x
の範囲のアドレスを割り当てられていることをみることで確認できます。 root特権が必要になるの
で、ping はインターネットには信頼性をもってサポートされていないことに注意してください。これ
は、ローカルルータ(10.0.2.2)にのみpingできることを意味します。 装備されているTFTPサーバを使うと
きは、ルーターはTFTPサーバーでもあります。 `-redir'オプションを使う場合、TCPもしくはUDPのコ
ネクションは、ホストからゲストへリダイレクトされます。たとえば、X11、telnet、SSHといったコネ
クションをリダイレクトできます。
3.7.4 QEMUの間でのVLANの接続
`-net socket' オプションを使うことで、いくつかのQEMUにまたがるVLANを構成することができま
す。section 3.3 起動に、基本的な例があります。
3.8 Linuxの直接起動
このセクションでは、完全に起動可能なイメージを作らずにLinuxをQEMUで動かすことについて説明し
ます。これは、素早いLinuxのカーネルのテストに有効です。QEMUのネットワークの構成の仕方につい
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
ても説明します。
1. `linux-test-xxx.tar.gz'という圧縮ファイルをダウンロードします。 Linuxのカーネルとディスク
イメージが含まれます。
2. オプション: もし、ネットワークサポートを得たければ(たとえば、x11サンプルを起動したい場
合), `qemu-ifup' というスクリプトを `/etc'にコピーしないといけません。そして、 適切に sudo で
きるようにします。 `qemu-ifup' に含まれるifconfig コマンドはrootで実行される必要があるから
です。 あなたのホストカーネルはTUN/TAPネットワークインターフェースをサポートしているか確
認する必要があります: `/dev/net/tun' デバイスがなくてはなりません。 ネットワークが使用可能
になると、ホストのカーネルとエミュレートされたカーネルの間で仮想的なネットワークの接続が
作られます。エミュレートされたカーネルはIPアドレス172.20.0.2でホストのカーネルから見る
ことができます。ホストのカーネルはエミュレートされたカーネルからはIPアドレス172.20.0.1で
見ることができます。
3. qemu.shを実行します。次のような出力が得られます:
> ./qemu.sh
Connected to host network interface: tun0
Linux version 2.4.21 ([email protected]) (gcc version 3.2.2 20030222 (Red Hat
Linux 3.2.2-5)) #5 Tue Nov 11 18:18:53 CET 2003
BIOS-provided physical RAM map:
BIOS-e801: 0000000000000000 - 000000000009f000 (usable)
BIOS-e801: 0000000000100000 - 0000000002000000 (usable)
32MB LOWMEM available.
On node 0 totalpages: 8192
zone(0): 4096 pages.
zone(1): 4096 pages.
zone(2): 0 pages.
Kernel command line: root=/dev/hda sb=0x220,5,1,5 ide2=noprobe ide3=noprobe ide4=noprobe
ide5=noprobe console=ttyS0
ide_setup: ide2=noprobe
ide_setup: ide3=noprobe
ide_setup: ide4=noprobe
ide_setup: ide5=noprobe
Initializing CPU#0
Detected 2399.621 MHz processor.
Console: colour EGA 80x25
Calibrating delay loop... 4744.80 BogoMIPS
Memory: 28872k/32768k available (1210k kernel code, 3508k reserved, 266k data, 64k init,
0k highmem)
Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
Mount cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 8192 (order: 3, 32768 bytes)
CPU: Intel Pentium Pro stepping 03
Checking 'hlt' instruction... OK.
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
apm: BIOS not found.
Starting kswapd
Journalled Block Device driver loaded
Detected PS/2 Mouse Port.
pty: 256 Unix98 ptys configured
Serial driver version 5.05c (2001-07-08) with no serial options enabled
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
ttyS00 at 0x03f8 (irq = 4) is a 16450
ne.c:v1.10 9/23/94 Donald Becker ([email protected])
Last modified Nov 1, 2000 by Paul Gortmaker
NE*000 ethercard probe at 0x300: 52 54 00 12 34 56
eth0: NE2000 found at 0x300, using IRQ 9.
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
hda: QEMU HARDDISK, ATA DISK drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
hda: attached ide-disk driver.
hda: 20480 sectors (10 MB) w/256KiB Cache, CHS=20/16/63
Partition check:
hda:
Soundblaster audio driver Copyright (C) by Hannu Savolainen 1993-1996
NET4: Linux TCP/IP 1.0 for NET4.0
IP Protocols: ICMP, UDP, TCP, IGMP
IP: routing cache hash table of 512 buckets, 4Kbytes
TCP: Hash tables configured (established 2048 bind 4096)
NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem).
Freeing unused kernel memory: 64k freed
Linux version 2.4.21 ([email protected]) (gcc version 3.2.2 20030222 (Red Hat
Linux 3.2.2-5)) #5 Tue Nov 11 18:18:53 CET 2003
QEMU Linux test distribution (based on Redhat 9)
Type 'exit' to halt the system
sh-2.05b#
4. これで、仮想的なシリアルコンソール内でカーネルを操作することができます。例えば、 lsを動か
します。 Ctrl-a hとタイプすると、仮想シリアルコンソール内で使えるキーのヘルプが表示されま
す。特に Ctrl-a x を使うとQEMUを終了し、 Ctrl-a bはMagic SysRqキーとして機能します。
5. ネットワークが可能な場合は、エミュレータ内で`/etc/linuxrc' スクリプトを起動します。(最初の
ドットを忘れないで):
. /etc/linuxrc
すると、エミュレートされたLinuxからあなたのPCに、x11のコネクションが張られます:
xhost +172.20.0.2
これで`xterm' や `xlogo' を起動し、仮想的なLinuxシステムが現実のものになっていることを確認
できます!
注意:
1. カーネル2.5.74がアーカイブに含まれます。qemu.sh内のbzImageを置き換えることで試すことが
できます。
2. qemuをきれいに終わらせるためには、 qemu内で shutdown をします。Linuxのshutdownが終わ
ると自動的にqemuも終わります。
3. 存在しないIDEインターフェースのプローブをさせないことで少し速く起動できます。そうするた
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
めには、カーネルのコマンドラインに次のようなオプションをつけます:
ide1=noprobe ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe
4. サンプルのディスクイメージはplex86プロジェクトのKevin Lawtonによって作られたものを変更し
たものです。(www.plex86.org).
3.9 USBのエミュレーション
QEMUは、PCI UHCI USBコントローラと、それに接続された8つのポートのUSBハブをエミュレートし
ます。仮想的にUSBデバイスをハブに挿したり、現実のUSBデバイスを挿したりできます。(実験的
に、Linuxホストのみで)。
3.9.1 仮想的なUSBデバイスの使い方
仮想的なUSBマウスデバイスがテスト用に利用可能です。 次のようなコマンドで試すことができます。
# マウスデバイスを加えます。
(qemu) usb_add mouse
# QEMU仮想USBハブに接続された仮想USBデバイスを表示します。
(qemu) info usb
Device 0.3, speed 12 Mb/s
# しばらく後マウスを削除します。
(qemu) usb_del 0.3
`-usbdevice' は、モニターコマンドと同じです。 usb_add .
3.9.2 LinuxホストでのUSBデバイスの使い方
注意:これは、実験的な機能です。使用するとQEMUが遅くなります。リアルタイムのストリーミングが
必要なUSBデバイス(USBビデオカメラなど)は、まだサポートされていません。
1. もし初期のLinux 2.4カーネルを使っている場合、Linuxのドライバが実際にUSBデバイスを使って
いないことを確かめてください。簡単にそれをやるには、`mydriver.o'を`mydriver.o.disabled'に
名前を変えて、該当するカーネルモジュールを使用しないようにしてください。
2. `/proc/bus/usb' が動いていることを確認してください。(ほとんどのLinuxディストリビューショ
ンでは、デフォルトで使用可能になっているはずです。)このようなものが見れるはずです。
ls /proc/bus/usb
001 devices drivers
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
3. rootだけがUSBデバイスに直接アクセスできるため、rootでQEMUを起動するか使用したいUSBデ
バイスの許可を変える必要があります。テスト用には、つぎのことで十分です。
chown -R myuid /proc/bus/usb
4. QEMUを起動し、モニター内ですること:
info usbhost
Device 1.2, speed 480 Mb/s
Class 00: USB device 1234:5678, USB DISK
使えるデバイスのリストを確認するべきです。(動かないハブを決して動かそうとしてはいけませ
ん。)
5. つぎのようにしてQEMUにデバイスを加える:
usb_add host:1234:5678
通常、ゲストOSはデバイスが挿入されたとき報告します。 同じことを`-usbdevice' オプションで
できます。
6. QEMU内で、ホストのUSBデバイスを試すことができます。
QEMUを再起動したときは、もう一度動かすためUSBデバイスを抜き差ししないといけません。 (これ
はバグです。)
3.10 GDBの使い方
QEMUには、gdbを使う基本的なサポートがあります。それにより、仮想マシンが走っているときに、そ
の状態を検査するために 'Ctrl-C' がつかえます。 gdbを使うためには、qemuを '-s' オプションとともに
起動します。qemuはgdbの接続を待ちます:
> qemu -s -kernel arch/i386/boot/bzImage -hda root-2.4.20.img -append "root=/dev/hda"
Connected to host network interface: tun0
Waiting gdb connection on port 1234
次にgdbを 'vmlinux' を実行ファイルに指定して起動します:
> gdb vmlinux
gdb上で、QEMUと接続します:
(gdb) target remote localhost:1234
これでgdbを普通に使うことができます。たとえば、'c' をカーネルを起動するために使います:
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
(gdb) c
ここで、システムコードをgdbで使うための便利なヒントを示します:
1. info reg を使って、すべてのCPUレジスタを表示します。
2. x/10i $eip で、PC(プログラムカウンタ)の位置のコードを表示します。
3. set architecture i8086 で、16ビットのコードをダンプするよう指示します。そして、 x/10i
$cs*16+*eip
で、PC(プログラムカウンタ)の位置のコードをダンプします。
3.11 ターゲットOSに特有な情報
3.11.1 Linux
X11でSVGAグラフィックモードにアクセスするには、vesa もしくは、cirrus X11ドライバーを使いま
す。 最適なパフォーマンスのためには、ゲストとホストのOSで16ビットカラーデプスを使います。 ゲ
ストに2.6のLinuxカーネルを使うときは、 カーネルのコマンドラインオプションにclock=pit オプション
を付け加えるべきです。 2.6のLinuxカーネルはデフォルトで厳密なリアルタイムクロックのチェックを
行っており、QEMUは正確にシミュレートできないからです。 ゲストに2.6のLinuxカーネルを使う場合
は、4G/4Gパッチが有効になっていないことを確認してください。QEMUはこのパッチで遅くなりま
す。QEMUアクセレレータモジュールも遅くなります。 初期のFedora Core 3 Linuxのカーネル(<2.6.91.724_FC3)では、デフォルトでこのパッチを含みます。それより新しいカーネルには、含まれません。
3.11.2 Windows
もし、遅いホストをお使いなら、Windows 95を使うほうがスピードが出てよいです。 Windows 2000も
いい選択です。
3.11.2.1 SVGAグラフィックモードのサポート
QEMUは、Cirrus Logic GD5446ビデオカードをエミュレートします。 Windows 95から始まるすべての
Windowsのバージョンで認識され、このグラフィックカードを使うことができます。 最適なパフォーマ
ンスを得るには、ゲストとホストのOSで16ビットカーラーデプスを使います。
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
3.11.2.2 CPU使用率の低減
Windows 9xは、CPUのHLT命令を正しく使用していません。 その結果、アイドル状態でもホストのCPU
サイクルを使用します。 http://www.user.cityline.ru/~maxamn/amnhltm.zipからユーティリティーをイ
ンストールすることで、この問題を解決できます。そのようなツールは、NT、2000、XPでは必要ないこ
とに注意してください。
3.11.2.3 Windows 2000 disk fullという問題
Windows 2000は、インストールの際disk fullのエラーが出るというバグを持っています。インストール
のときは、その問題を回避する`-win2k-hack' というオプションを使ってください。 Windows 2000をイ
ンストールした後は、このオプションは必要ありません。(このオプションはIDEの転送速度を遅くしま
す。)
3.11.2.4 Windows 2000のシャットダウン
Windows 98は、自動でシャットダウンできますが、Windows 2000は、自動でシャットダウンできませ
ん。 Windows 2000は、BIOSから供給されるAPMドライバを自動で使用しないことからきています。 修
正するためには、次のようにします。(Struan Bartlettさんに感謝。) コントロールパネル=>ハード
ウェアの追加/削除 & 次=>デバイスの追加/トラブルシュート=>デバイスの追加 & 次=>いいえ
リストからハードウェアの選択 & 次=>NT Apm/Legacy Support=>次(もう一度)何回か。これでド
ライバがインストールされ、Windows 2000は正しくQEMUに適当なときにシャットダウンするよう指示
します。
3.11.2.5 UnixとWindowsの間のディレクトリの共有
`-smb' オプションについてのヘルプをsection
3.3 起動で見てください。
3.11.2.6 Windows XP securityの問題
Windows XPのいくつかのリリースでは、正確にインストールされますが、セキュリティのエラーがブー
ト時にでます:
A problem is preventing Windows from accurately checking the
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
license for this computer. Error code: 0x800703e6.
わかっている対処はネットワークサポートなしで、セーフモードでブートすることだけです。 将来の
QEMUのリリースでは、このバグはなくなるでしょう。
3.11.3 MS-DOS と FreeDOS
3.11.3.1 CPU使用率の低減
DOSは、CPUのHLT命令を正確に使用していません。その結果、アイドル時にもホストのCPUサイクルを
使用します。 http://www.vmware.com/software/dosidle210.zipからユーティリティーをインストール
することで、この問題を解決できます。
4. PCでないターゲットに対するQEMUシステムエ
ミュレータ
QEMUは、一般的なエミュレータであり、PCでないマシンを多くエミュレートします。 オプションのほ
とんどはPCエミュレータと同じです。違いは次のセクションで説明します。
4.1 QEMU PowerPCシステムエミュレータ
`qemu-system-ppc'
という実行ファイルを使って、完全なPREPもしくはPowerMacのPowerPCシステム
をシミュレートします。 QEMUは、次のようなPowerMac周辺機器をエミュレートします。:
UniNorth PCI ブリッジ
VESA Bochs 拡張を装備したPCI VGA 互換のカード
2 つのPMAC IDEインターフェースとハードディスクとCD-ROMのサポート
NE2000 PCI アダプタ
不揮発性RAM
ADBキーボードとマウスを備えたVIA-CUDA
QEMUは、次のようなPREP周辺機器をエミュレートします。:
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
PCIブリッジ
VESA Bochs拡張を備えたPCI VGA互換カード
2つのIDEインターフェースとハードディスクとCD-ROMのサポート
フロッピーディスク
NE2000ネットワークアダプタ
シリアルポート
PREP不揮発性RAM
PC互換のキーボードとマウス
QEMUは、 http://perso.magic.fr/l_indien/OpenHackWare/index.htmで得られるOpen Hack'Ware Open
Firmware互換のBIOSを使用しています。 次のオプションは、PowerPCエミュレーションに特有のもので
す:
`-g WxH[xDEPTH]'
初期のVGAグラフィックモードをセットします。デフォルトは、800x600x15です。
これ以上の情報は http://perso.magic.fr/l_indien/qemu-ppc/ で得られます。
4.2 Sparc32システムエミュレータの起動
`qemu-system-sparc'という実行ファイルをつかって、JavaStation(sun4m
アーキテクチャ)をシミュ
レートします。エミュレーションは、なんとか完全なものになっています。 QEMUは、次のような
sun4m周辺機器をエミュレートします。
IOMMU
TCXフレームバッファ
Lance (Am7990)イーサネット
不揮発性RAM M48T08
スレーブI/O: タイマー、割り込みコントローラ、 Zilogシリアルポート、キーボード、 power/reset
ロジック
ESP SCSI コントローラとハードディスクとCD-ROMのサポート
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
フロッピードライブ
周辺機器の数はアーキテクチャで決まっています。 QEMUは、Prollを使いま
す。http://people.redhat.com/zaitcev/linux/で得られるPROMの代替品です。必要とされるQEMU特有な
パッチは、ソースコードに含まれます。 Linux 2.6のカーネルとラムディスクのサンプルはQEMUのサイ
トにあります。 現在、Linux 2.4やNetBSD、OpenBSDは動作しないことに注意してください。 次のオプ
ションはSparcエミュレーションに特有なものです。
`-g WxH'
初期化時のTCXグラフィックモードをセットします。デフォルトは1024x768です。
4.3 Sparc64システムエミュレータの起動
`qemu-system-sparc64' という実行ファイルでSun4uマシンをシミュレートします。
エミュレータはま
だ、使えません。 QEMUは、次のようなsun4u周辺機器をエミュレートします。
UltraSparc IIi APB PCI ブリッジ
VESA Bochs 拡張を装備したPCI VGA 互換のカード
不揮発性RAM M48T59
PC互換のシリアルポート
4.4 MIPSシステムエミュレータの起動
`qemu-system-mips' という実行ファイルで、MIPSマシンをエミュレートします。
エミュレータはLinux
のカーネルをブートできNFSを使ったDebian Linuxのインストールを走らせることができます。 次のデ
バイスがエミュレートされます:
MIPS R4K CPU
PCスタイルのシリアルポート
NE2000ネットワークカード
より詳しい情報は、メーリングリストのアーカイブにあります。
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
4.5 ARMシステムエミュレータの起動
`qemu-system-arm' というファイルでARMマシンをエミュレートします。
ARMのIntegrator/CPボードが
エミュレートされ、次のデバイスが使えます。
ARM1026E CPU
Two PL011 UARTs
SMC 91c111イーサネットアダプタ
Linux 2.6のテストイメージがQEMUのウェブサイトで得られます。 より詳しくは、QEMUメーリングリ
ストのアーカイブにあります。
5. QEMU Linux ユーザースペースエミュレータ
5.1 クイックスタート
Linuxのプロセスを立ち上げるには、QEMUはそれだけで実行可能なプログラムとダイナミックにリンク
されるターゲット(x86)のライブラリが必要です。
x86上ではネイティブのライブラリを使ってどんなプログラムでも動かそうとすることができま
す。:
qemu-i386 -L / /bin/ls
-L /
により`/' からx86ダイナミックリンカがサーチするようにします。
QEMUもLinuxのプロセスの1つなので、qemuをqemuで動かすことができます。(注意: QEMUを
ソースからコンパイルしたときだけです。):
qemu-i386 -L / qemu-i386 -L / /bin/ls
x86 CPU上でない場合、少なくともx86用glibcは最初にダウンロードする必要があります ( `qemuruntime-i386-XXX-.tar.gz' QEMUのウェブページから)。 LD_LIBRARY_PATH がセットされてないこと
を 確認してください:
unset LD_LIBRARY_PATH
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
するとあらかじめコンパイルしたx86の実行形式である `ls' を起動できます:
qemu-i386 tests/i386/ls
`qemu-binfmt-conf.sh' を見てください。x86実行形式のプログラムを起動しようとすると、QEMU
がLinuxカーネルにより自動的に起動されます。それにはLinuxカーネルのbinfmt_miscモジュールが
必要です。
QEMUのx86バージョンも同梱されます。こんなちょっとしたこともできます:
qemu-i386 /usr/local/qemu-i386/bin/qemu-i386 /usr/local/qemu-i386/bin/ls-i386
5.2 Wineの起動
配布されているx86用glibcでQEMUが動くことを確認してください(前のセクションをみて下さ
い)。確認のためには、次が実行できる必要があります:
qemu-i386 /usr/local/qemu-i386/bin/ls-i386
Wineのx86バイナリをダウンロード ( `qemu-XXX-i386-wine.tar.gz'QEMUのホームページにて)
Wineを自分のアカウントでConfigureします。提供されているスクリプト `/usr/local/qemui386/bin/wine-conf.sh' を見てください。
前に作った ${HOME}/.wine ディレクトリ
は${HOME/.wine.org}に保存されます。
そして、たとえば`putty.exe'を試すことができます:
qemu-i386 /usr/local/qemu-i386/wine/bin/wine /usr/local/qemu-i386/wine/c/Program\
Files/putty.exe
5.3 コマンドラインオプション
使い方: qemu-i386 [-h] [-d] [-L path] [-s size] program [arguments...]
`-h'
ヘルプを表示します
`-L path'
x86用elfインタプリタのパスをセットします(default=/usr/local/qemu-i386)
`-s size'
x86スタックサイズをバイト単位でセットします(default=524288)
デバッグオプション:
`-d'
ログをとります(logfile=/tmp/qemu.log)
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
`-p pagesize'
ホストのページサイズを'pagesize'だとします
6. ソースコードからのコンパイル
6.1 Linux/Unix
6.1.1 コンパイル
まず、ソースを解凍しなくてはいけません。:
cd /tmp
tar zxvf qemu-x.y.z.tar.gz
cd qemu-x.y.z
そして、QEMUをconfigureして、作ります(通常オプションは必要ありません)。
./configure
make
そして、rootで次のようにタイプします。:
make install
to install QEMU in `/usr/local'.
6.1.2 テストされたツールのバージョン
QEMUのコンパイルを成功させるには、正しいツールを使うことがとても大切です。 もっとも大切なの
は、gccです。テストされていないgccのバージョンを使ってQEMUが動作するかどうかを保証すること
はできません。 もし、違うバージョンのgccを動かしたい場合は、'configure'と'Makefile'を見てくださ
い。
host
gcc
binutils
glibc
linux
distribution
---------------------------------------------------------------------x86
3.2
2.13.2
2.1.3
2.4.18
2.96
2.11.93.0.2
2.2.5
2.4.18
Red Hat 7.3
3.2.2
2.13.90.0.18 2.3.2
2.4.20
Red Hat 9
PowerPC
3.3 [4]
3.2
2.13.90.0.18
2.3.1
2.4.20briq
Alpha
3.3 [1]
2.14.90.0.4
2.2.5
2.2.20 [2]
Debian 3.0
Sparc32
2.95.4
2.12.90.0.1
2.2.5
2.4.18
Debian 3.0
ARM
2.95.4
2.12.90.0.1
2.2.5
2.4.9 [3]
Debian 3.0
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
[1] On Alpha, QEMU needs the gcc 'visibility' attribute only available
for gcc version >= 3.3.
[2] Linux >= 2.4.20 is necessary for precise exception support
(untested).
[3] 2.4.9-ac10-rmk2-np1-cerf2
[4] gcc 2.95.x generates invalid code when using too many register
variables. You must use gcc 3.x on PowerPC.
6.2 Windows
http://www.mingw.org/から、MSYSとMinGWの現在のバージョンをインストールしま
す。downloadセクションとFAQにインストールの詳細があります。
ダウンロード MinGW用の開発ライブラリ SDL 1.2.x ( `SDL-devel-1.2.x-mingw32.tar.gz' ) を
http://www.libsdl.orgからダウンロードします。それを一時的なディレクトリで展開し、 MinGW
のtoolsディレクトリで `i386-mingw32msvc.tar.gz' を展開します。`sdl-config' スクリプトを正確
なSDLディレクトリを指すように編集します。
QEMUの現在のバージョンを展開します。
MSYSのシェルを起動します。( `msys.bat' というファイルです。)
QEMUのディレクトリに移動し、 `./configure' と `make'を起動します。 SDLを使用する場合の問
題が生じたら、 `sdl-config'を確認し、MSYSのコマンドラインから起動できることを確認してく
ださい。
QEMUを `Program Files/Qemu'にインストールすることもできます。 `make install' とタイプして
ください。`Program Files/Qemu'に`SDL.dll' をコピーするのを忘れないでください。
6.3 Linux上のWindows用クロスコンパイル
http://www.mingw.org/より、MinGWクロスコンパイルツールをインストールします。
Win32バージョンのSDL (http://www.libsdl.org) を `i386-mingw32msvc.tar.gz' を展開してインス
トールします。PATH環境変数をセットアップし、 `i386-mingw32msvc-sdl-config' がQEMUのコン
フィグレーションスクリプトから起動できるようにします。
QEMUをWindowsのクロスコンパイル用に構成します。:
./configure --enable-mingw32
必要なら、MinGW tools の --cross-prefixオプションを使って、 cross-prefix を変更することができ
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]
QEMU CPUエミュレータユーザードキュメント
ます。 --prefix を使って、Win32インストールパスをセットすることもできます。
QEMUを `Program Files/Qemu'にインストールすることもできます。 `make install' とタイプして
ください。 インストールしたディレクトリに`SDL.dll' をコピーするのを忘れないでください。
Note: 現在、WineはWin32用のQEMUを起動できないようです。
6.4 Mac OS X
Mac OS Xのパッチは、QEMUに完全にはマージされていません。そのため、必要な情報を得るためには
QEMUメーリングリストのアーカイブを見る必要があります。
This document was generated on 27 January 2006 using texi2html 1.56k.
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html[2011/12/23 15:57:51]