物理的に隣接したDMA可能なメモリのいくつかのメモリブロックを管理するカーネルドライバを作成しようとしています(kmalloc()
これらはDMAストリームのみであるため使用しています)。一部の機能をユーザースペースに取り込むには、このメモリをmmap()
独自の実装で編集しmmap()
ます。私はLinuxデバイスドライバーと、私の主な情報源としてGoogleに表示される悪い例を使用しています。
私mmap()
(今のところそれを呼んでmy_mmap()
います)はカーネルに登録する必要があります。を使用してこれを行う唯一の有効な方法のようですstruct file_operations
が、これにはキャラクターデバイスとその物理的な場所を作成する必要があります。私はそれをしたくありません。ユーザースペースアプリケーションがメモリバッファにアクセスするための仮想アドレスを作成したいだけで、メモリバッファをマップするファイルを作成したくありません。これは可能ですか?
フレームバッファも実装と同等の構造を持っていることがわかりましたmmap()
が、それはあまりにも多くのハックになります。それとそれはより多くの未知数を追加します。
私が理解しているように、私が失われた柔軟性にmy_mmap()
問題がない限り、重い物を持ち上げて使用することができます。remap_pfn_range()
それ以外の場合は、ローカルを実装し、nopages()
を使用して登録する必要がありstruct vm_operations_struct
ます。これは正しいです?