2015年12月02日
Xilinx QEMUをMinGW-w64でビルド
Xilinx さんが公開している QEMUは Linux ホストのみサポートなのですが、一応ごにょごにょしてみたら Windows でも MinGW-w64 環境で動作させることができたので、メモを残しておきます。(ちゃんとした修正では無いことを、ご了承ください。)
○ ソースの準備
(1) Windows では aux.h や aux.c という名前のファイルは作れない
しかた無いので、Ubuntu Linux で再度 clone して、適当に aux_windows.[ch] のようにリネームして Windows 側にコピーし、関連個所を置換しました。
(2) libgcrypt が無い
ちゃんとインストールしても良いのですが、ひとまず --disable-libgcrypt してみました。
(3) semaphores.h が無い
hw/core/remote-port.c を適当にコメントアウトしまくりました…。
(4) qemu_ram_alloc_from_file() が linux の ifdef でしか実装されて無いのでリンクエラー
memory.c の当該呼び出し箇所をコメントアウト。
○ MSYS 環境でビルド
3 年以上前に作った MinGW-w64 環境(MSYS)をそのまま使ったので、今でも同じ環境が作れるかは不明です…すみません。
○ コマンドプロンプトで動作確認
Xilinx さんの Linux を使わせていただきました。
http://www.wiki.xilinx.com/file/view/2015.2-release.tar.xz/556330903/2015.2-release.tar.xz
適当な場所に展開して、コマンドプロンプトでそこに移動し、実行します。
この状態で、TeraTerm 等で、localhost 10022 ポートに ssh して root/root でログインした所、無事につながりました。(sshd が起動するまで、少し時間がかかるようです。)smp オプションなどは指定していませんが、ちゃんと 2 コアで動いているようです。
> git clone git://github.com/Xilinx/qemu.git > cd qemu > git submodule update --init pixman > git submodule update --init dtcこのソースは、当然ですが Windows でのビルドは想定されていないので、様々な問題があります。以下のような修正を行いました。
(1) Windows では aux.h や aux.c という名前のファイルは作れない
> git status On branch pub/2015.2.plnx Your branch is up-to-date with 'origin/pub/2015.2.plnx'. Changes not staged for commit: (use "git add/rmgit で clone した直後から deleted 扱いになったり、dir コマンドやエクスプローラから存在が確認できないなど、不可解な現象が起きます。また、気付かずにビルドすると、aux.h を include しているファイルをコンパイルしようとした時、cc1.exe がハングアップします。..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) deleted: hw/misc/aux.c deleted: include/hw/aux.h
しかた無いので、Ubuntu Linux で再度 clone して、適当に aux_windows.[ch] のようにリネームして Windows 側にコピーし、関連個所を置換しました。
modified: hw/display/dpcd.c modified: hw/display/xilinx_dp.c modified: hw/misc/Makefile.objs Untracked files: (use "git add..." to include in what will be committed) hw/misc/aux_windows.c include/hw/aux_windows.h
(2) libgcrypt が無い
ちゃんとインストールしても良いのですが、ひとまず --disable-libgcrypt してみました。
(3) semaphores.h が無い
hw/core/remote-port.c を適当にコメントアウトしまくりました…。
(4) qemu_ram_alloc_from_file() が linux の ifdef でしか実装されて無いのでリンクエラー
memory.c の当該呼び出し箇所をコメントアウト。
○ MSYS 環境でビルド
3 年以上前に作った MinGW-w64 環境(MSYS)をそのまま使ったので、今でも同じ環境が作れるかは不明です…すみません。
$ ../qemu/configure --prefix=/i/XilinxQEMU/bin --python=/c/Python27/python.exe --target-list=aarch64-softmmu --enable-fdt --disable-kvm --disable-strip --extra-cflags="-I/c/MinGW64/include" --cc=gcc --disable-libgcrypt $ make && make installMinGW の dll も必要なので、インストールした場所にコピーしてください。(とりあえず /c/MinGW64/bin/*.dll を全部コピーしました。)
○ コマンドプロンプトで動作確認
Xilinx さんの Linux を使わせていただきました。
http://www.wiki.xilinx.com/file/view/2015.2-release.tar.xz/556330903/2015.2-release.tar.xz
適当な場所に展開して、コマンドプロンプトでそこに移動し、実行します。
> bin\qemu-system-aarch64.exe -M arm-generic-fdt-plnx -machine linux=on -kernel uImage -dtb zc70x\zc706\devicetree.dtb -initrd uramdisk.image.gz -serial null -serial mon:stdio -redir tcp:10022:10.0.2.15:22 -nographic起動時のシリアル出力は、Windows の場合ファイルにしか出力できないようです。バイナリと同じフォルダに stdio.txt や stderr.txt が出来ているはずです。
この状態で、TeraTerm 等で、localhost 10022 ポートに ssh して root/root でログインした所、無事につながりました。(sshd が起動するまで、少し時間がかかるようです。)smp オプションなどは指定していませんが、ちゃんと 2 コアで動いているようです。
root@zynq:/# cat /proc/cpuinfo processor : 0 model name : ARMv7 Processor rev 1 (v7l) BogoMIPS : 1515.52 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x4 CPU part : 0xc09 CPU revision : 1 processor : 1 model name : ARMv7 Processor rev 1 (v7l) BogoMIPS : 1305.80 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x4 CPU part : 0xc09 CPU revision : 1 Hardware : Xilinx Zynq Platform Revision : ffffffff Serial : 0000000000000000