1

私の質問は、mmap された領域をモジュールに戻して、そのメモリを操作できるようにする方法です。

私が探しているのはこれです:

  1. 私のユーザー空間アプリケーションは数百のスレッドを使用して実行されます (そのため、カーネルがどのユーザー空間スレッドにどのバッファーを与えたかを追跡するのは困難です)。
  2. ユーザー スレッドはモジュールの mmap 関数を呼び出し、それを取得した後、バッファーにデータを入力します。
  3. 次に、ioctl() をモジュールに使用してこのバッファをモジュールに渡して、モジュールが何らかの処理を行ってバッファを変更できるようにする必要があります。
  4. ユーザー空間スレッドが新しいデータを読み取ります

「ステップ3」をどのように実装できるかわかりません。このユーザーバッファをモジュールに渡して、カーネル空間にあるアドレスを知る方法はありますか?

(malloc や copy_from_user は使えません)

4

1 に答える 1

1

うまくいくかどうかを確認virt_to_phys()してください。

  1. userspace-threadはmmap()を呼び出します。
  2. バッファアドレスを取得し、バッファをデータで満たします。
  3. ioctl()を使用して、バッファアドレスをモジュールに戻します。
  4. モジュールはvirt_to_phys(addr)を呼び出し、バッファで処理を行います。
  5. その後、userspace-threadは処理されたデータを読み取ります。
于 2012-10-16T16:44:53.613 に答える