请你帮我理解下面提到的关于LINUX上MMAP的点: -
a)为什么KMALLOC,DMA_ALLOC_COHERENT返回的内存应该被PAGE_ALLIGNED用于MMAP
至关重要b)krnl_area =(int *)((((unsigned long)krnl_ptr)+ PAGE_SIZE - 1)& PAGE_MASK); 通过一些搜索,我可以找出相同的代码, 但我还是不清楚它是如何完成的。
c)如何确认我已完成MMAP的PAGE然后保留 他们没有使用SetPageReserved交换,已正确完成 通过内核。
即如果我正在为一个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)的示例代码但不能 了解它们是相同还是不同? 如果不同,何时使用哪种形式?
答案 0 :(得分:0)
对于点(d),取消保留PAGE的解决方案正确的功能是ClearPageReserved(页面)....
我仍在努力了解其他要点。任何人都可以指导相同的
Ashish Mishra