qemuをMinGWでビルド
GNU Hurdを動かすための布石として、qemuをインストールする。
参考サイト:KMC Staff Blog:MinGW 環境で QEMU 1.0.1 をビルド
以下、揃えたソフトウェアのバージョンなど
qemuってIBMとかRHの人もコミットしてるんだねえ。
learning@foxy_maiden /usr/local/src/qemu $ uname -a MINGW32_NT-6.1 FOXY_MAIDEN 1.0.16(0.48/3/2) 2010-09-29 00:07 i686 Msys learning@foxy_maiden /usr/local/src/qemu $ gcc --version gcc.exe (GCC) 4.5.2 Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. learning@foxy_maiden /usr/local/src/qemu $ git log -1 commit 8aca521512a14c439624191bd0a891c52f91b401 Merge: 664535c 89bfe00 Author: Anthony Liguori <aliguori@us.ibm.com> Date: Mon Jun 18 10:35:16 2012 -0500 learning@foxy_maiden /usr/local/src/qemu $ python --version Python 2.7.1 learning@foxy_maiden /usr/local/src/qemu $ which python /c/Python27/python.exe あとその他に用意していたもの(以前ビルドしていて、qemuに必要そうなソース) SDL-1.2.14 glib-2.21.0 zlib-1.2.6
エミュレートしたいCPUの種類の一覧は configure -h すれば出てきた
--target-list=LIST set target list (default: build everything) Available targets: i386-softmmu x86_64-softmmu alpha-softmmu arm-softmmu cris-softmmu lm32-softmmu m68k-softmmu microblaze-softmmu microblazeel-softmmu mips-softmmu mipsel-softmmu mips64-softmmu mips64el-softmmu ppc-softmmu ppcemb-softmmu ppc64-softmmu sh4-softmmu sh4eb-softmmu sparc-softmmu sparc64-softmmu s390x-softmmu xtensa-softmmu xtensaeb-softmmu
とりあえずGNU Hurdはi386環境で動くとの事なので「i386-softmmu」を選択
これでconfigureは通るだろ!オラオラ
最初おまかせconfigureで設定してたらvnc-jpegがenableになっていて、どうしてもビルドできなかったのでdisableに指定
$ ./configure --prefix=/c/qemu/qemu-i386/bin --target-list=i386-softmmu --python=/c/Python27/python.exe --disable-strip --disable-vnc-jpeg
ビルド後にqemuを適当に起動してみた図
GNU HurdをWindowsで動かす
まず仮想ディスクを作成する
参考:フリーのエミュレータQEMUを使おう@謎の処理系 SunOS 4.1.4 with Linux/FreeBSD
learning@foxy_maiden /c/gnu-hurd $ /c/qemu/qemu-i386/bin/qemu-img create hd0.img 4G
次にisoファイルをダウンロードしてくる
Hurd-JP Project
learning@foxy_maiden /c/gnu-hurd $ ls debian-K7-hurd-i386-mini.iso hd0.img
起動してみる
learning@foxy_maiden /c/gnu-hurd $ /c/qemu/qemu-i386/bin/qemu-system-i386 -m 512 -hda hd0.img -cdrom debian-K7-hurd-i386-mini.iso
動きましたぜ。後は手動でディスクとかネットワークの設定をする必要がありそうだなー
MonaOS-0.3.4をWindows環境(MSYS/MinGW)環境でビルド
前からビルドしたいと思っていたMonaOSに挑戦。
MonaOSのソースはクロスコンパイル前提なのでMinGWネイティブでの作業は考慮されていない、いろいろ書き換えた。
参考:LinuxのMinGWでMonaをコンパイル - Mona OS developers Wiki
起こった問題まとめ
しかし、依存性のあるライブラリのビルドでコケる。
・問題1:Windowsの拡張子対応
/$MONA_HOME/mona/tool/t5lzma/7zip/Compress/LZMA_Alone
にて strip.exeが t5lzma.exe の容量を削る際 名前が t5lzmaになっているのでt5lzma.exeに変更
makeの際 EXEEXT='.exe'と設定することで解決
・問題2:undefined reference to '__chkstk'
/$MONA_HOME/mona/core/monaapi/Makefile
にてリンクを行うと undefined reference to '__chkstk' が起こる
gccが勝手に作るスタック確認用の関数らしい、要はchkstkというシンボルを作ったのに実装してないから怒られてる。
スタックのチェックを行わなくするオプション -mno-stack-arg-probeをつけてコンパイルし直すとリンクできる
・問題3:擬似再配置?
ld時のオプションとして「--disable-runtime-pseudo-reloc」をつける必要がある
☆Makefileの書き換え☆
1、g++部分 # 移動 $ cd /$MONA_HOME/mona/ # 書き換え $ find ./ -name Makefile -print | xargs sed -i 's/$(CXX)/$(CXX) -mno-stack-arg-probe/'g $ find ./ -name \*.inc -print | xargs sed -i 's/$(CXX)/$(CXX) -mno-stack-arg-probe/'g # 確認 $ find ./ -name Makefile -print | xargs grep \$\(CXX\) $ find ./ -name \*.inc -print | xargs grep \$\(CXX\) 2,gcc部分 # 書き換え $ find ./ -name Makefile -print | xargs sed -i 's/$(CC)/$(CC) -mno-stack-arg-probe/'g # 確認 $ find ./ -name Makefile -print | xargs grep \$\(CC\) 3,ld部分:オプションに「--disable-runtime-pseudo-reloc」を追加する # 書き換え $ find ./ -name Makefile -print | xargs sed -i 's/$(LD)/$(LD) --disable-runtime-pseudo-reloc/'g # 確認 $ find ./ -name Makefile -print | xargs grep \$\(LD\) 4、bim2bin実行時に.exeがついていない問題 # 書き換え $ find ./ -name Makefile -print | xargs sed -i 's/bim2bin in/bim2bin.exe in/'g $ find ./ -name Makefile.mona -print | xargs sed -i 's/bim2bin in/bim2bin.exe in/'g $ find ./ -name \*.inc -print | xargs sed -i 's/bim2bin in/bim2bin.exe in/'g # line.219を書き換え $ vim /usr/local/share/mona-0.3.4/mona/core/gmp/gmp-4.3.2/Makefile.mona # 確認 $ find ./ -name Makefile -print | xargs grep 'bim2bin.exe' $ find ./ -name \*.inc -print | xargs grep 'bim2bin.exe' 5、opensslビルド時にgccが固定値になっているため変更する $ cd /$MONA_HOME/mona/core/openssl-1.0.0c/ $ vim Makefile 76 CROSS_COMPILE= /usr/bin/i586-mingw32msvc- をコメントアウト
いざコンパイル
$ ./configure --mingw-prefix=/mingw/bin/ $ make depend $ EXEEXT='.exe' make $ make install
結果から言うとやっぱダメでした。MinGWでビルドしたmona.imgをqemuで走らせると、起動直後によくわからんループが起きて止められない。