STM32MP1 マルチコア通信サンプル (stm32mp1_multicore_comm)

Other

概要

STM32MP157C-DK2を対象とした実例リポジトリで、Cortex‑M4側(リアルタイム側)が生成したデータをCortex‑A7側(Linux側)へ送信し、A7上で受け取ったメッセージを共有メモリへコピー、その後別アプリケーションが共有メモリからデータを取得して処理する一連の流れを実装しています。ttyRPMSGを用いたRPMsgベースのIPCと、remoteproc/OpenAMPの基本的な運用例、さらにYocto用のmetaレイヤやサンプルアプリ群が格納されており、組込みLinuxとM4ファームウェアの協調動作を学習・再現するのに適しています。(約300字)

GitHub

リポジトリの統計情報

  • スター数: 4
  • フォーク数: 0
  • ウォッチャー数: 4
  • コミット数: 8
  • ファイル数: 6
  • メインの言語: C

主な特徴

  • Cortex‑M4 → Cortex‑A7 間でのRPMsg(ttyRPMSG)によるメッセージ送受信サンプル
  • A7上で受信したメッセージを共有メモリにコピーし、別プロセスで処理するアーキテクチャ
  • Yocto向けmeta‑layer(meta-stm32mp)を含み、ビルド/展開のテンプレートを提供
  • サンプルアプリ群(stm-apps)と図解(images)で構成

技術的なポイント

本プロジェクトは、STM32MP1プラットフォーム特有の「ARM Cortex‑A(Linux)」と「Cortex‑M(リアルタイム)」の協調動作を実践的に扱っています。M4側はセンサやリアルタイム処理の代替としてデータを生成し、RPMsg(ttyRPMSGインターフェースを介した仮想デバイス)でA7にメッセージを送信します。A7側はremoteproc/openAMPスタック(Linuxカーネルのremoteprocサブシステムとrpmsgドライバ群)を利用してM4をブートし、ttyRPMSGデバイスノードを通じてユーザ空間のサーバプロセスがメッセージを受信します。受信したデータはプロセス間での効率的な受け渡しを目的に共有メモリ領域へコピーされ、別プロセス(あるいはスレッド)が共有領域をポーリング/通知で取得して処理を行う構成です。

設計上の注目点は以下です:RPMsgは低オーバーヘッドなVM/プロセス間通信を提供するため、短いメッセージや制御データのやり取りに有利。shared memoryの扱いではキャッシュ整合性(データ同期やメモリバリア)やバッファ管理、メッセージIDや状態フラグによる同期プロトコル設計が重要になります。meta-stm32mpディレクトリはYoctoビルドとの統合を想定しており、M4用ファームウェアのイメージ化やデバイスツリー設定、A7側に必要な設定のテンプレートを提供していると考えられます。サンプルは実機検証が前提で、デバッグ手法(dmesg、rpmsg関連のカーネルログ、ttyデバイスの操作)やパフォーマンス計測を行うことで実運用向けのチューニングが可能です。(約700字)

プロジェクトの構成

主要なファイルとディレクトリ:

  • LICENSE: file — ライセンス情報
  • README.md: file — リポジトリの説明とアーキテクチャ図の抜粋
  • images: dir — アプリケーション構成図やフロー図(ApplicationArch等)
  • meta-stm32mp: dir — Yocto/ビルド統合用のメタレイヤやレシピ(M4ファームウェアの組み込みやデバイスツリー設定用)
  • stm-apps: dir — Cortex‑M4側およびA7側のサンプルアプリケーション(送信/受信、共有メモリアクセスのコード)
  • …他 1 ファイル(.gitignore等が想定されます)

各ディレクトリの役割:

  • images: デバッグや設計の理解を助ける図解が含まれており、実機セットアップ時に役立ちます。
  • meta-stm32mp: Yoctoプロジェクトへ組み込むためのテンプレート/レシピ群。M4バイナリをA7のLinuxイメージと一緒に配置する用途を想定。
  • stm-apps: M4側のファームウェアがRPMsgで送信するロジック、A7側のサーバがttyRPMSGから読み取って共有メモリへ配置する処理、共有領域からデータを取り出して処理するアプリの例が含まれている想定です。

まとめ

STM32MP1での実機向けRPMsgと共有メモリを組み合わせたマルチコア通信の実践サンプル集です。(約50字)

リポジトリ情報:

READMEの抜粋:

This repository contains project done on STM32MP157C-DK2 Kit which utilizes both ARM Cortex A7 and ARM Cortex M4 processors.

M4 part generates some data and send it to A7 using ttypRPMSG. A7 has a server running which accepts messages and copy those into a shared memory region which will be read by some other application. Other Application takes data from shared memory and is responsible to process that data according to message request.

ApplicationArch