🔖

TOPPERS/ASP3 を QEMU で動作させる

2023/06/25に公開

こちらの写経です 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