TOPPERS 活用アイデア・アプリケーション開発
コンテスト

部門

：活用アイデア部門

作品のタイトル： TOPPERS/ASP3 3.6.0 をラズパイ Pico で動かす(2022)

作成者：

石岡之也（個人）

共同作業者

：

－

対象者

： TOPPERS/ASP3 利用者、組込みソフト開発者

使用する開発成果物： TOPPERS/ASP3 Raspberry Pi Pico 簡易パッケージ
TOPPERS/ASP3 ターゲット非依存部パッケージ
asp3-3.6.0.tar.gz

目的・狙いRaspberry Pi 財団が開発、販売している Raspberry Pi Pico(が安価でありながら 264KBの RAM、2MB の Flash メモリ、26 本の GPIO と電子工作などで多くの利用が見込める。
2021 年に Pico 用の TOPPERS/ASP3 簡易パッケージが公開されたがカーネル版数が 3.5.0と古い版数であることと、ビルド環境やビルド方法が明確でないため、最新の 3.6.0 版への対応と、2022 年時点でビルド可能な環境やビルド手順を明確にして TOPPERS/ASP3を利用しやすくすることを目的とする。

アイデア/アプリケーションの概要
TOPPERS/ASP3 Raspberry Pi Pico 簡易パッケージを使い、Raspberry Pi Pico で ASP3-3.6.0を動作するようにする。
また、2022 年時点の Raspberry Pi Pico で動作する ASP3-3.6.0 のビルド環境の構築方法とビルド手順を明文化する。

1

１．はじめにRaspberry Pi 財団が開発・提供しているワンチップマイコンボード Rapsberry Pi Pico（以後、ラズパイ Pico）で動作する RTOS の TOPPERS/ASP3 3.5.0 のソースコードが TOPPERS プロジェクトから公開されています。
ただし、TOPPERS/ASP3 のカーネル本体は 3.6.0 が最新版としてリリースされていて、ビルド環境の制限などが改善されています。
このため、ラズパイ Pico 用 TOPPERS/ASP3 3.5.0 のソースコードを流用し、TOPPERS/ASP3 3.6.0 をラズパイ Pico で動作させようと考えました。
また、TOPPERS/ASP3 のラズパイ Pico 用のビルド手順が明確になっていないため、このドキュメントでビルド手順を明文化しよと考えました。
２．開発環境Rapberry Pi と Ubuntu を開発環境のベースとして利用します。
（１）Linux のインストール
以下のダウンロードページの「Ubuntu 22.04.1 LTS」
「Download 64-bit」を選択してダウンロードします。
https://ubuntu.com/download/raspberry-pi
Ubuntu Server 22.04.1 LTS
xz 形式のファイルがダウンロードでできるはずなので、それを img ファイル（ubuntu-22.04.1-preinstalled-server-arm64+raspi.img）へ展開します。
展開したファイルをイメージ書き込みツールなどを使い SD カードへ書き込みます。
書き込みが終わったら SD カードをラズパイへ差し込み、ラズパイを起動すれば ubuntu が起動します。
（２）パッケージのインストール
ビルド環境に必要だったり、あると便利そうな以下のパッケージをインストールします。
インターネットへのアクセスが可能な状態であれば、以下のコマンドで依存するパッケージを含めてインストールできます。
sudo apt-get update
sudo apt-get -y install g++ libboost-all-dev libxerces-c-dev libncurses5 cmake libusb-1.0 libssl-dev
sudo apt-get -y install net-tools openssh-server unzip（３）Ruby のインストール
TOPPERS/ASP3 のコンフィギュレータは Ruby を使って実行するようになっています。
この時点で Ruby はインストールされていないため、Ruby のインストールを行います。ただし、
TOPPERS/ASP3 3.6.0 のビルドには Ruby2.7 系が必要ですが、apt-get で単純に Ruby をインストールすると 3 系がインストールされてしまうため以下の手順で Ruby2.7.6 をビルドし、インストールします。
以下からアーカイブをダウロードし、展開します。
https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.6.tar.gz
wget cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.6.tar.gz
tar xzf ruby-2.7.6.tar.gz- 1 -Ruby をビルドします。
cd ruby-2.7.6./configuremake

以下のコマンドでインストールが完了です。
sudo make install

３．TOPPERS/ASP3 のソースのダウンロード「TOPPERS/ASP3 カーネル ターゲット非依存部パッケージ」の asp3-3.6.0.tar.gz と「TOPPERS/ASP3 カーネル簡易パッケージ・Raspberry Pi Pico 簡易パッケージ」の
asp3_raspberrypi_pico_gcc-20211016.tar.gz を使います。
以下の URL から各ファイルをダウンロードしてください。
・asp3-3.6.0.tar.gz
https://www.toppers.jp/download.cgi/asp3-3.6.0.tar.gz
・asp3_raspberrypi_pico_gcc-20211016.tar.gz
https://www.toppers.jp/download.cgi/asp3_raspberrypi_pico_gcc-20211016.tar.gz

４．ソースツリーの構築
前項でダウンロードしたソースファイルから必要なファイル、ディレクトリを集めてビルドに必要なソースツリーを構築します。
（１）ディレクトリの作成
ホームディレクトリ配下に toppers ディレクトリを作成し、ここに先にダウンロードしたasp3-3.6.0.tar.gz と asp3_raspberrypi_pico_gcc-20211016.tar.gz を配置します。
/home/ubuntu/toppers-rw-rw-r--

1 ubuntu ubuntu

718432 Dec 13 19:09 asp3-3.6.0.tar.gz-rw-rw-r--

1 ubuntu ubuntu 2171357 Dec 13 19:08 asp3_raspberrypi_pico_gcc-20211016.tar.gz/home/ubuntu/toppers ディレクトリへ移動し、temp ディレクトリを作成します。
mkdir temp（２）ソースファイルの展開
まず、/home/ubuntu/toppers ディレクトリで asp3-3.6.0.tar.gz を展開します。
tar xzf asp3-3.6.0.tar.gz
ubuntu@ubuntu:~/toppers$ ll
total 2844
drwxrwxr-x

4 ubuntu ubuntu

4096 Dec 14 00:15 ./drwxr-xr-x 37 ubuntu ubuntu

4096 Dec 14 00:10 ../drwxrwxr-x 16 ubuntu ubuntu

4096 Dec 14 00:15 asp3/-rw-rw-r--

1 ubuntu ubuntu-rw-rw-r--

1 ubuntu ubuntu 2171357 Dec 13 19:08 asp3_raspberrypi_pico_gcc-20211016.tar.gz

718432 Dec 13 19:09 asp3-3.6.0.tar.gz

drwxrwxr-x

2 ubuntu ubuntu

4096 Dec 14 00:13 temp/- 2 -次に temp ディレクトリへ移動して asp3_raspberrypi_pico_gcc-20211016.tar.gz を展開します。
cd temptar xzf ../asp3_raspberrypi_pico_gcc-20211016.tar.gz
ubuntu@ubuntu:~/toppers/temp$ ll
total 12drwxrwxr-x

3 ubuntu ubuntu 4096 Dec 14 00:15 ./drwxrwxr-x

4 ubuntu ubuntu 4096 Dec 14 00:15 ../drwxrwxr-x 16 ubuntu ubuntu 4096 Dec 14 00:15 asp3/（３）ビルド用のソースツリーの構築
元の/home/ubuntu/toppers ディレクトリへ戻り、TOPPERS/ASP3 3.6.0 本体である asp3 ディレクトリへ、
Raspberry Pi Pico 簡易パッケージのソースが展開されている temp/asp3 ディレクトリから３つのディレクトリをコピーします。
１）arch/arm_m_gcc ディレクトリのコピー
２）target/raspberrypi_pico_gcc ディレクトリコピー
３）tecsgen ディレクトリのコピー/bin/cp -a temp/asp3/arch/arm_m_gcc ./asp3/arch//bin/cp -a temp/asp3/target/raspberrypi_pico_gcc ./asp3/target//bin/cp -a temp/asp3/tecsgen ./asp3

ここまででビルドに必要なソースツリーの構築は完了です。
/home/ubuntu/toppers|--asp3||--MANIFEST||--README.txt||--arch|| |--arm_m_gcc||--gcc||--simtimer||--tracelog||--cfg||--configure.rb||--doc||--extension||--include||--kernel||--library||--sample||--syssvc||--target|| |--dummy_gcc|| |--raspberrypi_pico_gcc||--tecs_kernel||--tecsgen||--test||--test_cfg||--utils- 3 -||--temp||--asp3||--asp3-3.6.0.tar.gz|--asp3_raspberrypi_pico_gcc-20211016.tar.gz

５．ラズパイ Pico 用 TOPPERS/ASP3 のビルド
ラズパイ Pico 用の TOPPERS/ASP3 をビルドします。
（１）ビルドディレクトリの作成
はじめにビルド用のディレクトリを作成し、移動します。
mkdir build
cd build//home/ubuntu/toppers|--asp3|--build（２）TOPPERS/ASP3 のビルド
TOPPERS/ASP3 のビルドを行います。
まず、以下のコマンドでラズパイ Pico 用のコンフィギュレーションを行い、Makefile などを生成します。
../asp3/configure.rb -T raspberrypi_pico_gcc
ubuntu@ubuntu:~/toppers/build$ ../asp3/configure.rb -T raspberrypi_pico_gcc
Generating Makefile from ../asp3/sample/Makefile.
ubuntu@ubuntu:~/toppers/build$ ll
total 40
drwxrwxr-x 3 ubuntu ubuntu

4096 Sep 5 11:11 ./drwxrwxr-x 6 ubuntu ubuntu

4096 Sep 5 10:06 ../-rw-rw-r-- 1 ubuntu ubuntu 17428 Sep 5 11:11 Makefile
drwxrwxr-x 2 ubuntu ubuntu

4096 Sep 5 11:11 objs/-rw-r--r-- 1 ubuntu ubuntu

4510 Sep

5 09:57 sample1.cdl

make コマンドでビルドを開始します。
make- 4 -以下のような表示が出て、asp ファイルが生成されたらビルド成功です。
Memory region

Used Size

Region Size %age Used

FLASH:

24860 B

2 MB

1.19%

RAM:

13472 B

264 KB

4.98%

arm-none-eabi-nm -n asp > asp.syms
arm-none-eabi-objcopy -O srec -S asp asp.srec
ruby ../asp3/cfg/cfg.rb --pass 3 --kernel asp -O -I. -I../asp3/include-I../asp3/target/raspberrypi_pico_gcc -I../asp3/
arch/arm_m_gcc/rp2040 -I../asp3/arch/arm_m_gcc/common -I../asp3/arch/gcc -I../asp3 -I../asp3/sample-I./gen -I../asp3/te
cs_kernel -T ../asp3/target/raspberrypi_pico_gcc/target_check.trb \--rom-symbol asp.syms --rom-image asp.srec
configuration check passed
make[1]: Leaving directory '/home/ubuntu/toppers/build'ubuntu@ubuntu:~/toppers/build$ ll asp*
-rwxrwxr-x 1 ubuntu ubuntu 393132 Sep

5 11:14 asp*

-rwxrwxr-x 1 ubuntu ubuntu

74628 Sep

5 11:14 asp.srec*-rw-rw-r-- 1 ubuntu ubuntu

9100 Sep

5 11:14 asp.syms（３）uf2 ファイルへの変換
ラズパイ Pico へのプログラムの書き込みは、elf2uf2 というコマンドを使い uf2 ファイルへ変換して、この uf2 ファイルをラズパイ Pico へコピーします。
elf2uf2 コマンドは、ラズパイ Pico-SDK をビルドすると生成されます。ビルド方法などはラズパイ
Pico-SDK の github のページを参照してください。
ラズパイ Pico-SDK の github
https://github.com/raspberrypi/pico-sdk

ここでは、elf2uf2 コマンドを、/home/ubuntu/toppers/build ディレクトリへコピーし、以下のコマンドを実行します。
./elf2uf2 asp asp.uf2

成功すると asp.uf2 ファイルが生成されます。
ubuntu@ubuntu:~/toppers/build$ ll asp.uf2-rw-rw-r-- 1 ubuntu ubuntu 50176 Dec 14 00:50 asp.uf2- 5 -７．動作確認
ビルドした TOPPERS/ASP3 3.6.0 のプログラムをラズパイ Pico で実行するための手順を記します。
（１）UART の接続
今回使用した Raspberry Pi Pico 簡易パッケージでは、GP0 と GP1 がそれぞれ UART の TX、RX として設定され、シリアル入出力に使用可能です。
GP0、GP1、GND を USB-シリアル変換モジュールで PC と接続し、この COM ポートを 115200bps で TeraTermなどの端末ソフトで開くとサンプルプログラム出力結果を表示することができます。
（２）ラズパイ pico への書き込み
Raspberry pi の USB へラズパイ Pico を接続します。
Boot ボタン押下でラズパイ Pico をリセットします。
[16616.337849] sd 0:0:0:0: [sda] No Caching mode page found[16616.343313] sd 0:0:0:0: [sda] Assuming drive cache: write throughラズパイ Pico をマスストレージとして認識するのでドライブとしてマウントします。
ubuntu@ubuntu:~/toppers/build2$ sudo mount /dev/sda1 /mnt
ubuntu@ubuntu:~/toppers/build2$ ll /mnt
total 28
drwxr-xr-x

2 root root 16384 Jan

1 1970 ./drwxr-xr-x 20 root root 4096 Sep

2 11:04 ../-r-xr-xr-x

1 root root

241 Sep

5 2008 INDEX.HTM*-r-xr-xr-x

1 root root

62 Sep5 2008 INFO_UF2.TXT*

TOPPERS/ASP3 のバイナリファイルのコピーとドライブのアンマウントを行います。
ubuntu@ubuntu:~/toppers/build$ sudo cp asp.uf2 /mnt ; sudo umount /mnt

- 6 -（３）実行結果
asp.uf2 ファイルのラズパイ Pico への書き込みに成功すると、端末上に以下のような情報が出力され、動作を確認することができます。

以上- 7 -