[求助]小弟在读LDD3内存映射一章遇到一个看不懂的地方
这本书的第十五章,也就是内存映射和DMA,“使用nopage映射内存”一节,在423页下面有个例子。代码如下/** The nopage version.
*/
struct page *simple_vma_nopage(struct vm_area_struct *vma,
unsigned long address, int *type)
{
struct page *pageptr;
unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
unsigned long physaddr = address - vma->vm_start + offset;
unsigned long pageframe = physaddr >> PAGE_SHIFT;
// Eventually remove these printks
printk (KERN_NOTICE "---- Nopage, off %lx phys %lx\n", offset, physaddr);
printk (KERN_NOTICE "VA is %p\n", __va (physaddr));
printk (KERN_NOTICE "Page at %p\n", virt_to_page (__va (physaddr)));
if (!pfn_valid(pageframe))
return NOPAGE_SIGBUS;
pageptr = pfn_to_page(pageframe);
printk (KERN_NOTICE "page->index = %ld mapping %p\n", pageptr->index, pageptr->mapping);
printk (KERN_NOTICE "Page frame %ld\n", pageframe);
get_page(pageptr);
if (type)
*type = VM_FAULT_MINOR;
return pageptr;
}小弟我不懂这一行: unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;我结合wm_area_struct结构体的定义,来看都不明白这一句求出的偏移量是什么东西,哪位前辈了解的,希望不要吝啬解释一下。
先谢谢啦!
页:
[1]