hotch-potch, Note to self

いろいろ作業記録

Zephyr・RaspberryPi PICO2 チュートリアルチャレンジ

1.はじめに

リアルタイムOSのひとつであるZephyrの試行として、RaspberryPi PICO 2(RP2350)を対象に試してみます。

2.ビルド環境の準備

docs.zephyrproject.org

基本的には、上記公式の「Getting Started Guide」に従い、 Windows上のVirtualBOX上にインストールしたUbuntu Linuxに開発環境を作りながら進めて行きます.

本記事では、上記を進める中で細々引っかかった点などの気付きも含め、補完していきます。

(1)実行環境

詳細

$ uname -a
Linux hoge 6.8.0-51-generic #52-Ubuntu SMP PREEMPT_DYNAMIC Thu Dec  5 13:09:44 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

$ python -V
Python 3.12.3

ここまでは、Ubuntu Linuxの標準的なインストール内容です。

(2)開発ツールのインストール

改めて、こちらの手順を参考に進めていきます。

aptでインストールできるもの

# 一通りアップグレードしておきます
$ sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y

# 標準的な開発ツールをインストール
$ sudo apt install build-essential dkms linux-headers-$(uname -r) -y

# Zephyrに係るツールをインストール
$ sudo apt install --no-install-recommends git cmake ninja-build gperf   ccache dfu-util device-tree-compiler wget   python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file   make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1

# Pythonの仮想環境ツールをインストール
$ sudo apt install python3-venv

# ここまでにインストールした主なツールの、バージョンの確認です
$ cmake --version
cmake version 3.28.3
$ python3 --version
Python 3.12.3
$ dtc --version
CMake suite maintained and supported by Kitware (kitware.com/cmake).
Version: DTC 1.7.0

ここからは、作業ディレクトリで進めます。

本記事では~/gitwork/以下に作っていきます。

ここからのインストールではかなりまとまった分量のダウンロードが続きますので、おおよそ30分程度を目安に時間を取っておいてください。

# プロジェクトのディレクトリを作成
$ cd
$ mkdir -p ~/gitwork/zephyrproject
$ cd !$

# 仮想環境を準備します
$ python3 -m venv .venv
# 仮想環境に入ります
$ source ./.venv/bin/activate

# Zephyr開発に必要なパッケージをインストール
# west の引数の -v の連続は、途中のメッセージを細かく表示してくれます。
# 不要の場合は無しで構いません
$ pip install west
$ west -v -v init
$ west -v -v update
$ west zephyr-export
$ west packages pip --install

# zephyrproject/zephyr ディレクトリに移動して
# Zephyr SDKをインストール
$ cd zephyr/
$ west sdk install

対応しているマイコンボードの一覧を確認できます (途中省略しています)

RaspberryPi、microbit、最近のArduinoなども表示されています。

$ west boards | sort
・・・
arduino_opta
arduino_portenta_h7
arduino_uno_r4_minima
arduino_uno_r4_wifi
・・・
bbc_microbit
bbc_microbit_v2
・・・
rpi_4b
rpi_5
rpi_pico
rpi_pico2
・・・

3.ビルド・RaspberryPi PICO2で実行

まずはLEDの点滅のサンプルを、ビルドしてみます。

$ west build -p always -b rpi_pico2/rp2350a/m33 samples/basic/blinky

-- west build: making build dir /home/myasu/gitwork/zephyrproject/zephyr/build pristine                                 
-- west build: generating a build system                                                                                
Loading Zephyr default modules (Zephyr base).                                                                           
・・・
[3/136] Generating include/generated/zephyr/version.h
-- Zephyr version: 4.0.99 (/home/myasu/gitwork/zephyrproject/zephyr), build: v4.0.0-2792-gee250a11ce50
[136/136] Linking C executable zephyr/zephyr.elf
Memory region         Used Size  Region Size  %age Used
 IMAGE_DEF_FLASH:          28 B        128 B     21.88%
           FLASH:       15880 B    4194048 B      0.38%
             RAM:        3968 B       520 KB      0.75%
        IDT_LIST:          0 GB        32 KB      0.00%
Generating files from /home/myasu/gitwork/zephyrproject/zephyr/build/zephyr/zephyr.elf for board: rpi_pico2
Converted to uf2, output size: 32768, start address: 0x10000000
Wrote 32768 bytes to zephyr.uf2

ビルドの所要時間は数分程度です。

ビルドが終わると、こちら↓にファームウェアが出来上がっています。

zephyrproject/zephyr/build/zephyr/zephyr.uf2

$ ll /home/hoge/gitwork/zephyrproject/zephyr/build/zephyr/zephyr.uf2
-rw-rw-r-- 1 hoge hoge 32768 1231 22:50 zephyr.uf2

# ファイルの構成
$ file !$
zephyr.uf2: UF2 firmware image, family 0xe48bff57, address 0x10000000, 64 total blocks

このファイルを、RaspberryPi PICO2に書き込みます。

  1. RaspberryPi PICO2基板の「BOOTSEL」ボタンを押しながらパソコンにUSB接続
  2. RaspberryPi PICOがUSBマスストレージとして認識される
  3. 先ほど作ったファイルzephyr.uf2を、RaspberryPi PICOにコピー

コピーが終わると、LEDの点滅を開始します。

次に、ソースコードを修正して、LEDの点滅速度を変えてみます。

こちらにソースファイルがあります。

点滅間隔を指定しているdefine文の値を書き換えます。 ここでは0.5secとします。

#define SLEEP_TIME_MS   500    // ←1000から書き換え

再度、ビルドして、出来上がったuf2ファイルを書き込みます。

$ west build -p always -b rpi_pico2/rp2350a/m33 samples/basic/blinky

点滅速度が速くなったことを確認できます。

(動画)

4.補足・失敗ケース

チュートリアルを進める中で、引っかかったところの処置の覚え書きです。

Windows上での開発は避けた方が良さそう

  • ドキュメント見ると丁寧に解説はされてますが、開発環境のインストールがUNIX系のほうが楽そうです・・・

CMake Error ... Board qualifiers /rp2350a for board rpi_pico2 not found

-bオプションのあとに付ける、ターゲット・マイコンボードの指定は、west boardsの一覧で出てきた名称そのままでは下記のエラーが出ます。

$ west build -b rpi_pico2 samples/basic/blinky

CMake Error at /home/hoge/gitwork/zephyrproject/zephyr/cmake/modules/boards.cmake:304 (message):
  Board qualifiers `/rp2350a` for board `rpi_pico2` not found.  Please
  specify a valid board target.

  Valid board targets for rpi_pico2 are:

  rpi_pico2/rp2350a/m33

Call Stack (most recent call first):
・・・

どうやらマイコンの詳細まで指定が必要なようです。 このエラーが出るときに、書き方も説明してくれるので、それに従います。↓

rpi_pico2rpi_pico2/rp2350a/m33

参考資料