KVMを使用して仮想マシンで実行されるゲストオペレーティングシステムでカーネルモジュールを作成しています。ここでは、特定の物理アドレスにメモリページを割り当てたいと思います。kmalloc()はメモリを提供しますが、OSによって選択された物理アドレスにあります。
背景:ゲストがデバイスと通信するときに終了しないデバイスエミュレーション手法をqemuで作成しています(たとえば、I / Oマップデバイスやポートマップデバイスで終了します)。基本的な考え方は次のとおりです。ゲストデバイスドライバーは、特定の(ゲスト)物理メモリアドレスに書き込みます。qemuプロセスのスレッドは、新しいデータをチェックするために継続的にポーリングします(いくつかのステータスビットなどを介して)。そして、出口を発生させることなく、それに応じて行動を起こします。ゲストがデバイスドライバーによって使用されているアドレスをホストに通知する(既存の)方法がないため、事前に指定されたメモリページをホストに割り当てる必要があります。