1.はじめに
リアルタイムOSのひとつであるZephyrの試行として、RaspberryPi PICO 2(RP2350)を対象に試してみます。
2.ビルド環境の準備
基本的には、上記公式の「Getting Started Guide」に従い、 Windows上のVirtualBOX上にインストールしたUbuntu Linuxに開発環境を作りながら進めて行きます.
本記事では、上記を進める中で細々引っかかった点などの気付きも含め、補完していきます。
(1)実行環境
- Windows版・Virtual Box Ver.7.1.4
- Ubuntu Linux 24.04
詳細
$ 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 12月 31 22:50 zephyr.uf2 # ファイルの構成 $ file !$ zephyr.uf2: UF2 firmware image, family 0xe48bff57, address 0x10000000, 64 total blocks
このファイルを、RaspberryPi PICO2に書き込みます。
- RaspberryPi PICO2基板の「BOOTSEL」ボタンを押しながらパソコンにUSB接続
- RaspberryPi PICOがUSBマスストレージとして認識される
- 先ほど作ったファイル
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
点滅速度が速くなったことを確認できます。
(動画)
RaspberryPi PICO2とZephyrでLチカしてみました。
— myasu (@etcinitd) 2024年12月31日
#大晦日ハッカソン pic.twitter.com/jjF7vaJmtk
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_pico2
→ rpi_pico2/rp2350a/m33