0

Linux での CAN バス通信用のドライバーの実装を楽しみにしています。
デザインの提案が必要です。

Linuxにはユーザー空間とカーネル空間があります。ドライバーは、ユーザー空間のカーネル空間アプリケーションで実行されます。

1> パケットが非常に高速で受信された場合、ドライバーはこの状況をどのように管理できるでしょうか?

2> パケットを高速で送信する必要がある場合、どうすればよいですか?

3> ユーザー空間とカーネル空間の間でデータを移動する方法。これとは別に、システムコールまたは何らかの高速メカニズムを使用する必要がありますか?

4>カーネルレベルのスレッドで実行できますか? しかし、CAN バスからの TX と CAN バスからの RX に対してカーネル レベルで実行されている 2 つのスレッドがある場合、ミューテックスを使用してクリティカル セクション (つまり、内部レジスタ) を保存する必要がありますか?

5>アプリケーションからドライバーにアクセスするために共有ライブラリが使用されているとします。共有ライブラリは、システム コールを使用してドライバー機能にアクセスできますか?

正しいアプローチとは何かを完全に混乱させました。

提案してください。どんな返事でも結構です。

4

1 に答える 1

0

データレートに関しては、CAN は、Linux を実行するほとんどのプロセッサと比較してそれほど高速ではありません。ほとんどのバスは、約 60kB/s にすぎない 60% の負荷を下回っています! ユーザー空間からカーネル空間への単純なパケット FIFO は問題ないはずです。

問題になる可能性があるのは、スケジュールに従ってメッセージを送信するためのハードリアルタイムの期限がある場合です. または、さらに悪いことに、受信したメッセージに応答して、特定の時間内にメッセージを送信することもあります。これらの要件のいずれかがある場合、Linux はおそらく適していません。適切なリアルタイム オペレーティング システム (RTOS) が必要です。

于 2012-12-04T10:19:08.240 に答える