私は小さな組み込みシステムに取り組んでいます。Linuxがユーザースペースで起動すると、物理メモリのどこにデバイスがあるかがわかります。それらをユーザースペースの仮想アドレスにマッピングしたいと思います。現在、私はカーネルモジュールを介してそれを行っています。vmalloc / kmalloc(サイズによって異なります)を使用してから、返された仮想アドレスでioremap_page_rangeを使用して、物理アドレスをマップします。私はそれが正しい方法だとは思いません。まず、メモリを割り当ててから、カーネルにその仮想アドレス空間を別の物理アドレス空間に再マップするように依頼しています。(vmcall /kmallocで最初にマップされたphysical->virtualは、これらの物理ページを気にしないので、ちょっと役に立たないです。これは間違いなく良くありません。)
これの代わりに、既知の物理メモリをユーザースペースプロセスにマッピングするためのより良い方法があります。(ユーザースペースプロセス以外は、誰もそのメモリに触れないことを知っています。)
ありがとう