TOPPERS/FMPをQEMUのZynq(ZedBoard)向けにビルド・実行してみた(解決編)

こちらの
http://www.toppers.jp/fmp-kernel.html
Toppers/FMPカーネルをZynq(ZedBoard)をエミュレートしているQEMU上で動作させる。
FMPカーネル「Zedboard 簡易パッケージ 」のやつです。
ビルド・実行はUbuntu-11.10 32bit上で行った。

Toppers/FMPは、ASPカーネルのdoc/user.txtを参考にビルドしていくと・・・

> wget http://www.toppers.jp/download.cgi/fmp_zedboard_gcc_20121030.tar.gz
> tar xf fmp_zedboard_gcc_20121030.tar.gz 
> cd fmp-zedboard
> mkdir zynqobj
> cd zynqobj/
> perl ../configure -T zynq_gcc
> make depend
../syssvc/syslog.c:158:2: error: #error !defined(G_SYSLOG) && \
(TNUM_PORT < TNUM_PRCID) : check G_SYSLOG and TNUM_PORT !
...

あれ、エラー!手順を間違えた?と若干の不安を抱きつつも、それっぽく修正してみる。

> vim ../target/zynq_gcc/target_syssvc.h"
 71 //#define TNUM_PORT   1
 72 #define TNUM_PORT   2

サポートされるシリアルポート数を1から2へ変更。
本当にこれで大丈夫かはよくわからない。あらためて、

> make depend
> make

これで、ファイルfmpとfmp.binが生成されてビルド完了。

さて、zynq-qemuをこちら
http://wiki.xilinx.com/zynq-qemu
から用意する。

> cd ../..
> wget http://xilinx.wdfiles.com/local--files/zynq-qemu/zynq_linux.tar.gz
> tar xf zynq_linux.tar.gz
> zynq_linux/arm-softmmu/qemu-system-arm -M xilinx-zynq-a9 -m 1024 \
-serial null -serial mon:stdio -kernel fmp-zedboard/zynqobj/fmp -nographic

・・・あれ?動かない。ここでしばらく悩む(3日間)。色々悩んだ末、cpuが1つしかエミュレートされてないことに気づく。これか!?
-smp 2オプションを追加すると・・・

> zynq_linux/arm-softmmu/qemu-system-arm -M xilinx-zynq-a9 -m 1024 -smp 2 \
-serial null -serial mon:stdio -kernel fmp-zedboard/zynqobj/fmp -nographic
ram size=40000000
error reading QSPI block device
error no mtd drive for nand flash
a0mpcore_priv: smp_priv_base f8f00000
error no sd drive for sdhci controller (0)
error no sd drive for sdhci controller (1)
Number of configured NICs 0x1
ram_size 40000000, board_id d32, loader_start 0

TOPPERS/FMP Kernel RelProcessor ease 1.2.12 start.
local_inirtn exinf = 2, counter = 1
 for ZYNQ (Nov  8 2012, 21:50:47)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2011 by Embedded and Real-Time Systems Laboratory
            Graduate School of Information Science, Nagoya Univ., JAPAN

Processor 1 start.
local_inirtn exinf = 1, counter = 2
../target/zynq_gcc/target_serial.c:255: Assertion `ercd == E_OK' failed.
System loggSystem logging task is started on port 2.
ing task is started on port 1.
Server task 1 starts.
Sample program starts (exinf = 1).
select tskno 0x11
select cycid 1
select almid 1
select processor 1
select class     1
task1_1 is running (001).   |
task1_1 is running (002).   |
task1_1 is running (003).   |
...

やったやった、動いた動いた!


今、あらためて、zynq_linux/start_qemu.shをみたら、-smp 2が書いてあった^^;
ちゃんと見とけばよかった〜笑