OS と エッジデバイス
I と T のあいだ
- 「I」nternet
- 「o」f
- 「T」hings
の 「o」 は 「I」nternet と「T」hings の中間。
リアル世界では、「I」nternet と「T」hings の間にあるものはエッジデバイスとなる。
特にエッジデバイスのソフトウェアとして、簡単に作るなら例えば Arduino IDE などでファームウェアを作ることになる。
Arduino 開発環境はコンピュータソフトウェア開発という観点からはライブラリ集ぐらいの簡単なものだけれど、
リアルタム性とか、TCP/IP を使って立て込んだようなことをしようとしていると もうちょっと OS 的なものが欲しくなる。
IoT の OS
RaspberryPi などだと Linux が使われる。しかしながら Linux を動かすとなると メモリ64M とストレージ、仮想メモリ、ブートローダーやユーザ管理などをお膳立てしてあげないといけない。
エッジ側はなるべくライトウェイトな構成にしたいので、フルスペックの Linux は大げさすぎることが多い。
IoT エッジデバイスにおいての OS は、少ないリソースで動くものを使いたい。
RTOS
そういったもののうち、リアルタイム性能が優秀なものは RealTimeOS 、RTOS というジャンルのものがある。 リアルタイム性能は、逆に Linux では実現が難しかったりするのでそういったものを重視する場合には特に、RTOS が使われる。
お仕事と RTOS
RTOS としてはいろんなものがあり、多くはお仕事の道具という感じ。
- FreeRTOS
- Micrium μC/OS
- TI RTOS
- GreenHills Integrity
- WindRiver VxWorks
- ITRON
Zephyr RTOS
今回、 Zephyr RTOS を試しに使ってみて、紹介してみます。
上記に示したように RTOS はお仕事の道具的なニュアンスがありますが、Zephyr はホビーとしても、お気楽に使える感じです。
フリーでありある程度いろんなものにポートされていて、また作例も多く使いでがありそうです。
Zephyr の特徴
- オープンソース
- 軽量 簡単なマイコンの小さなフットプリントで動作
- 通信に強い
- POSIX 対応
- HAL がある
- Apatch 2.0 License
- Linux ファウンデーションの派生プロジェクトとして活動
- 割と大きな各企業が参加 https://www.zephyrproject.org/project-members/
- intel Atom プロセッサ内のリアルタイム管理の仕組みにも使用
- コンパレータのAPIがあるぞ
Zephyr RTOS と Linux の類似性
Linux ファウンデーションの派生という背景があるためか、Linux と似た概念がある。
- HALがある
- ドライバーの管理が容易
- 通信に強い
- OSS
- 多くのアーキテクチャに対応 (x86, ARM, RISC-V, 他)
などなど。
Zephyr RTOS と Linux の違い
しかしながら Linux とは何が違う? ということはあまり話題にはならない。今回は具体的な違いを。
リソース
Linux に必要なリソースは、最低限のメモリは数十MByte ぐらい。MMU が必要。ストレージとして数十MBytesは必要。
ZephyrRTOS は例として WCH 社の CH32V003 でも動作している。CH32V003 は RAM 2kBytes、ストレージに相当するプログラムメモリーは16KBytes。 MMUは必要ない。
https://qiita.com/nanbuwks/items/22680849ee7674d66a89
ハードウェアコスト
先のリソースに関連して、最小のハードウェアで実現できるもののお値段。
Linux:ワンチップでLinuxが動作できるような、プロセッサ、メモリ、フラッシュ内蔵もので、以前Linux名刺などで話題になった F1C100S SOCだと500円ぐらい。たくさん買うと300円ぐらい。
ZephyrRTOS:先に挙げた CH32V003 は50円。たくさん買ったら15円ぐらい。
OS を構成するファイル
- Linux はカーネル、ドライバ、シェル、アプリなど様々なファイルから成る。
- ZphyrRTOS は単一のバイナリのみで動作。
ブートローダー
- Linux は その他の GRUB や U-Boot などから呼び出される必要がある。
- ZphyrRTOS にはブートローダーが組み込まれている。
ユーザ
- Linux: マルチユーザ
- ZphyrRTOS: Linux と同じようなユーザの概念はなく、せいぜいセキュリティモデルによる区別ぐらい
ライセンス
- Linux: GPLv2
- ZphyrRTOS: Apache
ユーザーインターフェース
- Linux: GUIとしてデスクトップがあったり、CUIとしてログオンできたりする。
- ZphyrRTOS: ユーザ操作のためのUIはあるが、OSを操作するためのUIは無いことが普通。
用途
- Linux:割と高機能。画面表示やサーバー機能などが必要で Linux を用いるとメリットがある。センサ1つをクラウドに接続するだけなどの用途であれば Linux でもできるが、高い mcu を使うともったいなくなる。
- ZphyrRTOS:高機能にもできるけれども、例えば温度計1つをネットにつなぐだけ、というような用途でも安い mcu との組み合わせで威力を発揮。
開発コミュニティのコミュニケーションチャネル
- Linux:メーリングリスト
- ZphyrRTOS: GitHub や Discord
マスコット
- Linux:ペンギン
- ZphyrRTOS:凧
ほかに気づいていけば書き足していきます。