2012年02月20日
MinGW 環境で QEMU 1.0.1 をビルド
Windows XP (32 bit) の MinGW 環境で QEMU 1.0.1 のビルドに成功しました。
その時のメモです。
その時のメモです。
QEMU 0.15.0 あたりから、SDL と zlib に加えて、GLib や Python などが必須になり、Windows の MinGW 環境で QEMU をビルドするのは手間がかかるようになってしまいました。
これまで、だましだましパッケージを追加しつつやってきたのですが、とうとう QEMU 1.0.0 から、私の環境ではビルドしたバイナリが動作しなくなってしまいました。
これは、0.15.1 まではオプション(ifdef で切られていた)だった、CONFIG_IOTHREAD が標準になり、従来のコードが削除されてしまったためだと思われます。私の環境の GLib 環境(ソースからインストールした)が腐っていたようで、gthread や gatomic 周りがちゃんと動いてないような感じでした。
Windows がまともにサポートされているリリースかどうかすら怪しい感じだったので、とりあえず様子を見ていたのですが、2/13 に QEMU 1.0 の Windows バイナリが Qemu on Windows で公開されているのを発見しました。
このサイトでは、ビルド環境も公開されているので、その通りに環境を作ったところ、2/17 にリリースされたばかりの QEMU 1.0.1 のビルドに成功しました。
(上記サイトの QEMU 1.0 には独自の patch が当たっているようですが、1.0.1 は無変更でいけました。)
以下、その時のログです。
(1) mingw-get-inst-20111118.exe をダウンロード、実行。
http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/mingw-get-inst-20111118/
C Compiler、C++ Compiler、MSYS Basic System、MinGW Developer Toolkit
を選択して、インストール。最近の MinGW は Shell が付いてくるので、MSYS は不要なようです。
MinGW は C:\MinGW にインストールしました。
(2) 以下のパッケージをダウンロードして、C:\MinGW 以下のディレクトリ構成に合わせて展開します。
GLIB:
http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.8-20111122_win32.zip
ZLIB:
http://sourceforge.net/projects/mingw/files/MinGW/Extension/zlib/zlib-1.2.5-4/libz-1.2.5-4-mingw32-dll-1.tar.lzma/download
http://sourceforge.net/projects/mingw/files/MinGW/Extension/zlib/zlib-1.2.5-4/libz-1.2.5-4-mingw32-dev.tar.lzma/download
SDL:
http://www.libsdl.org/release/SDL-devel-1.2.15-mingw32.tar.gz
(3) sdl-config がちゃんと動かないので、/c/MinGW/bin/sdl-config (シェルスクリプト) を開いて編集します。
-prefix=/usr/local/cross-tools/i686-w64-mingw32
+prefix=/c/MinGW
(4) Python をインストールします。
http://www.python.org/ftp/python/2.7.2/python-2.7.2.msi
C:\Python27 にインストールしました。
以上です。
後は、QEMU 1.0.1 のソースコードを展開し、以下のような configure オプションで make && make install しました。
$ ./configure --prefix=/c/kmc/qemu/qemu-1.0.1/bin --target-list=arm-softmmu --python=/c/Python27/python.exe --disable-strip
途中、version.rc のコンパイルでエラーが出たので、とりあえず適当にコメントアウトして通しました。
VS_VERSION_INFO VERSIONINFO
/*
FILEVERSION CONFIG_FILEVERSION
PRODUCTVERSION CONFIG_PRODUCTVERSION
*/
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
{
動作確認は、QEMU のサイトで公開されている arm-test を使用しました。
$ /c/kmc/qemu/qemu-1.0.1/bin/qemu-system-arm.exe -kernel zImage.integrator -initrd arm_root.img
(旧環境でも 1.0.1 を試したところ、やはり動作しなかったので、ビルド環境の問題だったようです。)
追記:ここのサイトの debian ディスクイメージを、2.6.32-5-versatile で動作させたところ、1.0.1 は起動途中で「*** stack smashing detected ***: terminated」というエラーを出してクラッシュしました。同環境でビルドした 0.15.1 ではこのような問題は起きません。やはりまだ不安定?
私の MinGW 環境のインストールログと、Qemu on Window サイトの環境との差分を載せておきます。
http://prdownloads.sourceforge.net/mingw/libmpfr-2.4.1-1-mingw32-dll-1.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/libpthreadgc-2.9.0-mingw32-pre-20110507-2-dll-2.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/pthreads-w32-2.9.0-mingw32-pre-20110507-2-dev.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/libquadmath-4.6.1-2-mingw32-dll-0.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libquadmath-4.6.2-1-mingw32-dll-0.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/libgomp-4.6.1-2-mingw32-dll-1.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libgomp-4.6.2-1-mingw32-dll-1.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/libmpc-0.8.1-1-mingw32-dll-2.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/libssp-4.6.1-2-mingw32-dll-0.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libssp-4.6.2-1-mingw32-dll-0.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/libgcc-4.6.1-2-mingw32-dll-1.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libgcc-4.6.2-1-mingw32-dll-1.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/libintl-0.18.1.1-2-mingw32-dll-8.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/mingwrt-3.20-mingw32-dll.tar.gz?download
http://prdownloads.sourceforge.net/mingw/w32api-3.17-2-mingw32-dev.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/mingwrt-3.20-mingw32-dev.tar.gz?download
-http://prdownloads.sourceforge.net/mingw/binutils-2.21.53-1-mingw32-bin.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/binutils-2.22-1-mingw32-bin.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libgettextpo-0.18.1.1-2-mingw32-dll-0.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/libexpat-2.0.1-1-mingw32-dll-1.tar.gz?download
-http://prdownloads.sourceforge.net/mingw/gdb-7.3.1-1-mingw32-bin.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gdb-7.4-2-mingw32-bin.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/make-3.82-5-mingw32-bin.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/gcc-4.6.1-2-mingw32-lic.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gcc-4.6.2-1-mingw32-lic.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/libstdc++-4.6.1-2-mingw32-dll-6.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libstdc++-4.6.2-1-mingw32-dll-6.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/gcc-core-4.6.1-2-mingw32-bin.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gcc-core-4.6.2-1-mingw32-bin.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/gcc-4.6.1-2-mingw32-doc.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gcc-4.6.2-1-mingw32-doc.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/gcc-4.6.1-2-mingw32-lang.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gcc-4.6.2-1-mingw32-lang.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/gcc-c++-4.6.1-2-mingw32-bin.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gcc-c++-4.6.2-1-mingw32-bin.tar.lzma?download
これまで、だましだましパッケージを追加しつつやってきたのですが、とうとう QEMU 1.0.0 から、私の環境ではビルドしたバイナリが動作しなくなってしまいました。
これは、0.15.1 まではオプション(ifdef で切られていた)だった、CONFIG_IOTHREAD が標準になり、従来のコードが削除されてしまったためだと思われます。私の環境の GLib 環境(ソースからインストールした)が腐っていたようで、gthread や gatomic 周りがちゃんと動いてないような感じでした。
Windows がまともにサポートされているリリースかどうかすら怪しい感じだったので、とりあえず様子を見ていたのですが、2/13 に QEMU 1.0 の Windows バイナリが Qemu on Windows で公開されているのを発見しました。
このサイトでは、ビルド環境も公開されているので、その通りに環境を作ったところ、2/17 にリリースされたばかりの QEMU 1.0.1 のビルドに成功しました。
(上記サイトの QEMU 1.0 には独自の patch が当たっているようですが、1.0.1 は無変更でいけました。)
以下、その時のログです。
(1) mingw-get-inst-20111118.exe をダウンロード、実行。
http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/mingw-get-inst-20111118/
C Compiler、C++ Compiler、MSYS Basic System、MinGW Developer Toolkit
を選択して、インストール。最近の MinGW は Shell が付いてくるので、MSYS は不要なようです。
MinGW は C:\MinGW にインストールしました。
(2) 以下のパッケージをダウンロードして、C:\MinGW 以下のディレクトリ構成に合わせて展開します。
GLIB:
http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.8-20111122_win32.zip
ZLIB:
http://sourceforge.net/projects/mingw/files/MinGW/Extension/zlib/zlib-1.2.5-4/libz-1.2.5-4-mingw32-dll-1.tar.lzma/download
http://sourceforge.net/projects/mingw/files/MinGW/Extension/zlib/zlib-1.2.5-4/libz-1.2.5-4-mingw32-dev.tar.lzma/download
SDL:
http://www.libsdl.org/release/SDL-devel-1.2.15-mingw32.tar.gz
(3) sdl-config がちゃんと動かないので、/c/MinGW/bin/sdl-config (シェルスクリプト) を開いて編集します。
-prefix=/usr/local/cross-tools/i686-w64-mingw32
+prefix=/c/MinGW
(4) Python をインストールします。
http://www.python.org/ftp/python/2.7.2/python-2.7.2.msi
C:\Python27 にインストールしました。
以上です。
後は、QEMU 1.0.1 のソースコードを展開し、以下のような configure オプションで make && make install しました。
$ ./configure --prefix=/c/kmc/qemu/qemu-1.0.1/bin --target-list=arm-softmmu --python=/c/Python27/python.exe --disable-strip
途中、version.rc のコンパイルでエラーが出たので、とりあえず適当にコメントアウトして通しました。
VS_VERSION_INFO VERSIONINFO
/*
FILEVERSION CONFIG_FILEVERSION
PRODUCTVERSION CONFIG_PRODUCTVERSION
*/
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
{
動作確認は、QEMU のサイトで公開されている arm-test を使用しました。
$ /c/kmc/qemu/qemu-1.0.1/bin/qemu-system-arm.exe -kernel zImage.integrator -initrd arm_root.img
(旧環境でも 1.0.1 を試したところ、やはり動作しなかったので、ビルド環境の問題だったようです。)
追記:ここのサイトの debian ディスクイメージを、2.6.32-5-versatile で動作させたところ、1.0.1 は起動途中で「*** stack smashing detected ***: terminated」というエラーを出してクラッシュしました。同環境でビルドした 0.15.1 ではこのような問題は起きません。やはりまだ不安定?
私の MinGW 環境のインストールログと、Qemu on Window サイトの環境との差分を載せておきます。
http://prdownloads.sourceforge.net/mingw/libmpfr-2.4.1-1-mingw32-dll-1.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/libpthreadgc-2.9.0-mingw32-pre-20110507-2-dll-2.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/pthreads-w32-2.9.0-mingw32-pre-20110507-2-dev.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/libquadmath-4.6.1-2-mingw32-dll-0.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libquadmath-4.6.2-1-mingw32-dll-0.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/libgomp-4.6.1-2-mingw32-dll-1.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libgomp-4.6.2-1-mingw32-dll-1.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/libmpc-0.8.1-1-mingw32-dll-2.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/libssp-4.6.1-2-mingw32-dll-0.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libssp-4.6.2-1-mingw32-dll-0.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/libgcc-4.6.1-2-mingw32-dll-1.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libgcc-4.6.2-1-mingw32-dll-1.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/libintl-0.18.1.1-2-mingw32-dll-8.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/mingwrt-3.20-mingw32-dll.tar.gz?download
http://prdownloads.sourceforge.net/mingw/w32api-3.17-2-mingw32-dev.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/mingwrt-3.20-mingw32-dev.tar.gz?download
-http://prdownloads.sourceforge.net/mingw/binutils-2.21.53-1-mingw32-bin.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/binutils-2.22-1-mingw32-bin.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libgettextpo-0.18.1.1-2-mingw32-dll-0.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/libexpat-2.0.1-1-mingw32-dll-1.tar.gz?download
-http://prdownloads.sourceforge.net/mingw/gdb-7.3.1-1-mingw32-bin.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gdb-7.4-2-mingw32-bin.tar.lzma?download
http://prdownloads.sourceforge.net/mingw/make-3.82-5-mingw32-bin.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/gcc-4.6.1-2-mingw32-lic.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gcc-4.6.2-1-mingw32-lic.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/libstdc++-4.6.1-2-mingw32-dll-6.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/libstdc++-4.6.2-1-mingw32-dll-6.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/gcc-core-4.6.1-2-mingw32-bin.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gcc-core-4.6.2-1-mingw32-bin.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/gcc-4.6.1-2-mingw32-doc.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gcc-4.6.2-1-mingw32-doc.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/gcc-4.6.1-2-mingw32-lang.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gcc-4.6.2-1-mingw32-lang.tar.lzma?download
-http://prdownloads.sourceforge.net/mingw/gcc-c++-4.6.1-2-mingw32-bin.tar.lzma?download
+http://prdownloads.sourceforge.net/mingw/gcc-c++-4.6.2-1-mingw32-bin.tar.lzma?download