こんにちは、私はLinuxとベアメタルM7ファームウェア間の通信で私が持っているいくつかの奇妙な動作を理解しようとしています。
私はrpmsgエンドポイントとchardeviceを実装するカーネルモジュールを持っています。ユーザースペースアプリケーションは ioctls 呼び出しを行い、モジュールはリクエストを rpmsg メッセージに変換します。
M7コードでは、単純なリングバッファを使用してenv-queue-*コードを実装しました。
システムは動作しますが、ユーザー空間がメッセージを送信する速度が速すぎると、バッファが最終的にいっぱいになり、システムは 15 秒間フリーズします。カーネルのrpmsgコードを調べると、15sは空きtxバッファを待機するタイムアウトであることがわかりました。しかし、uartロギングが有効になっていても、私のM7はバッファを空にする数ミリ秒でキューに入れられたすべての操作を実行しています。
Linux側では、15秒の期間に「wait_event_interruptible_timeout」で待たされたイベントが上がらないようです...そのため、VirtualQueueコールバックが呼び出されていません。
これを修正する方法がわかりません。
助けてくれてありがとう
問題を見つけました。デフォルトの設定ファイルでRL_ALLOW_CONSUMED_BUFFERS_NOTIFICATIONが1と等しいと定義されていないことを見逃していました
サポートに感謝します