Linux上のMMAPに関する以下のポイントを理解するのを手伝ってもらえますか:-
a) KMALLOC 、 DMA_ALLOC_COHERENT のいずれかによって返されるメモリを MMAP に使用するために PAGE_ALLIGNED にすることが不可欠なのはなぜですか?
b) krnl_area=(int *)((((unsigned long)krnl_ptr) + PAGE_SIZE - 1)&PAGE_MASK); いくつかの検索により、上記のコードを同じように見つけることができましたが、それがどのように行われるかはまだわかりません。
c) MMAP を実行して SetPageReserved を使用してスワップされないように予約した PAGE が、kernel によって正しく実行されていることを確認するにはどうすればよいですか。
つまり、たとえば MMAPEd である 4 ページに対して SetPageReserved を実行している場合、これらのページで SetPageReserved を実行したように、スケジューラがこれらのページをスワップしないことを確認するにはどうすればよいですか。
d) ページを UN_RESERVED にする関数はありますか? SetUnPageReserved を試しましたが、この関数のヘッダー ファイルを見つけられませんでした。
e)違いは何ですか。つまり、(1)と(2)のどちらがremap_pfn_rangeで物理アドレスを提供する正しい方法ですか...
(1) (virt_to_phys((void *)krnl_ptr) >> PAGE_SHIFT)
or
(2) (vma->vm_pgoff)
(1)または(2)のどちらかを使用したサンプルコードを見たことがありますが、両方が同じか異なるかを理解できませんでした。異なる場合、いつどのフォームを使用しますか?