Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ZephyrRTOSで遊ぼう!
Search
soburi
October 04, 2023
Technology
840
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ZephyrRTOSで遊ぼう!
soburi
October 04, 2023
More Decks by soburi
See All by soburi
Community Activities In Japan
tokitahiroshi
0
110
ZephyrでWASMを動かして起きる色々なこと
tokitahiroshi
0
240
OSSJ CFP提出反省会
tokitahiroshi
0
190
Zephyr RTOS Tutorial & MeetUp @ OSC2025Tokyo/Spring 駒澤大学種月館
tokitahiroshi
1
1.1k
ZephyrRTOSざっくり入門
tokitahiroshi
4
1.4k
ZephyrRTOSざっくり入門#2
tokitahiroshi
3
320
The_Features_of_ZephyrRTOS_and_the_project_operations.pdf
tokitahiroshi
1
130
KiCad 8.0 出ました。
tokitahiroshi
0
460
小江戸らぐ2024/2
tokitahiroshi
0
200
Other Decks in Technology
See All in Technology
AI ネイティブな組織に Gemini Enterprise Agent Platform がなぜ必要なのか
asei
1
190
第3回しろおびセキュリティスポンサーセッション
log0417
0
160
取引先から届く 「セキュリティチェックシート」の読み解き方
kamadamakoto
0
140
【CEDEC2026】コードレビュー支援ツール開発から学ぶ:LLMを用いた業務システムの実践的な運用設計と誤出力対策
cygames
PRO
0
630
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
120
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.8k
20260804_Q4AzureUpdateBite_FabricDataAgentの精度を高める設計.pdf
matayuuu
1
120
変化の早いClaude Codeを 書籍に落とし込む
oikon48
7
1.3k
クラウドセキュリティ入門 ~安全なクラウド利用のための基礎知識~
lhazy
12
8.4k
MIRU 2026 チュートリアル
keisuke198619
0
870
【CEDEC2026】専門性の高いデフォルメチームが挑んだ人材育成戦略 〜Cygames Academiaの企画から実施まで〜
cygames
PRO
0
530
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
1
450
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
630
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Exploring anti-patterns in Rails
aemeredith
3
460
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
How to build a perfect <img>
jonoalderson
1
5.9k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
340
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
GitHub's CSS Performance
jonrohan
1033
470k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
460
So, you think you're a good person
axbom
PRO
2
2.1k
Transcript
ZephyrRTOSで遊ぼう! 富士通株式会社 インフラストラクチャシステム事業本部 データセンタ事業部 Linuxアプライアンス技術部 常田 裕士 2023/9/29 Japan Technical
jamboree EPII Session#1 © 2023 Fujitsu Limited 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
本日のアウトライン ⚫ZephyrRTOSについて ⚫ZephyrRTOSを動かしてみる ⚫ZephyrRTOSのLinuxっぽいところ ⚫学び © 2023 Fujitsu Limited 3
ZephyrRTOSについて © 2023 Fujitsu Limited 4
ZephyrRTOS ⚫ LinuxFoundationが開発を推進している組み込み向け のRTOS。 もともとはWindRiverが作っていた。(素性が良い。) ⚫ LinuxからKconfigとDeviceTreeの仕組みを借りてきて いる。 他にもいろいろLinuxにAPIなどは似せようとしている。 ⚫
POSIX互換レイヤーもある。 ⚫ 「組み込み用のLinux」と言っても当たらずとも遠から じ、みたいな雰囲気。 ⚫ 最近はNordic Semiconductorさんが自社の開発環境に 組み込んで開発を推進している。(自社製品のメインの 開発環境にしている) 画像は https://ja.wikipedia.org/wiki /Zephyr_(オペレーティングシ ステム) より © 2023 Fujitsu Limited 5
成長中 ⚫ ソースコード公開してから順調にソースもコミュニティも成 長している。 ⚫ 海外での注目度に比べて、国内でのプレゼンスが低い感じは する。 ⚫ 最近は車載系向けの機能安全やMISRA-C準拠も進んでいる。 (グラフはhttps://openhub.net/p/zephyrprojectより)
© 2023 Fujitsu Limited 6
Zephyrの主要スポンサー ⚫プラットフォーム企業、半導 体ベンダーを中心に豪華メン バーが集まっている。 ⚫ (画像はhttps://www.zephyrproject.org/project- members/より © 2023 Fujitsu
Limited 7
ZephyrとChromebook ⚫ChromebookのIO制御回り にZephyrが使われている ⚫実はこれもOSSで Chromebook EC(Embedded Controller) としてソース公開されている ⚫おそらくは一番エンドユー ザー利用数の多いZephyrの
利用事例 ⚫ ChromeOS's Embedded Controller - Zephyr Project © 2023 Fujitsu Limited 8
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
Zephyrについてちょっとした雑感 ⚫ コミュニティはEU圏中心。何よりNordic semiconductorが強力にコミット。 ⚫ 東欧圏も多い。宇露戦争の報道で聞くポーランドの街もgithubのプロフで見かけ る。 ⚫ STのLeMansの拠点がコミット多くて、24耐のイメージから車載頑張ってそうな 印象。
⚫ 米国はIntelが中心。Google/Metaの人も主力コミッタに。 ⚫ コミュニケーションはGithub/Discordが多い。この辺は若手入りやすそうな印象。 ⚫ 日本/アジア圏は少なめ。Githubで簡単にPR出せるのでみんなやろう。 © 2023 Fujitsu Limited 10
ZephyrRTOSを動かしてみる © 2023 Fujitsu Limited 11
Cooking Recipe 1. ボードとデバッガを用意する 2. コンパイラをインストールする 3. West コマンドを用意する 4.
ビルドする 5. ファームを焼く/デバッグする © 2023 Fujitsu Limited 12
サポートしているボード ⚫現在500種類以上のボードをサポート ⚫スポンサーとなっているNordicSemi, NXP, STのボードが比較的充実している。 ⚫廉価に入手できるRaspberry Pi Picoもサポート ⚫コミュニティベースのサポートのため、動きは若干ゆっくり (私がやってます)
⚫最近中国で色々出ている廉価なRISC-Vチップも ⚫M5Stamp C3 などで使っている Espressif ESP32-C3 ⚫第一世代の Chinese RISC-V ChipのGigaDevice GD32V (私がやりました) © 2023 Fujitsu Limited 13
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
West flash/debug ⚫Zephyrではどのボードでも west flash のコマンドでファームの書 き込み、west debugでgdbによるデバッグが行える。 ⚫どのボードでも使い方が統一されているので、 「JTAGのデバッガをつなぐのに3日かかった!」
ような不幸な事故を撲滅 # どんなボードでも共通でflash/debugできる west flash # ファームの焼きこみ west debug # gdbでデバッグ © 2023 Fujitsu Limited 15
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
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
ZephyrRTOSのLinuxっぽいところ © 2023 Fujitsu Limited 18
ZephyrRTOS=組み込み向けLinux? ⚫ZephyrRTOSではLinuxに強く影響を受けた仕組みが色々ある。 ⚫printk をはじめ、関数、APIの名前が同じ、もしくは「それっぽい」 ⚫Kconfigがある。(MakefileはCmakeに変わっている) ⚫DeviceTreeがある。 ⚫ユースケースとしては、昔のucLinuxに近い?! ⚫メモリ管理なしだが、TCP/IPを使いたい。 © 2023
Fujitsu Limited 19
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
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
デモ © 2023 Fujitsu Limited 22
デモ ⚫ 自作の評価ボードもってきました。 ⚫ 現在レビュー中のPullRequestのデ モ(動作確認?)を後ろで動かして ます。 ⚫ RPI PICO
のPIOを使ったWS2812点灯 ⚫ SH1107 OLEDドライバのモジュール ⚫ U8g2のZephyr移植 © 2023 Fujitsu Limited 23
Arduino UNO R4 対応 ⚫ 現在鋭意開発中! ⚫ こちらも後ろでLチカのデモします ⚫ RenesasさんのR-Carは
Zephyrではフランスの iot.bzhさんが色々 コミットされてます。 ⚫ これが通るとたくさんドライバ コミットできますw 興味ある人はコミットしよう! © 2023 Fujitsu Limited 24
© 2023 Fujitsu Limited Thank you