🔖
TOPPERS/ASP3 を QEMU で動作させる
こちらの写経です TOPPERS/ASP3をQEMUで動作させ - Qiita
環境
Ubuntu 22.04
準備
必要なパッケージをインストールします。
sudo apt install curl ruby build-essential gcc-arm-none-eabi gdb-multiarch libpixman-1-0 libjpeg-dev qemu-system-arm
qiita の記事では qemu-system-arm を https://github.com/toppers/qemu_zynq から取得して使っていたようですが、 Ubuntu 22.04 時点での qemu-system-arm パッケージをインストールしても使えました。 (toppers/qemu_zynq リポジトリも本家 qemu から fork しただけでとくにコミットされてないようなので、本家 qemu を使っても問題なさげです)
ASP3カーネルのビルドと実行
TOPPERS/ASP3カーネル簡易パッケージのダウンロード を見ると最新のものは 20230418 があるようなので、これを使います。
取得
$ curl -L -O https://www.toppers.jp/download.cgi/asp3_zybo_z7_gcc-20230418.zip
展開
$ unzip asp3_zybo_z7_gcc-20230418.zip
ビルド
$ cd asp3_3.7
$ mkdir obj
$ ruby ../configure.rb -T zybo_z7_gcc
$ make
実行。 Ctrl-A のあとに x を押すと終了します。
$ make runq
qemu-system-arm -M xilinx-zynq-a9 -semihosting -m 512M \
-serial null -serial mon:stdio -nographic -smp 1 -kernel asp
TOPPERS/ASP3 Kernel Release 3.7.1 for ZYBO <Zynq-7000, Cortex-A9> (Jun 25 2023, 11:28:54)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2023 by Embedded and Real-Time Systems Laboratory
Graduate School of Information Science, Nagoya Univ., JAPAN
System logging task is started.
Sample program starts (exinf = 0).
task1 is running (001). |
task1 is running (002). |
task1 is running (003). |
task1 is running (004). |
task1 is running (005). |
task1 is running (006). |
task1 is running (007). |
task1 is running (008). |
task1 is running (009). |
task1 is running (010). |
task1 is running (011). |
task1 is running (012). |
task1 is running (013). |
task1 is running (014). |
task1 is running (015). |
QEMU: Terminated
make runq
は target/zybo_z7_gcc/Makefile.target に定義されています。 qemu が実行されます。
#
# QEMUによる実行
#
runq:$(OBJFILE)
$(QEMU) -M xilinx-zynq-a9 -semihosting -m 512M \
-serial null -serial mon:stdio -nographic -smp 1 -kernel $(OBJFILE)
make runq
で実行されたプログラムは sample/sample1.c にあります。
/*
* サンプルプログラム(1)の本体
*
* ASPカーネルの基本的な動作を確認するためのサンプルプログラム.
*
* プログラムの概要:
*
* ユーザインタフェースを受け持つメインタスク(MAIN_TASK)と,3つの並
* 行実行されるタスク(TASK1〜TASK3),例外処理タスク(EXC_TASK)の5
* つのタスクを用いる.これらの他に,システムログタスクが動作する.ま
* た,周期ハンドラ,アラームハンドラ,割込みサービスルーチン,CPU例
* 外ハンドラをそれぞれ1つ用いる.
Discussion