免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1787 | 回复: 0
打印 上一主题 下一主题

[求助]小弟在读LDD3内存映射一章遇到一个看不懂的地方 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-22 10:18 |只看该作者 |倒序浏览
这本书的第十五章,也就是  内存映射和DMA,“使用nopage映射内存”一节,在423页下面有个例子。代码如下
  1. /*
  2. * The nopage version.
  3. */
  4. struct page *simple_vma_nopage(struct vm_area_struct *vma,
  5.                 unsigned long address, int *type)
  6. {
  7.         struct page *pageptr;
  8.         unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
  9.         unsigned long physaddr = address - vma->vm_start + offset;
  10.         unsigned long pageframe = physaddr >> PAGE_SHIFT;

  11. // Eventually remove these printks
  12.         printk (KERN_NOTICE "---- Nopage, off %lx phys %lx\n", offset, physaddr);
  13.         printk (KERN_NOTICE "VA is %p\n", __va (physaddr));
  14.         printk (KERN_NOTICE "Page at %p\n", virt_to_page (__va (physaddr)));
  15.         if (!pfn_valid(pageframe))
  16.                 return NOPAGE_SIGBUS;
  17.         pageptr = pfn_to_page(pageframe);
  18.         printk (KERN_NOTICE "page->index = %ld mapping %p\n", pageptr->index, pageptr->mapping);
  19.         printk (KERN_NOTICE "Page frame %ld\n", pageframe);
  20.         get_page(pageptr);
  21.         if (type)
  22.                 *type = VM_FAULT_MINOR;
  23.         return pageptr;
  24. }
复制代码
小弟我不懂这一行:
  1.         unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
复制代码
我结合wm_area_struct  结构体的定义,来看都不明白这一句求出的偏移量是什么东西,哪位前辈了解的,希望不要吝啬解释一下。
先谢谢啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP