• 公開日:2024年09月30日
  • | 更新日:2024年10月01日

ルネサスサンプルMulti-OS Packageを動かしてみた

はじめに

最近、ヘテロコアによるプロセッサ製品が増えてきましたが、これらには異なるOSを搭載することがあります。しかし、異なるOSがどのように連携しているのかイメージがつかめていません。そこで、ルネサスエレクトロニクスのサンプルプログラムである、Multi-OS Packageを動かして、連携とはどのような動作なのかを見てみようと思います。

 

マルチOS

ルネサスエレクトロニクスでは、RZ/G2LやRZ/V2Lには、Armコアのうち、Cortex-A55とCortex-M33といった、ファミリの異なるコアを混載した製品が提供されています。これらの製品ではCortex-A55でLinux OS(以降Linux)を、Cortex-M33でリアルタイムOS(以降RTOS)を動作させる想定になっています。なぜ、1つのMPU(SoCと言った方がよいかもしれない)で2つのOSを動作させる必要があるのでしょうか?

そもそも、組み込みの分野では、OSなし(ベアメタル)や、ブート時間が短く、必要メモリ容量が小さなRTOSでの開発ができればよかったのです。しかし、近年MPUに求められることは、画像や音声のビジュアルデータの入力やグラフィックの出力、EthernetやBLE、Wi-Fi等のネットワーク通信、温湿度やLiDERなどのセンサ入力、モーター制御など、様々な機能・用途への対応が求められるようになりました。

ネットワークやグラフィックの分野では、Linux向けに作成されたOSS(オープンソースソフトウェア)が数多く存在し、ユーザーが多く、バグは出し尽くされ、信頼性も許容できると考える人も多くなりました。

このため、Linux資産を採用したいのですが、Linuxでリアルタイム処理を求めることは難しいのです。これらのことから、1つのMPUでLinuxとRTOSを共存させるマルチOSの需要が出てきました。

 

マルチOS間の通信

マルチOSの場合、異なるOS間で連携動作をさせる必要があります。そのための仕組みがMulticore Associationによって標準化されたOpenAMPです。AMPはAsymmetric Multi Processing(非対象マルチ処理)の事で、コア毎に異なるOSを起動できることを指します。このOpenAMPを使用することによりマルチコア、マルチOSを構成することができるようになります。

OpenAMPのコア技術はremoteprocとRPMsgです。

remoteprocはマスターであるLinuxからリモートのRTOSを制御するものであり、リモートの電源のオン・オフや、任意のファームウェアのロードができます。

RPMsgは、異なるOS間を動作させている、コア間の通信を行います。ユーザーは、マスター及びリモートに、エンドポイントと言うオブジェクトを作成し、このオブジェクトにコールバック関数を持たせます。送信はRPMsgのAPIである関数RPMsg_send()を用います。受信側では受信すると、指定されたコールバック関数が呼ばれます。

 

ルネサスMulti-OS Packageの動作

ルネサスエレクトロニクスは、RZ/G及びRZ/Vシリーズで、先述のOpenAMPによるMulti-OS Packageを提供し、RZ/G2Lでは、Cortex A55のLinuxをマスターとし、Cortex M33のRTOSをリモートとしています。

Multi-OS Packageの動作は次のようなものです。

マスターとリモート間で通信チャネルが確立されると、マスターはRPMsg_send()により、メッセージを送信します。メッセージを受信したリモートは、コールバック関数rpmsg_endpoint_cb0()を呼び出し、この関数の中でリモートはマスターへRPMsg_send()により、メッセージを送信します。更に、メッセージを受信したマスターは、コールバック関数rpmsg_service_cb0()を呼び出し、再びリモートへメッセージを送信します。このマスターとリモート間のメッセージのやり取りが、for文により規定回数繰り返されると、終了します。

この仕組みを知る前は、マスターが、リモートをコマンドで直接操作するのかと思っていましたが、違っていました。メッセージを受信したら、自分が何をするかをコールバック関数に記述しておくというイメージです。

 

まとめ

マルチコアの製品で、マルチOSを扱う場合があります。

マルチOSによる開発では、それぞれのOSで、それぞれのソフトウェアの開発が必要になります。独立したソフトウェアとして開発し、連携させるときには、OpenAMPのメッセージ通信の仕組みを利用します。

この仕組みは、一方のコアが、他方のコアを制御するという訳ではなく、メッセージを受信したコアが、自らの動作をコールバック関数で決めていました。

 

ルネサスエレクトロニクスMulti-OS PackageはルネサスエレクトロニクスのWebサイトからダウンロードできます。ソースコードの解読の一助となれば幸いです。

ルネサス
メーカーページはこちら