Open7

組み込みRTOS環境のRustアプリプラットフォームを作る

低レベルエンジニア低レベルエンジニア

最終的にやりたいこと

  • RustアプリをRTOS環境で構築するためのプラットフォーム的なものを作ること
    • 個別具体的なRTOSの仕様への依存性の少ない部分を切り出してどのRTOSでRustアプリが書ける環境
    • イメージとしてはAUTOSAR CP
      • RTOSをラッピングし周期タスクを複数、走らせる
      • どうしてもカリカリにチューニングしたい場合はOS依存性のあるシステムコールのRustラッパーを使用(移植性は犠牲)
    • このプラットフォームのメリットとしてはMCUベンダーのSDK(RTOS含む)とRustアプリを分離して簡単に組み込みソフトのRustアプリが開発できるようにする
    • 現状、MCUベンダーのSDKはほぼすべてC言語製でありRustのエコシステムが整ってないため、本プラットフォームが組み込みRust導入のエントリーとして価値があると考えている
      • ツールベンダーの場合、ビジネスモデル・ベンダロックイン等の関係からこの形のプラットフォームは実現できない(しない)可能性が高い
低レベルエンジニア低レベルエンジニア

RTOSを使う主な理由は

  • チューニングガチ勢
    • カリカリに実行順序を決めてリソースが少ない中で限界までリアルタイム性を引き出したい
  • とりあえずRTOS勢
    • そこまでRTOSのシステムコールをフル活用したいわけではないが、ベアメタルだと作るのが難しいしマイコンを乗せ換えるたびにあちこち修正しないといけなく、それを防ぎたい、ただ組み込みLinuxを使うにはリソースが足らない、MCUベンダのSDKを使いたい(その部分の責任を自分で持ちたくない)

のどちらかか両方であることが多い。

構想として考えているプラットフォームはその後者にフォーカスしたものである。

低レベルエンジニア低レベルエンジニア

RTOS(候補はFreeRTOSとTRON系)の中で共通化できそうな機能

  • 周期タスク関係
  • 固定長メモリプール管理
  • セマフォ・ミューテックス関係
  • 割り込み関係
  • デバイス管理

備考

  • その他のRTOS機能について
    • やろうと思えばメールボックスなども共通部分をくくりだせるかもしれないが、この部分は各RTOSの特色が出ている部分なので後回しで、RTOSのシステムコールを直にラップしたものを提供する
      • 移植性を犠牲にした非推奨部分
    • 基本的には組み込みμLinuxのローエンド版を志向
      • MCUベンダーのSDK(RTOS含む)の上に直乗せしてサクッとRustのアプリが書ける形
    • タスク間通信などは共有メモリをライブラリで管理する形で実現か?
  • Rust標準ライブラリ対応について
    • Rustで作る意味を出すためにもすべては無理でもある程度は標準ライブラリを使えるようにしたい
    • どこまでを対応するかは今後検討予定
低レベルエンジニア低レベルエンジニア

インターフェースに関しては

  • 独自仕様
  • PISIXライク(全部を搭載するのは無理なので一部を切り出す)

の2通りある。
コンセプトを考えると後者のほうが良いがPOSIXに詳しくないのでまずは前者で動かすことを優先する。

低レベルエンジニア低レベルエンジニア

ターゲットとしては

  • RISC-V(RV32系統)
  • Cortex-M/R

のベースのものを考えている(QEMU含む)。
Cortex-AやRV64系統に関してはストレートに組み込みLinuxを使うだろうし、上記のものよりリソースが小さいものはそもそもRTOSを搭載しないと考えているので。

低レベルエンジニア低レベルエンジニア

デバイス制御関係に関してはまずは動くことを優先して独自仕様で作るが将来的にはembedded-halに合わせこめるならそれを使っていきたい。