この文章は、ZephyrRTOS Advent Calendar 2024 1の4日目のエントリとして書かれました。
はじめに
ZephyrRTOS 2が最近流行ってるらしいです。むとうのまわりでも流行ってきています。
ZephyrRTOSってなんなんでしょうか?
ちょっとむとうの考えをまとめてみましょう。
この文章は、あくまでむとうが思っているZephyrRTOSに関してのポエムです。偏見が入っていたりするかと思いますので、ご利用時は自分で調べてみてください。
そもそもRTOSってなぁに?
RTOSはReal Time Operating Systemの略です。
RTOSの基礎については、RTOS Fundamentals(FreeRTOS)3 などを読んでみてください。
マイコンを使うときに、リアルタイムに処理を行いたいことがあります。
このような場合に利用されるOSがリアルタイムOSです。
SoCのコアが一つの場合は、高速に処理を入れ替えることでマルチタスクを実現しています。
リアルタイムの処理も同様で、タスクの優先順位を与え、この順位に従ってタスクの変更を行なっています。
RTOSの例
むとうが聞いたことがあるフリーで利用可能なRTOSには、以下のようなものがあります。
各RTOSの特徴を簡単にまとめてみました。
OS | 開発元 | ライセンス | IPスタック |
---|---|---|---|
ZephyrRTOS | Linux Foundation | Apache 2.0 | 独自(BSD Socket like) |
FreeRTOS | AWS | MIT / 商用6 | LwIP7 (GNU) |
TOPPERS | TOPPERSプロジェクト(国産) | TOPPERS(独自)8 9 | TINET10 (独自:FreeBSD3.4由来) |
ZephyrRTOS
では、ZephyrRTOSについて見ていきましょう。
ZephyrRTOSの特徴
ZephyrRTOSの公式ページの情報を見てみましょう。
Overviewに関する良い資料としては、Zephyr Project Overview11 があります。
- 安全で、接続性に優れた、将来性のあるもの
- サイズが小さいが大きいシステムにも拡張可能
- 自由度が大きいが安全
- 接続性
- Ethernet, 802.15.4, Thread, LoRa, Bluetooth, CAN bus, …
- 独自実装のIPスタック(IPv6, IPv4, UDP, TCP, ICMPv4, ICMPv6)
- TLS, DTLS, MQTT, CoAP, HTTP, …
- 開発者による、開発者のためのもの: オープンソース(Apache 2.0ライセンス)
- 750以上のボード、多数のSoCをサポート: サポートボード一覧 12
- 色々なSoCで動作: ARM, STM32, nRF, ...
- 色々なボードで利用可能: M5Stackシリーズ, Raspberry Pi シリーズ, micro:bit, Seeed XIAOシリーズ, ...
- 既に色々な製品で利用: Zephyrが動いているプロダクト 13
ZephyrRTOSの開発環境
ZephyrRTOS開発環境を構築するためには、Getting Started Guide14 を参照してください。Ubuntu, macOS, Windowsでの環境構築に関して、解説されています。
SDKは、コンパイラ、ライブラリ、作業用のツール(meta-tool)west
などからなります。
本誌にも、いくつかの記事が開発環境を構築する話や実際にプログラムをビルドしフラッシュする話になっていますので、こちらも是非ご覧ください。
おわりに
ZephyrRTOSに関して、簡単に眺めてみました。
これからもどんどん利用されていくと思われますので、是非この機会にZephyrRTOSにチャレンジしてみませんか?
-
https://www.freertos.org/Documentation/01-FreeRTOS-quick-start/01-Beginners-guide/01-RTOS-fundamentals ↩
-
https://www.freertos.org/Documentation/02-Kernel/01-About-the-FreeRTOS-kernel/04-Licensing ↩
-
免責、著作権表示が必要、作成したデバイスの報告が必要 ↩
-
https://www.zephyrproject.org/wp-content/uploads/2024/12/Zephyr-Overview-20241203.pdf ↩
-
https://docs.zephyrproject.org/latest/develop/getting_started/ ↩