私は、PCIデバイス用のドライバのようなコードで作業しています。通信はバッファを介して行われる。すなわち、バッファに書き込む。そして、デバイスは、バッファからデータを取得する。バッファへのデバイス書き込みとそのバッファからのI gradデータ。ここで問題が発生します。デバイスがこのバッファに書き込むためには、物理アドレス(仮想アドレスではない)が必要です。私の上司は、私がカーネルモジュールを書いてkmalloc
を使ってメモリを割り当てるなら、それを実行することができると私に言った。カーネル空間からユーザ空間へ物理メモリへのポインタを渡して仮想空間にマップする方法
ここに私の質問があります。 ユーザ空間からこのバッファにアクセスするにはどうすればよいですか?つまり、このバッファへのポインタをカーネル空間からユーザ空間に渡すにはどうすればよいですか?ユーザー空間のすべてのアドレスは仮想アドレスなので、物理バッファを仮想バッファに変換するにはどうすればよいですか?私が理解する限り、私はioctl
を使用する必要がありますが、私はどうやっていません。
何か助けていただければ幸いです。
もし私がこれを行うのであれば、おそらくグラフィックスドライバのDRMを見てみるとよいでしょう。 – doron
ドライバに 'mmap'を実装してください。詳細については、[Linux Device Drivers](http://www.xml.com/ldd/chapter/book/ch13.html)を参照してください。 – kaylum
@kaylumそれは私が先週読んできた本です。私は自分のケースについて適切な章を見ましたが、私は 'mmap'が正しいアプローチだとは思わない。トリックは、私がバッファを割り当てる必要があるということですが、デバイスがバッファに書き込むためには、バッファの物理アドレスが必要です。 – flashburn