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 版の動作が確認できました。
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 を起動します。
基本的には 32bit の時と同じですが、なぜか configure の時に zlib.h を見つけてくれないので、extra-cflags で -I/c/MinGW64 を指定しました。
prefix は私のビルド環境に合わせたものなので、適宜指定してください。
今回は QEMU 1.2.0 で動作を確認しました。(MSYS 上で動かすと、パスの解釈がおかしくなる?ようなので、コマンドプロンプト上から動かす必要があることや、その場合は必要な DLL を同一ディレクトリにコピーする必要があることなども 32bit 版と同じです。)
ARM Cortex-A15 の LPA を生かすためには、64bit で動作することが必須なので、これは大きな前進だと思います。
(Windows の 32bit アプリでは、4GB の壁以前に、仮想アドレス空間が 2GB しかないので、(私の環境では)1GB でもアロケートに失敗します。)
以下をダウンロードして、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 でもアロケートに失敗します。)