はじめに
TOPPERS/ASPはiTRONベースのRTOSでAPIの使い方は書籍やネット上に使い方が記されていますが、ビルド環境の構築やビルド方法の情報が少なく初心者が自身の手でTOPPERS/ASPをビルドして実行可能なバイナリコードを生成することは非常にハードルが高いです。
また、TOPPERSプロジェクトから2025年05月20日付でRaspberry Pi Pico2(以下 ラズパイPico2)用のTOPPERS/ASP個別パッケージが公開されました。
このため公開されたTOPPERS/ASPのソースコードからラズパイPico2で動作可能なバイナリコードを生成するまでの手順を記します。
なお、以前にもほかのマイコンボード向けにTOPPERS/ASPやTOPPERS/ASP3のビルド方法などを記した記事も執筆していますが、
開発環境のパッケージ版数が変わることでビルドがうまくいかないなどの問題が発生することもあるため、執筆時点の最新の状態で試して記事として執筆します。
以前の記事へのリンクを 参考情報 へ記しておきます。
開発環境
今回ビルドを行う開発環境はRaspberry Pi 5(以下 ラズパイ5)と Ubuntu を、また操作端末としてWindowsPCを用います。
ラズパイ5上ではソースコードの取得と展開、コンパイラやリンカなどビルド操作に必要なコマンドの実行を行い、これらコマンドの操作やソースコードの修正はWindowsPCから端末ソフトやファイル転送アプリ、テキストエディタを使って行う想定で記しています。
なお筆者の手元にラズパイ5がありこれを開発環境としましたが、64bitで動作するラズパイ3やラズパイ4でも同じ手順でビルドを行えると思います。
Linuxのダウンロード
今回ラズパイ5のOSはPC用のLinuxでも使われる UbuntuというディストリビューションのLinuxを用います。
また基本的にビルド用の開発環境として利用することから、Desktop版ではなくシリアルコンソールや ssh 経由でPCと接続して使用するServer版をインストールします。
以下のダウンロードページの「Ubuntu 24.04.3 LTS」:「Download Ubuntu Server 24.04.3 LTS」を選択してダウンロードします。
「Ubuntu 24.04.3 LTS」
-> 「Download Ubuntu Server 24.04.3 LTS」
SDカードへの書き込み
先の操作でxz形式のファイル ubuntu-24.04.3-preinstalled-server-arm64+raspi.img.xz がダウンロードできていると思います。
それをimgファイル(ubuntu-24.04.3-preinstalled-server-arm64+raspi.img)へ展開します。
私はWindowsPC上で「7-Zip」とうソフトを使って .xzファイルを .imgファイルへ展開しています。
https://7-zip.opensource.jp/
展開したファイルをイメージ書き込みツールなどを使い SDカードへ書き込みます。
私は DD for Windows を使ってSDカードへのイメージの書き込みを行っています。
DD for Windows : https://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows
また、Raspberry Pi Imager というツールもあるようです。
https://www.raspberrypi.com/software/
使いやすいツールを使い先の .imgファイルをSDカードへ書き込んでください。
設定ファイルの修正
書き込みが終わったら SDカード上の config.txtファイル を編集し、以下の定義を追加してラズパイでシリアルコンソールが使えるようにします。
dtparam=uart0_console
ubuntuの起動
GPIO14(TXD)、GPIO15(RXD)、GNDへシリアルコンソール用のUSB-シリアル変換モージュールなどを接続し、SDカードをラズパイへ差し込んでラズパイへ電源を投入することで ubuntuが起動します。
コンソールへ以下のメッセージが出力されログイン可能状態になると思います。
[ 6.038744] systemd[1]: Starting systemd-udev-trigger.service - Coldplug All udev Devices...
[ 6.049255] systemd[1]: Started systemd-journald.service - Journal Service.
Ubuntu 24.04.3 LTS ubuntu ttyAMA0
ubuntu login:
ubuntuの設定
コンソールからubuntuへログインし、Linux操作に必要なログインパスワード、ネットワーク、エディタ、タイムゾーンなどを利用者の環境に併せて設定します。
とくにネットワークの設定はインターネットからパッケージを取得するのに必須です。
設定方法などは 「ubuntu ネットワーク設定」など "ubuntu"と併せて必要なキーワードでネットワーク上で検索すれば出てくると思います。
また、以下のページの設定も参考になると思います。
- ラズパイを使ったTOPPERS用Cortex-M開発環境の構築
https://qiita.com/Yukiya_Ishioka/items/e68a6aabf72f0721948d
パッケージのインストール
TOPPERS/ASPのビルドに必要ようなパッケージのほか、ラズパイPico、Pico2をUbuntu上で使う上で便利そうなパッケージも併せてインストールしておきます。
まず、既存のインストールパッケージを最新にします。
sudo apt update
sudo apt -y upgrade
次にビルドに必要なパッケージをインストールします。
sudo apt install -y cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential
sudo apt install -y libboost-all-dev libxerces-c-dev make g++ net-tools
ビルド環境の準備としては以上になります。
ソースツリーの構築
ラズパイPico2用TOPPERS/ASPのビルドに必要なソースコードの取得とビルドするためのソースツリーの構築を行います。
ソースコードの取得
まず TOPPERS/ASPのソースコードとして以下の2つのパッケージを取得します。
-
TOPPERS/ASPカーネル ターゲット非依存部パッケージ
https://www.toppers.jp/download.cgi/asp-1.9.3.tar.gz -
ARM Cortex-M33アーキテクチャ・GCC依存部パッケージ
https://www.toppers.jp/download.cgi/asp_arch_arm_m33_gcc-1.9.3.tar.gz
また TOPPERS/ASPのカーネルやアプリケーションの環境設定に必要なコンフィグレーションツールを取得します。
- TOPPERS新世代カーネル用コンフィギュレータ
https://www.toppers.jp/download.cgi/cfg-1.9.6.tar.gz
これらのソースコードを取得するにあたり今後の作業用のディレクトリを作成し、その配下へ移動します。
今回は toppers_asp_pico2 というディレクトリ名にしました。
ubuntu@ubuntu:~$ mkdir toppers_asp_pico2
ubuntu@ubuntu:~$ cd toppers_asp_pico2/
ubuntu@ubuntu:~/toppers_asp_pico2$
ディレクトリ移動後、ラズパイPico2用TOPPERS/ASPのソースとコンフィグレータのソースパッケージの3ファイルをダウンロードします。
wget https://www.toppers.jp/download.cgi/asp-1.9.3.tar.gz
wget https://www.toppers.jp/download.cgi/asp_arch_arm_m33_gcc-1.9.3.tar.gz
wget https://www.toppers.jp/download.cgi/cfg-1.9.6.tar.gz
ダウンロード後の作業ディレクトリは以下のようになります。
ubuntu@ubuntu:~/toppers_asp_pico2$ ll
total 1100
drwxrwxr-x 2 ubuntu ubuntu 4096 Aug 19 05:03 ./
drwxr-x--- 5 ubuntu ubuntu 4096 Aug 19 05:02 ../
-rw-rw-r-- 1 ubuntu ubuntu 520676 Aug 19 05:02 asp-1.9.3.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu 437776 Aug 19 05:03 asp_arch_arm_m33_gcc-1.9.3.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu 153788 Aug 19 05:02 cfg-1.9.6.tar.gz
各ファイルを取得後、作業ディレクトリ内でパッケージを展開します。
tar xzf asp-1.9.3.tar.gz
tar xzf asp_arch_arm_m33_gcc-1.9.3.tar.gz
tar xzf cfg-1.9.6.tar.gz
展開後の作業ディレクトリは以下のように aspディレクトリ、cfgディレクトリの2つのディレクトリが追加されます。
ubuntu@ubuntu:~/toppers_asp_pico2$ ll
total 1108
drwxrwxr-x 4 ubuntu ubuntu 4096 Aug 19 05:08 ./
drwxr-x--- 5 ubuntu ubuntu 4096 Aug 19 05:02 ../
drwxr-xr-x 15 ubuntu ubuntu 4096 Sep 2 2024 asp/ ←TOPPERS/ASP用のソースディレクトリ
-rw-rw-r-- 1 ubuntu ubuntu 520676 Aug 19 05:02 asp-1.9.3.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu 437776 Aug 19 05:03 asp_arch_arm_m33_gcc-1.9.3.tar.gz
drwxrwxr-x 4 ubuntu ubuntu 4096 Aug 19 05:08 cfg/ ←コンフィグレータ用のソースディレクトリ
-rw-rw-r-- 1 ubuntu ubuntu 153788 Aug 19 05:02 cfg-1.9.6.tar.gz
なお、asp_arch_arm_m33_gcc-1.9.3.tar.gzファイルは aspディレクトリ配下に展開されます。
asp_arch_arm_m33_gcc-1.9.3.tar.gzファイルの構成を以下に記しておきます。
|--asp
| |--README_COREM33.txt
| |--configure
| |
| |--arch/
| | |--arm_m_gcc/
| |
| |--target/
| | |--raspberrypi_pico2_gcc/
| | |--stm32l552nucleo144_gcc/
| |
| |--tools/
ラズパイPico2用TOPPERS/ASPのビルド
TOPPERS/ASPのビルドを行うには以下の手順が必要です。
それぞれの手順を説明していきます。
- コンフィグレーションコマンドcfcの生成
- TOPPERS/ASPカーネルソースのコンフィグレーション
- TOPPERS/ASP+アプリケーションのビルド
コンフィグレーションコマンドcfcの生成
cfg-1.9.6.tar.gzを展開して得られるコンフィグレータ用のソースコードをビルドしてコンフィグレーションコマンドcfcの生成を行います。
ただし、コンフィギュレータのページには以下の注記があり、そのままではビルドできません。
実際に提供されたソースコードをそのままビルドするとヘッダファイルのインクルード不足によるエラーで止まってしまいます。
このため、以下のようにcfg/toppers/text.hppファイルとcfg/toppers/cpp.hppファイルへインクルードの定義を追加します。
54 #include "toppers/text_line.hpp"
55 #include "toppers/misc.hpp"
56 #include <boost/next_prior.hpp> /* ※ 追加 */
57 #include <boost/utility.hpp>
58 #include <boost/iterator/iterator_facade.hpp>
44 #include "toppers/codeset.hpp"
45 #include "toppers/diagnostics.hpp"
46 #include <boost/next_prior.hpp> /* ※ 追加 */
47 #include <boost/utility.hpp>
48 #include <boost/filesystem/path.hpp>
次にソースコード内のconfigureスクリプトを使ってコンフィグレーションを行いますが、configureスクリプトの改行コードに「0x0d」が含まれているため正しく動作しません。
このため以下のコマンドで不要な改行コード「0x0d」を削除したconfigureスクリプトを生成します。
cd cfg
mv configure configure.org
tr -d '\r' < configure.org > configure
chmod u+x configure
修正後、以下のコマンドでコンフィグレーションを実行します。
./configure --with-libraries=/usr/lib/aarch64-linux-gnu
configureスクリプトの実行が成功したら以下のコマンドでコンフィギュレータをビルドします。
make OPTIONS=-std=c++11
ビルドに成功すると cfgディレクトリ配下にcfgコマンドが生成されます。
|--cfg/
| |--cfg/
| | |--cfg
生成されたcfgコマンドを aspディレクトリ配下のcfg/cfgディレクトリへコピーしてカーネルのコンフィグレーションの準備が完了です。
mkdir -p ../asp/cfg/cfg
cp ./cfg/cfg ../asp/cfg/cfg/cfg
TOPPERS/ASPカーネルソースのコンフィグレーション
cfgコマンドの生成とコピーが終わったら次はTOPPERS/ASPカーネルソースのコンフィグレーションを実行します。
まずはtoppers_asp_pico2ディレクトリ直下へ戻りTOPPERS/ASPのビルド用ディレクトリを作成し、移動します。
cd ..
mkdir build
cd build
ビルド用ディレクトリへ移動したら以下のconfigureスクリプトを実行することでカーネルソースのコンフィグレーションを行います。
引数「-T raspberrypi_pico2_gcc」がラズパイPico2の指定となります。
引数「-dROM」はROM (Flash) 上で実行するコードを生成する指定となります。
../asp/configure -T raspberrypi_pico2_gcc -dROM
コンフィグレーションに成功するとbuildディレクトリ配下にMakefileが生成され、サンプルアプリケーションがコピーされます。
ubuntu@ubuntu:~/toppers_asp_pico2/build$ ll
total 48
drwxrwxr-x 2 ubuntu ubuntu 4096 Aug 26 15:29 ./
drwxrwxr-x 8 ubuntu ubuntu 4096 Aug 26 15:29 ../
-rw-rw-r-- 1 ubuntu ubuntu 15334 Aug 26 15:29 Makefile
-rw-rw-r-- 1 ubuntu ubuntu 15652 Aug 26 15:29 sample1.c
-rw-rw-r-- 1 ubuntu ubuntu 918 Aug 26 15:29 sample1.cfg
-rw-rw-r-- 1 ubuntu ubuntu 3246 Aug 26 15:29 sample1.h
TOPPERS/ASP+アプリケーションのビルド
TOPPERS/ASPカーネルソースのコンフィグレーションを実行するとサンプルアプリケーションがコピーされ、Makefileもサンプルアプリケーションをビルドするための内容になります。
独自のアプリケーションをビルドする場合、ソースファイルの修正や追加を行い、併せてMakefileも修正してください。
今回はサンプルアプリケーションをそのまま使いTOPPERS/ASPとアプリケーションのビルドを行います。
ビルドはbuildディレクトリ配下でmakeコマンドを実行します。
なお、TOPPERS/ASPカーネルソースのビルドでは必要なファイルを生成しながらコンパイルが行われるため、ビルド処理を並行して行う 「-j」オプションの指定( make -j4 など)は禁止です。
make
TOPPERS/ASP+アプリケーションのビルドに成功すると以下のaspファイルが生成されます。
-rwxrwxr-x 1 ubuntu ubuntu 301404 Aug 20 07:36 asp*
-rwxrwxr-x 1 ubuntu ubuntu 87956 Aug 20 07:36 asp.srec*
-rw-rw-r-- 1 ubuntu ubuntu 9239 Aug 20 07:36 asp.syms
uf2形式変換ツールのビルド
TOPPERS/ASP+アプリケーションのビルドが成功するとaspファイル、asp.srecファイルがバイナリファイルとして生成されます。
ラズパイPico2のBOOTSELボタンを押しながら起動するとマスストレージモードで立ち上がってバイナリファイルを書き込める状態になりますが、このとき利用できるのはuf2形式のファイルで先の2つのファイルでは書き込むことができません。
このためELF形式のaspファイルを uf2形式へ変換するツールを用意します。
ELF形式からuf2形式への変換ツールですが、以前はpico-sdkパッケージに含まれていましたが、現在はpicotoolパッケージで提供されています。
picotoolパッケージから変換ツールをビルドする手順を記します。
ソースパッケージの取得
以下の2つのパッケージを取得します。
-
picotoolパッケージ
https://github.com/raspberrypi/picotool.git
変換ツール本体 -
pico-sdkパッケージ
https://github.com/raspberrypi/pico-sdk.git
picotoolパッケージのビルドに必要なファイルがあります
toppers_asp_pico2ディレクトリ移動後、2ファイルをダウンロードします。
2ファイルともgithub上のファイルなのでgit cloneでダウンロードすることで展開もされます。
cd ~/toppers_asp_pico2
git clone https://github.com/raspberrypi/picotool.git
git clone https://github.com/raspberrypi/pico-sdk.git
picotoolパッケージのビルド
picotoolパッケージのビルド用ディレクトリを作成・移動してpico-sdkへのパス設定とpicotoolのcmakeを実行します。
cmakeでビルドに必要なファイルを生成してmakeでビルドを実行します。
mkdir build-tool
cd build-tool
export PICO_SDK_PATH=../pico-sdk
cmake ../picotool
make
make実行後にpicotoolという実行ファイルが生成されれば成功です。
-rwxrwxr-x 1 ubuntu ubuntu 1488432 Aug 27 07:22 picotool*
ubuntu@ubuntu:~/toppers_asp_pico2/build-tool$ ./picotool version
picotool v2.2.0-a4 (Linux, GNU-13.3.0, Release)
uf2ファイルの生成
ビルドしたpicotoolを使ってTOPPERS/ASP+アプリケーションのELF形式からuf2形式へ変換を行います。
ここからはTOPPERS/ASP+アプリケーションをビルドした ~/toppers_asp_pico2/buildディレクトリ で作業を行います。
cd ~/toppers_asp_pico2/build
buildディレクトリ配下に生成されたasp ファイルが ELF形式のファイルなのですが、picotoolの仕様でaspというファイル名では ELF形式のファイルと認識されずに picotoolコマンドがエラーとなります。
ubuntu@ubuntu:~/toppers_asp_pico2/build$ ../build-tool/picotool info asp
ERROR: filename 'asp' does not have a recognized file type (extension)
このためaspファイルを asp.elfというファイルへコピーします。
※ mvコマンドでファイル名の変更でも構いませんが、確認のため元ファイルが残るコピー操作に必要なファイルを生成します。
cp -a asp asp.elf
ubuntu@ubuntu:~/toppers_asp_pico2/build$ ll asp*
-rwxrwxr-x 1 ubuntu ubuntu 301404 Aug 20 07:36 asp*
-rwxrwxr-x 1 ubuntu ubuntu 301404 Aug 20 07:36 asp.elf*
-rwxrwxr-x 1 ubuntu ubuntu 87956 Aug 20 07:36 asp.srec*
-rw-rw-r-- 1 ubuntu ubuntu 9239 Aug 20 07:36 asp.syms
生成した asp.elf で問題がないか確認しておきます。
ubuntu@ubuntu:~/toppers_asp_pico2/build$ ../build-tool/picotool info asp.elf
File asp.elf:
Program Information
name: asp
version: 1.9.3
binary start: 0x10000000
binary end: 0x1000726c
target chip: RP2350
image type: ARM Secure
以下のコマンドでELF形式からuf2形式へ変換を行います。
asp.uf2ファイルが生成されていれば成功です。
../build-tool/picotool uf2 convert asp.elf asp.uf2
ubuntu@ubuntu:~/toppers_asp_pico2/build$ ll asp*
-rwxrwxr-x 1 ubuntu ubuntu 301404 Aug 20 07:36 asp*
-rwxrwxr-x 1 ubuntu ubuntu 301404 Aug 20 07:36 asp.elf*
-rwxrwxr-x 1 ubuntu ubuntu 87956 Aug 20 07:36 asp.srec*
-rw-rw-r-- 1 ubuntu ubuntu 9239 Aug 20 07:36 asp.syms
-rw-rw-r-- 1 ubuntu ubuntu 58880 Aug 27 07:47 asp.uf2
ラズパイPico2を使っての動作確認
TOPPERS/ASP+アプリケーションをビルドし、変換したバイナリファイル asp.uf2が実際のラズパイPico2で動作するかを確認します。
シリアルコンソールの準備
TOPPERS/ASPのサンプルアプリケーションはシステムログを通してUARTからログを出力するようになっています。
ラズパイPico2用TOPPERS/ASPの初期状態ではUART0のTXD、RXDがそれぞれGPIO0、GPIO1を使用するように設定されています。
なお、通信速度は115200bpsです。
このため、USBシリアル変換モジュールなどを使いWindowsPCと接続することで動作結果をWindowsPC上のターミナルソフトで入出力を行うことができます。
シリアルコンソールとして使用するピンや接続先を以下に記すので接続を行ってください。
接続後、WindowsPC上でターミナルソフトを起動し、USBシリアル変換モジュールのCOMポートへ設定してください。
| Default UART0 | Physical Pin | GPIO Pin | USB-シリアル |
|---|---|---|---|
| UART0_TX | 1 | GPIO0 | RX |
| UART0_RX | 2 | GPIO1 | TX |
| GND | 3 | - (GND) | GND |
プログラムの書き込み
ラズパイPico2へのプログラムの書き込みについて記します。
-
uf2ファイルのWindowsPCへの転送
ビルド、形式変換してラズパイ5上にあるasp.uf2ファイルをWindowsPCへ転送します。
WinSCPなどのツールを使いネットワーク経由で、もしくは、USBメモリなどを仲介してラズパイ5からWindowsPCへ転送してください。 -
ラズパイPico2をWindowsPCへ接続
USBミニBケーブルを使いWindowsPCのUSBポートとラズパイPico2を接続します。
接続する際にラズパイPico2上のBOOTSELボタンを押しながらWindowsPCと接続してください。
なお、ラズパイPico2に加工、または拡張ボードを使いリセットボタンが利用可能であれば接続時にBOOTSELボタンの押下はせずに
プログラムの書き込み直前にBOOTSELボタンを押下しながらリセット操作を行ってもよいです。 -
プログラムの書き込み
WindowsPC上のエクスプローラーを開き、ドライブ RP2350(?:) へasp.uf2ファイルをコピーしてください。
ドライブ RP2350(?:) が存在しない場合、前述のBOOTSELボタンを押しながらWindowsPCとの接続、もしくは、リセット操作を再度行ってください。
プログラムの動作確認
ラズパイPico2へのasp.uf2ファイルのコピーが成功するとWindowsPC上のターミナルソフトへ以下のような表示がされれば成功です。
シリアルポートの変更方法
シリアルポートとして使用するピンやデバイスの定義はTOPPERS/ASPのソースツリーの以下の箇所に記述されています。
使用するハードウェアに合わせて定義し、ビルドすることで使用するデバイス、ピンを変更することができます。
64 #define TX1_PINPOS 0
65 #define RX1_PINPOS 1
66 #define TX2_PINPOS 8
67 #define RX2_PINPOS 9
70 #
71 # シリアルポートの定義
72 #
73 COPTS := $(COPTS) -DSIO_PORTID=1
なおシリアルポートとして使用するデバイスは下表のように定義します。
| デバイス | 設定 | 使用ピン定義 |
|---|---|---|
| UART0 | SIO_PORTID=1 | TX1_PINPOS, RX1_PINPOS |
| UART1 | SIO_PORTID=2 | TX2_PINPOS, RX2_PINPOS |
例えば下表のデバイスとピンをシリアルとして使用する場合の変更内容は以下の通りです。
| デバイス | UART1 |
| TXD | GPIO 20 |
| RXD | GPIO 21 |
66 #define TX2_PINPOS 20
67 #define RX2_PINPOS 21
73 COPTS := $(COPTS) -DSIO_PORTID=2
さいごに
TOPPERS/ASPはconfigureによる環境設定が必要で自前のcfgコマンドを使ってカーネルのコンフィグレーションを行います。
ただし、cfgコマンドは利用者それぞれの環境でのビルドが必要であり使用する環境によってはそのままビルドできない問題を含んでいます。
このため、TOPPERSの初心者が利用するにはハードルが高いソフトウェアとなっていると思います。
今回のビルド手順ではubuntuでそのままビルドできない問題の回避方法を記すとともに、TOPPERS/ASPカーネル+アプリケーションのビルドが成功するまでの環境構築から操作手順、および実際にラズパイPico2上でプログラムを動作させる方法を記していますので、TOPPERS/ASPを使う開発者の参考になれば幸いです。
参考情報
TOPPERS/ASPやTOPPERS/ASP3のビルド方法などを記した記事の一覧を以下に記します。
-
TOPPERS/ASP3 3.6.0をRaspberry Pi Picoで動かす
https://qiita.com/Yukiya_Ishioka/items/2d1d097c261121661fa3 -
TOPPERS/ASP3 3.6.0をSTM32F401-Nucleoで動かす
https://qiita.com/Yukiya_Ishioka/items/79326fd142eef9190a99 -
TOPPERS/ASP3のビルド環境の検証
https://qiita.com/Yukiya_Ishioka/items/2317b35ab0b98e15f6d0 -
ラズパイを使ったTOPPERS用Cortex-M開発環境の構築
https://qiita.com/Yukiya_Ishioka/items/e68a6aabf72f0721948d -
TOPPERS/ASP(2020-03-10版)をビルドして動かす
https://qiita.com/Yukiya_Ishioka/items/13b642eeffca1c266641 -
TOPPERS/ASP3をビルドして動かしてみる
https://qiita.com/Yukiya_Ishioka/items/63618319d47ac743a631 -
TOPPERS/ASPをビルドして動かしてみる
https://qiita.com/Yukiya_Ishioka/items/9ecbe080939600c323c6





