👋

[非推奨]ZephyrRTOSでSTM32マイコン再入門~WSLのUbuntuに環境構築~

に公開

追記(2025/09/22)

Zephyr公式の Getting Started のWindowsタブに思いっきりWSL上での環境構築は非推奨と書かれていた。

以下理由により、WSL上でのZephyr学習は中断し、Windows上に直接環境を構築することとする。

  • west flashでバイナリをマイコンボードに書き込んだ後にUSBを抜き差ししないとプログラムが実行されず、非効率。
  • 上記でUSBを抜き差しするたびにWSL USB ManagerでSTLinkをWSL側にアタッチする必要があり、非効率。

はじめに

以前、Zephyr RTOSに挑戦した痕跡はあったものの、Blinkyのサンプルコードをビルドしたところで止まっていた。
https://zenn.dev/gotoooo/scraps/742f900af82577

今回は改めて、WSL上でNucleoF103RBを使ってZephyrを動かす手順を整理しながら進める。

前提

  • ホストOS: Windows11
  • WSL上のOS: Ubuntu22.04
  • 使用するボード: NucleoF103RB Rev.C-03

環境構築手順

1. Zephyrのセットアップ

Zephyr公式の Getting Started に従って環境を構築する。

手順通りにセットアップできたところで、まずはBlinkyサンプルのビルドができるか確認する。

cd ~/zephyrproject/zephyr
west build -b nucleo_f103rb samples/basic/blinky

ビルドが成功すれば、バイナリが生成される。

2. WSLから書き込むための準備

WSL上ではUSBデバイスがそのまま使用できないため、ビルドしたバイナリを直接ボードに書き込むことができない。
そこでWSL USB Managerを使用して、ST-LinkをWSLにアタッチする。

https://gitlab.com/alelec/wsl-usb-gui/-/releases

NucleoF103RBはデフォルトでは書き込み時にSTM32CubeProgrammerが使用されるが、手順1.でインストールするSDKに標準で含まれていない。そのためOpenOCDを利用して書き込むこととする。

https://docs.zephyrproject.org/latest/boards/st/nucleo_f103rb/doc/index.html

OpenOCDでST-Linkにアクセスするために、udevルールをコピーする

sudo cp ~/zephyr-sdk-0.17.4/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules

3. WSLからの書き込み

OpenOCDを指定して書き込み。

west flash --runner openocd

書き込み後にオンボードのLEDが点滅することを確認する。

※ 筆者環境ではプログラム書き込み後にプログラムが実行されず、USB抜き差しで実行される挙動となった。本事象の解明&解決にも取り組みたい。

おわりに

WSL上のUbuntuにZephyrの環境を構築し、NucleoF103RBにサンプルのBlinkyをビルドして書き込むための手順をまとめた。
今後本シリーズでは、環境構築にとどまらず各種ペリフェラルを使うところまで踏み込みたい。

参考

https://speakerdeck.com/tokitahiroshi/zephyrrtoszatukuriru-men

https://qiita.com/Corgeek/items/f91831de947f8dde1d39

Discussion