私はこの問題を解決しようとしています。ユーザー空間プログラムは、カーネルモジュールからの要求を取得するためにバッファをポーリングし続け、それを提供してからカーネルに応答します。カーネルモジュール内の既知の物理アドレスのメモリにアクセスするにはどうすればよいですか?
デバイスファイルを作成して通信するのではなく、ユーザースペースからメモリバッファを割り当てて、固定されているとマークして、メモリページがスワップアウトされることはありません。次に、ユーザ空間は特別なシステムコールを呼び出して、カーネルモジュールにそのバッファの物理アドレスを得ることができるように、カーネルにメモリバッファを伝える。 (ユーザスペースプログラムがコンテキストスイッチアウトされている可能性があるため、カーネルモジュールがその時点でバッファにアクセスしても仮想アドレスが何も意味しないからです。)
モジュールは要求を送信したいときに、物理アドレスを介してバッファリングする。問題は次のとおりです。物理アドレスを介してカーネルモジュール内のバッファにアクセスするにはどうすればよいですか。
私はget_user_pagesがあることに気づきましたが、それを使用する方法がわからない、あるいはもっと良い方法があるかもしれません。
ありがとうございました。
どうすれば速くできますか?バッファを更新したことをカーネルに伝えるには、まだシステムコールを行う必要があります。 – mpe
いいえ、カーネルスレッドは専用のコアで実行されており、応答をポーリングし続けます。 –