モダンOSのお砂場(7) FreeRTOS kernelとAmazon FreeRTOS

JosephHalfmoon

前回、FreeRTOSの話をちょっと書かせていただきました。ただし、”FreeRTOS”といえば、まっさきに喧伝されている感のある Amazon AWSとの連携、Amazon IoTサービスといった話はまったくでてきませんでした。これは、別に無視していたわけでなく、FreeRTOS.ORGから入っていくと各種のマイコン、それもかなりリソースの限られたマイコンからでも利用可能な汎用のRTOSとしてのFreeRTOSのカーネルが中心であるためです。AmazonのIoT向けサービスなどの連携などを調べようとしたら、また、別なところへ行かなければならないようです。

※「モダンOSのお砂場」投稿順Indexはこちら

さて、Amazon FreeRTOSにアクセスしようとしたら、まずGitHubのこちらのページに行くことになると思います。そして、Amazon FreeRTOSには、しっかり日本語ページや日本語ドキュメントも存在します。日本語のページへのリンクはこちら。

Amazon FreeRTOS

前回、FreeRTOS.ORGのページを見て、Amazon傘下に入ったにしては「ぜんぜんAmazon風じゃない」みたいなことを書いてしまいましたが、上記のページはもろAWS、まさにAmazon風なページです。

同じOSにいわば「2つの入口」があり、こうもテイストが違うと戸惑うのですが、FreeRTOSのカーネルそのものは、同じものであるようです。元からあるFreeRTOS.ORGの方は、カーネルを中心としたコアな部分と、各種マイクロコントローラへのポーティングなど、クラウド環境との連携を考えなくても使える汎用かつベーシックな部分を扱っており、一方、Amazon FreeRTOSの方は、同じカーネルの上で動作するといっても、クラウド環境への接続が必要な(当然IoTメイン)「拡張された」環境を扱う、ということのようです。

FreeRTOS.ORG側から頂いて来た(配布はsourceforge.netから)ソース内を見るとカーネルに加えて、TCP/UDPなど一般的なインターネット通信に必要なソース群も一応含まれているのです。しかし、Amazon FreeRTOS側で拡張されているAWS(クラウド)との連携、WiFi、BLEなどの通信などは含まれていないように見えます。

「モダン」OSとしては、拡張部分を含むAmazon FreeRTOSだよね

と思いつつ、やっぱり基礎となるRTOSとしてのFreeRTOS kernelも一通りは理解しておきたい…と思います。世にRTOSはいろいろあれど、

  1. RTOS屋さんの商用/有償なRTOS、ソース非公開
  2. RTOS本体ソースは公開、しかし各種MCUへのポートはRTOS屋さんの商用
  3. RTOSのカーネルから各種MCU向けポートまで公開

だいたい上の3分類くらいかと思います。1の範疇には、高機能、高性能の有名どころの商用RTOSがいくつもあります。しかし、ちょっと「遊んでみる」みるには敷居が高いです。OSの使用料だけでなく、開発用のツールチェーンも大抵は有償かと思います。そのかわり、OSやツールのプロが「足場を構築」してくれている上で開発をスタートできる(付属文書も膨大だあ)ので、お客はRTOSの上で動作するアプリ側の開発に専念(OSのことなど実は良く知らなくても)できる、というわけです。当然、著作権的な処理も問題なし。

2のケースは「MCUに依存しない」共通部分のソース(カーネル)は公開されていて、基本的なツールチェーンはgccなどだったりもしますが、各種MCUへの対応は、RTOS屋さん毎の個別対応(当然有償、その代わり著作権的にもクリア)というケースです。一般的なところはコード読めば分かるのだけれど、いざ実機で動かそうとすると、お金払えばやってもらえる、自力でやるのはかなり辛い(下手にフリーなライブラリなど使ってしまうと、商用にはマズイことになる)、という感じじゃないかと思います。

FreeRTOSについては、第3のカテゴリかと考えます。カーネルから、主要なMCUへのポーティング対応まで公開されています。多くのポーティング例を参考にすればFreeで(ライセンスはMIT、ありがたい)、実機で動作する環境が容易に使えるようになる、と。この辺は「モダンOS」の条件の一つと言えるかもしれません。

さて、FreeRTOS kernelに戻ります。付属文書によるならば、kernelはたった3つのソースファイルのみが必須とあります。

  • list.c
  • queue.c
  • tasks.c

実際には、3つではタイマも使えないので、4から7つくらいがカーネルの基本セットになるのじゃないかと思われます。それでもファイル数は少ない。見たところ規模的にも大した量じゃありません。これに加えてハードウエアとのインタフェースのためにポーティングのための1ファイル、でカーネル完成。全般的にフットプリントが小さいものが多いRTOSですが、その中でも結構コンパクトで、リソースの小さなMCUにまで搭載できるじゃないかと思います。FreeRTOS.ORGルートは、いっちゃ悪いですが『単なる組み込み汎用』RTOSとして十分競争力のあるルートに見えます。

それに対して、Amazon FreeRTOSの方は、IoTクラウドへの連携がメインなので、無線でも有線でもネットワークへの接続が必須に見えます。よって「デモ」の対象ハードもちょっと高級。かつそのための各種ソフトウエアが「積み重なって」いるので、ソフト的にもミニマムなRTOSとしての実装からは1桁以上違うリソース(といっても、PCやスマホに比べたら遥かに軽いのではないかと思います)が必要になりそう。根は同根だけれども、使い道次第で、大分違いがある感じ。

ぼちぼちとkernelから調べてまいりますか。

モダンOSのお砂場(6) FreeRTOS、Windows上で練習 へ戻る

モダンOSのお砂場(8) M5StickV、micropython へ進む