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が書いてあった^^;
ちゃんと見とけばよかった〜笑