Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ZephyrRTOSで遊ぼう!

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for soburi soburi
October 04, 2023

 ZephyrRTOSで遊ぼう!

Avatar for soburi

soburi

October 04, 2023
Tweet

More Decks by soburi

Other Decks in Technology

Transcript

  1. 自己紹介 ⚫常田 裕士 ⚫富士通で組み込みLinuxの開発をやっています。 昔は携帯電話(Feature Phone、いわゆる「ガラケー」)、 今はカーナビ関連(車載Linuxサポートなど) ⚫KiCadで雑に基板を作るチュートリアル (v6.0予習版) https://speakerdeck.com/tokitahiroshi/kicaddeza-niji-ban-wozuo-

    rutiyutoriaru-ver6-dot-x-yu-xi-ban ⚫インターフェース誌 2022年6月号 第2特集 C/C++でPython拡張 第1部 ハードウェア効率化…C/C++で拡張モジュール作り https://interface.cqpub.co.jp/magazine/202106/ © 2023 Fujitsu Limited 2
  2. ZephyrRTOS ⚫ LinuxFoundationが開発を推進している組み込み向け のRTOS。 もともとはWindRiverが作っていた。(素性が良い。) ⚫ LinuxからKconfigとDeviceTreeの仕組みを借りてきて いる。 他にもいろいろLinuxにAPIなどは似せようとしている。 ⚫

    POSIX互換レイヤーもある。 ⚫ 「組み込み用のLinux」と言っても当たらずとも遠から じ、みたいな雰囲気。 ⚫ 最近はNordic Semiconductorさんが自社の開発環境に 組み込んで開発を推進している。(自社製品のメインの 開発環境にしている) 画像は https://ja.wikipedia.org/wiki /Zephyr_(オペレーティングシ ステム) より © 2023 Fujitsu Limited 5
  3. ZephyrとXen ⚫ Xenの特権ドメイン(Dom-0)に Zephyrを使おうという動きがある。 ⚫ 通常はLinuxを使うが、機能安全認 証を目指したときにソースが大き すぎて大変、よりコンパクトな仕 組みでVirtualizationができる環境 を作りたい、という流れ。

    ⚫ LinuxFoundation関連では、 Zephyr/Xen/Elisaが機能安全の文 脈で相互に連携する動きがある。 ⚫ https://wiki.xenproject.org/wiki/Xe n_ARM_with_Virtualization_Extensi ons_whitepaper © 2023 Fujitsu Limited 9
  4. Zephyrについてちょっとした雑感 ⚫ コミュニティはEU圏中心。何よりNordic semiconductorが強力にコミット。 ⚫ 東欧圏も多い。宇露戦争の報道で聞くポーランドの街もgithubのプロフで見かけ る。 ⚫ STのLeMansの拠点がコミット多くて、24耐のイメージから車載頑張ってそうな 印象。

    ⚫ 米国はIntelが中心。Google/Metaの人も主力コミッタに。 ⚫ コミュニケーションはGithub/Discordが多い。この辺は若手入りやすそうな印象。 ⚫ 日本/アジア圏は少なめ。Githubで簡単にPR出せるのでみんなやろう。 © 2023 Fujitsu Limited 10
  5. Westコマンド ⚫Pythonのpipでインストールできるzephyrの万能ナイフコマンド ⚫Zephry=Zephyros(ギリシャ語の西風)なのでwest. ⚫GitHubのghのように、最近のクラウドを意識したコマンドライン のフロントエンド。 # こんな感じで打つとビルドができる。 mkdir newproj; cd

    newproj python3 –m venv .venv # 最近のubunutはvenv必須… source .venv/bin/activate # venv有効化 pip3 install west # westをインストール west init # zephyrの初期化。 west update # 関連リポジトリのDL。とても大きい… west build –b rpi_pico samples/hello_world # -bでボードを指定する © 2023 Fujitsu Limited 14
  6. Hello World! を見てみる #include <stdio.h> int main(void) { printf("Hello World!

    %s¥n", CONFIG_BOARD); return 0; } ⚫純粋なHello worldが使えるので、組み込み固有のノウハウを持っ ていなくてもスタートできる。 ⚫Lチカではなくhello worldが1st step。 組み込みというよりもLinux寄りの文化性がある。 © 2023 Fujitsu Limited 16
  7. Lチカを見てみる int main(void) { gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE); while (1) { gpio_pin_toggle_dt(&led);

    k_msleep(SLEEP_TIME_MS); } return 0; } ⚫だいたいArduinoを使う感覚で使える。 ⚫DeviceTree, Kconfigの設定が見えてしまうと若干お作法が必要。 © 2023 Fujitsu Limited 17
  8. DeviceTreeとソースコードとの連携 ⚫ DeviceTreeはもともとLinuxの仕組み。 ⚫ARMの無秩序なパッチが多くて、Linus氏がブチ切れて導入された…と記憶 ⚫https://srad.jp/story/11/06/22/0911201/ ⚫ デバイスの依存関係を専用の言語で記述して、実行時に解決する仕組み。 ⚫依存性注入の手法。結果、ドライバとデバイスが依存しなくなる。 ⚫ ZephyrRTOSでは、DeviceTreeはビルド時にC言語のマクロとして展開さ

    れる。 ⚫ RTOSの場合、メモリはstaticに確保するのが原則。(mallocが無いかもし れない) マクロに展開されたDeviceTreeの情報を使って、デバイス毎のデータ領域 を静的に確保するのがZephyrのドライバのお作法。 ⚫ここだけ抑えれば、ドライバはただの関数の集まり。 © 2023 Fujitsu Limited 20
  9. DeviceTreeからマクロが生成される ⚫ Zephyrのビルドの過程で DeviceTreeのファイルから devicetree_unfixed.hのヘッ ダファイルを生成する ⚫ 専用のマクロ群で簡単に扱え るようになっている。 ⚫

    マクロ自体は複雑。 エラー出るとデバッグは面倒。 dts/riscv/gigadevice/gd32vf103.dtsi から抜粋、編集 / { soc { usart0: serial@40013800 { compatible = "gd,gd32-usart"; reg = <0x40013800 0x400>; interrupts = <56 0>; interrupt-parent = <&eclic>; rcu-periph-clock = <0x60e>; status = “okay"; label = "UART_0"; }; usart1: serial@40004400 { compatible = "gd,gd32-usart"; … 生成された devicetree_unfixed.h #define DT_N_S_soc_S_serial_40013800_PATH "/soc/serial@40013800" #define DT_N_S_soc_S_serial_40013800_FULL_NAME "serial@40013800" #define DT_N_S_soc_S_serial_40013800_PARENT DT_N_S_soc #define DT_N_S_soc_S_serial_40013800_CHILD_IDX 3 … © 2023 Fujitsu Limited 21
  10. デモ ⚫ 自作の評価ボードもってきました。 ⚫ 現在レビュー中のPullRequestのデ モ(動作確認?)を後ろで動かして ます。 ⚫ RPI PICO

    のPIOを使ったWS2812点灯 ⚫ SH1107 OLEDドライバのモジュール ⚫ U8g2のZephyr移植 © 2023 Fujitsu Limited 23
  11. Arduino UNO R4 対応 ⚫ 現在鋭意開発中! ⚫ こちらも後ろでLチカのデモします ⚫ RenesasさんのR-Carは

    Zephyrではフランスの iot.bzhさんが色々 コミットされてます。 ⚫ これが通るとたくさんドライバ コミットできますw 興味ある人はコミットしよう! © 2023 Fujitsu Limited 24