2015年12月02日

Xilinx QEMUをMinGW-w64でビルド

Xilinx さんが公開している QEMUは Linux ホストのみサポートなのですが、一応ごにょごにょしてみたら Windows でも MinGW-w64 環境で動作させることができたので、メモを残しておきます。(ちゃんとした修正では無いことを、ご了承ください。)



○ ソースの準備
> 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/rm ..." 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
git で clone した直後から deleted 扱いになったり、dir コマンドやエクスプローラから存在が確認できないなど、不可解な現象が起きます。また、気付かずにビルドすると、aux.h を include しているファイルをコンパイルしようとした時、cc1.exe がハングアップします。
しかた無いので、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 install
MinGW の 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


トラックバックURL

コメントする

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

QRコード
QRコード