Slide 1

Slide 1 text

ZephyrRTOS ざっくり入門 常田 裕士 秋葉原ロボット部 第147回勉強会 @ 秋葉原 ロボスタディオン

Slide 2

Slide 2 text

自己紹介  常田 裕士  1978年生まれ  2001年日本大学理工学部物理学科卒業、 同年、株式会社富士通プログラム技研入社、現在富士通に所属 携帯電話、車載機開発を経て現在は組み込みLinuxサポートを担当  2018年よりZephyrRTOSへのコミットを始める。 現在Renesas RA、RaspberryPi Pico, GD32, LED Stripのメンテナ/副メンテナを担当  掲載記事等  トランジスタ技術 2024年 9月号 (今月号!) オリジナルArduino互換! KiCadプリント基板作り入門  インターフェース 2021年 6月号 第2特集 C/C++でPython拡張 第1部 ハードウェア効率化…C/C++で拡張モジュール作り  https://www.slideshare.net/slideshow/kicad-53622272/53622272 これ見てくれた方も居られるかも? © 2024 Fujitsu Limited 2

Slide 3

Slide 3 text

Zephyrの概要 © 2024 Fujitsu Limited 3

Slide 4

Slide 4 text

Zephyrの特徴  オープンソースのリアルタイムOS  ArduinoとかESP32など主に「Linux が動かない」領域  軽量 (メモリ/フットプリントが小さい)  BluetoothやMatterなど、IoTの分野に強 い  メカの制御にも使える  対応しているSoC、開発ボードが非常に多 い  POSIX対応をはじめとして多機能  OSとしてHALを定義している © 2024 Fujitsu Limited 4

Slide 5

Slide 5 text

Zephyros (en:Zephyr)  名前はギリシア神話の西風の神Zephyrosの英語読みから © 2024 Fujitsu Limited 5 この人が ゼファー

Slide 6

Slide 6 text

誰がどこでZephyrを使ってる? #1  Google Chromebook の電源・ボタン制御  電源回りのハードウェアの インターフェースを統一して 汎用的に使えるようにしている。  メインのCPUでは動いていない。  システムのスキマを埋めている © 2024 Fujitsu Limited 6 メインのCPU Zephyrでデバイ スを制御してい る

Slide 7

Slide 7 text

誰がどこでZephyrを使ってる? #2  ZMK  カスタマイズ性に優れた、自作キーボード向けのファームウェア。  Bluetoothのサポートに利用している。 © 2024 Fujitsu Limited 7

Slide 8

Slide 8 text

誰がどこでZephyrを使っ てる? #3  ロボット・宇宙開発  札幌のSpaceCubicsさんが、福島第一原発の 廃炉ロボット、CubeSat(超小型人工衛星)へ の利用を行っている。  ROS2と合わせて活用とのこと  この方面だとZenohの通信プロトコルなども 注目。 © 2024 Fujitsu Limited 8

Slide 9

Slide 9 text

誰がどこでZephyr を使ってる? #4  電子工作  Mbed OSがEOLとなるため、 Zephyrへ移行する。 The end of Mbed marks a new beginning for Arduino | Arduino Blog  実はZephyr向けのArduino API実装は元コンセプトと 現実装の半分くらいを私が 作成している。(その後、 Google Summer of codeで 進めてもらっている) © 2024 Fujitsu Limited 9

Slide 10

Slide 10 text

ネットワーク(Connectivity)が強い  Bluetooth  Bluetoothの「盟主」のNordic Semiconductorが精力的にコミット  TCP/IP  OSにインテグレートされて「第1級」のサポートとなっている点がLWIPよりも優位  Matter/OpenThread  スマートホームもBluetooth同様手厚い  ModBus  FA系も通信規格もスコープに入っている。  CANBUS  もちろん車載も © 2024 Fujitsu Limited 10

Slide 11

Slide 11 text

個人的に注目しているトピック  XenのDOM-0/DOM-Dへの Zephyrの適用  Xenでドライバ機能を提供す るOSをLinuxからZephyrに差 し替える。  機能安全では、レビューに よる検証が必要で、Linuxの 規模だと対応が難しいが Zephyrだと実現が視野に入 る。  RPi5のサポートに合わせて Xenの開発者が動きだしてい る。 © 2024 Fujitsu Limited 11

Slide 12

Slide 12 text

westコマンド © 2024 Fujitsu Limited 12  Zephyrの総合的なフロントエンドを提供するコマンド  Zephyrの操作はほぼすべてこのコマンド経由で実行する  以前はcmake & ninjaを直接使っていたが、全部west経由に。  いまではZephyrの特徴の一つと言えるほどプロセスの中核に居 座っている  GitHubのghコマンドやVueやflutterのコマンドなど、 Web系の文脈から見ると自然な導入に見える  Zephyrは組み込みの文脈だけがルーツとなっていない!

Slide 13

Slide 13 text

DeviceTree  DeviceTreeはZephyrを特徴づける最大の要素  「汎用RTOS」であるため、カーネルの基本機能で強い「色」はついていな い。  Linuxと違って、DeviceTreeを静的にコンパイルして組み込む。  組み込み用途で必要なフットプリント最小化と、 実装と構成の分離を同時に実現している。  このトレードとして、 大変煩雑なC言語のマクロの記述が必要になる  このpros/consのトレードの判断こそが Zephyrを特徴づけている © 2024 Fujitsu Limited 13

Slide 14

Slide 14 text

Version 4.0.0  デバイスのAPI追加  コンパレーターAPIの追加。つまりコレ→ のAPI。  地味ながら、STM32とか持っているマイコンは 多い  ステッピングモーターAPI  メカ回りに。  ハプティクス  体感系の諸々のデバイス向けの統合API  マルチメディアサポート  ESP32でのカメラのサポートなど + -

Slide 15

Slide 15 text

Zephyrをはじめる

Slide 16

Slide 16 text

今回はNucleoで  入手しやすい。(皆さん、部品箱探せば一つぐらいある?)  USBケーブル1本で全部動く。  ツブシが利く。(Arduinoがサポートされているので、すで にArduinoで動作実績あるもののドライバ開発とかに便利) 16

Slide 17

Slide 17 text

Raspberry Pi Picoも安くておすすめ。  私がメンテナなので手前味噌ながら。  Pico2は現在レビュー進行中  Raspberry Pi Debug Probeも用意する。  対応ボード一覧 https://docs.zephyrproject.org/latest/boards/index.html 17

Slide 18

Slide 18 text

Getting Started Guide  https://docs.zephyrproject.org/latest/develop/getting_started/index.html  これの手順をstep by stepで実行すれば「はじめの一歩」はクリアできる。  今回は、まずこれに従って環境構築、ビルド、実行、デバッグをやってみる。

Slide 19

Slide 19 text

環境設定(Windows) #1  Windowsの場合はWSLを使うのが便利。  コントロールパネル→プログラム→Windowsの機能の有効化または無効化  Windows StoreよりUbuntuをインストール

Slide 20

Slide 20 text

環境設定(Windows) #2  WSL USB Manager  https://gitlab.com/alelec/wsl-usb-gui  USBデバイスのWSL環境への 接続・切断を行う。  コマンドラインで行ってもいいが、 これがあると敷居がかなり低くなる

Slide 21

Slide 21 text

環境のセットアップ  素直にGetting Started Guideに乗っかってaptの更新 sudo apt update sudo apt upgrade 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 python3-venv

Slide 22

Slide 22 text

Python仮想環境のセットアップ  これも指示通りに python3 –m venv ~/zephyrproject/.venv # venvを作成 source ~/zephyrproject/.venv/bin/activate # アクティベート pip install west # Zephyrの万能ナイフのwestコマンドをインストール west init ~/zephyrproject # zephyrのリポジトリをcloneする cd ~/zephyrproject west update # DL量を減らす場合はmanifestファイルを用意する west zephyr-export # Cmakeの設定 # pythonのモジュールのインストール pip install -r ~/zephyrproject/zephyr/scripts/requirements.txt

Slide 23

Slide 23 text

SDK(コンパイラ, etc)をインストール  引き続き、指示通りに このコマンド(west sdk)は私が作りました! これで、環境セットアップはおわり。 cd ~/zephyrproject/zephyr west sdk install # ARMだけなら –t arm-zephyr-eabi を指定する

Slide 24

Slide 24 text

サンプルをビルドする  Hello World サンプルは samples/hello_world にある。  以下のコマンドでビルドする (ボード名は環境に合わせる) west build -p -b nucleo_h503rb samples/hello_world/

Slide 25

Slide 25 text

書き込みのための設定  デバッガをつかえるようにudevのルールを追加  wget https://raw.githubusercontent.com/openocd- org/openocd/refs/heads/master/contrib/60-openocd.rules  sudo cp 60-openocd.rules /etc/udev/rules.d/  sudo udevadm control --reload-rules  つなぎ直す。  pyocdのプラグインを追加  boards/[使用しているボード]/board.cmake の board_runner_args(pyocd –target=”…”) で指定されているターゲットを確認  pyocd pack install [ターゲット] を実行

Slide 26

Slide 26 text

サンプルをビルドして書き込む  ここで、WSL USB Managerを使って、WSL側に デバイスを接続する  焼き込み & 実行は以下のコマンド  コンソールで出力を確認 west flash –-runner=pyocd screen /dev/ttyACM0 115200 ST-Link Debugを右ク リック、「Attach to WSL」で接続する

Slide 27

Slide 27 text

他のサンプルを試してみる  Lチカは samples/basic/blinky west build –p –b nucleo_f103rb samples/basic/blinky west flash –-runner=pyocd

Slide 28

Slide 28 text

デバッグする  デバッグもwestコマンドを叩くとコンソールのgdb が立ち上がる  gdbの簡単なコマンド  b: breakpoint を設定、b mainのようにしてみる。  c: プログラムの実行を継続  s: ステップ実行  n: 次の行まで実行 west debug

Slide 29

Slide 29 text

まとめ  ZephyrはオープンソースのRTOSで、NucleoやArduino, RaspberryPi Picoのよう なマイコンで使える。対応ボードはとても多い。  IoT向けの通信機能が充実しているが、メカの制御などの従来的な組み込み、 制御の用途にも使える。  westというコマンドで統一的な操作が行える。  ビルド、書き込み、デバッグなどの操作はwestコマンドで行える。 他のマイコンでも同じノウハウで扱える。  Arduinoの代替のようなイージーな用途でも十分にメリットがある。