2012年11月05日

QEMU が Windows でも 64bit (x64) プロセスで動作するようになりました

1 年以上前に試した時は、様々な問題があって MinGW-w64 でビルドした x64 版の QEMU は動作しませんでした。

QEMU のソースを眺めていて、tcg/i386/tcg-target.c に、_WIN64 の ifdef が増えていることに気が付きました。どうも、QEMU 1.1.0 あたりから x64 対応が入ったようです。
他にも、例えば target-arm/op_helper.c あたりで、生の long が使われていたりしたのが、uintptr_t になっていたりして、ちゃんと動きそうな感じがします。

というわけで、再び挑戦してみたところ、QEMU 1.2.0 で x64 版の動作が確認できました。



- ビルド環境

以下をダウンロードして、C:\MinGW64 以下に、ディレクトリ構造を保ったまま展開してください。
(その後、MSYS 1.0.11 を、MinGW の位置を C:/MinGW64 で指定してインストールします。MSYS のインストールの説明は省略します。)
MinGW-w64より

mingw-w64-bin_x86_64-mingw_20111101_sezero.zip

GTK+ Project: Download for Windows (64-bit) より

gettext-runtime-dev_0.18.1.1-2_win64.zip
gettext-runtime_0.18.1.1-2_win64.zip
glib-dev_2.26.1-1_win64.zip
glib_2.26.1-1_win64.zip
pkg-config_0.23-2_win64.zip
zlib-dev_1.2.5-1_win64.zip
zlib_1.2.5-1_win64.zip

zlib はリンクが間違っている上に、1.2.3 は古くてちゃんとリンクできないようなので、ディレクトリを一つ上がったところから 1.2.5-1 をダウンロードしてください。
QEMU のサイトでは、古い GLib のバージョン 2.22.4-1 が指定されていますが、このバージョンのバイナリ配布ライブラリは、現在の MinGW の GCC ではリンクエラーになるようです。)

- SDL のビルド

SDL version 1.2.15 (stable) より SDL-1.2.15.tar.gz をダウンロードします。

MSYS を起動します。
$ tar zxvf SDL-1.2.15.tar.gz
$ cd SDL-1.2.15
$ ./configure --prefix=/c/MinGW64
$ make && make install
- QEMU のビルド

基本的には 32bit の時と同じですが、なぜか configure の時に zlib.h を見つけてくれないので、extra-cflags で -I/c/MinGW64 を指定しました。

prefix は私のビルド環境に合わせたものなので、適宜指定してください。
今回は QEMU 1.2.0 で動作を確認しました。(MSYS 上で動かすと、パスの解釈がおかしくなる?ようなので、コマンドプロンプト上から動かす必要があることや、その場合は必要な DLL を同一ディレクトリにコピーする必要があることなども 32bit 版と同じです。)
$ ./configure --prefix=/c/kmc/qemu/qemu-1.2.0/bin/ --python=/c/Python27/python.exe --target-list=arm-softmmu --disable-strip --extra-cflags="-I/c/MinGW64/include"
$ make && make install
ビルド環境が異なるためか、32bit 版で発生した coroutine-win32.c の問題は発生しないようです。

ARM Cortex-A15 の LPA を生かすためには、64bit で動作することが必須なので、これは大きな前進だと思います。
(Windows の 32bit アプリでは、4GB の壁以前に、仮想アドレス空間が 2GB しかないので、(私の環境では)1GB でもアロケートに失敗します。)

トラックバックURL

コメントする

名前
URL
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード