免费注册 查看新帖 |

Chinaunix

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

请教大家一个mmap的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-13 00:02 |只看该作者 |正序浏览
在LDD2中讲到

remap_pfn_range的第二个参数phys_add是物理地址,在这个程序中

int simple_mmap( struct file *filp, struct vm_area_struct *vma )
{
    unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
   
     ...
     
     remap_pfn_range( vma, vma->start, offset, vma->vm_end - vma->vm_start, vma->vm_page_prot );

     ...
}

请教大家为什么 vma->vm_pgoff << PAGE_SHIFT 的值是物理地址。

--根据LDD3做了修改,方便大家讨论^_^

[ 本帖最后由 albcamus 于 2007-6-13 12:01 编辑 ]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
43 [报告]
发表于 2013-10-05 16:44 |只看该作者
vm_pgoff,这个偏移量就是用户空间调用的mmap的最后一个参数右移12位得来的

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:15程序设计版块每日发帖之星
日期:2015-09-21 06:20:002015亚冠之卡尔希纳萨夫
日期:2015-09-22 14:11:11程序设计版块每日发帖之星
日期:2015-09-25 06:20:00每日论坛发贴之星
日期:2015-09-25 06:20:00
42 [报告]
发表于 2013-08-31 15:11 |只看该作者
本帖最后由 cascle 于 2013-08-31 15:45 编辑


这里的vm_pgoff 表示的就应该是上图中的off在文件中的page号吧

论坛徽章:
0
41 [报告]
发表于 2007-06-14 13:47 |只看该作者
原帖由 augustusqing 于 2007-6-14 13:15 发表于 39楼  
LFN里的相关问题不知道是不是同一兄弟问的:
http://www.linuxforum.net/forum/ ... &o=7&fpart=

但在察 ...



谢谢, 我想你的理解是正确的。

论坛徽章:
0
40 [报告]
发表于 2007-06-14 13:42 |只看该作者

回复 #39 augustusqing 的帖子

是我问的

论坛徽章:
0
39 [报告]
发表于 2007-06-14 13:15 |只看该作者

回复 #38 augustusqing 的帖子

LFN里的相关问题不知道是不是同一兄弟问的:
http://www.linuxforum.net/forum/ ... &o=7&fpart=

但在察看了一下ldd3的源码,确实有“The following code is derived from drivers/char/mem.c” ,所以应该这里的remap_pfn_range映射第0页物理内存的糊涂可以不用再糊涂了,这样的用法也就限于drivers/char/mem.c,因而在我们实际的设备编程中,没有什么特别需要,肯定不会像例子这样直接把vma->vm_pgoff传递给remap_pfn_range()的,至少也要像drivers/char/mem.c中那样对page进行access判断

论坛徽章:
0
38 [报告]
发表于 2007-06-14 12:53 |只看该作者
原帖由 rwen2012 于 2007-6-14 11:38 发表于 37楼  
谢谢, 我好像记得ldd3那个例子中传入的offset是0,
按上面所说,其中remap_pfn_range映射的是第0页物理内存,
这么一来,它访问到的内容就不是它想要的了吗?

糊涂了, 呵呵



看完所有的回复,一直是这个疑问点
真想说,是不是ldd的这个例子搞错了,现没有编译,运行,并跟踪这个例子的条件,暂时比较晕

论坛徽章:
0
37 [报告]
发表于 2007-06-14 11:38 |只看该作者
谢谢, 我好像记得ldd3那个例子中传入的offset是0,
按上面所说,其中remap_pfn_range映射的是第0页物理内存,
这么一来,它访问到的内容就不是它想要的了吗?

糊涂了, 呵呵

论坛徽章:
0
36 [报告]
发表于 2007-06-14 10:54 |只看该作者
我觉得我们应该从那个例子的上下文中去理解楼主的问题,唉,断章取义不可取。不过我觉得这个问题已经很清楚了。

论坛徽章:
0
35 [报告]
发表于 2007-06-14 08:59 |只看该作者
没有问题

既然drivers/char/mem.c可以这样做,你自己编个module也做同样的事情也可以。

原帖由 rwen2012 于 2007-6-14 08:37 发表于 34楼  


但是,LZ提供的ldd3上的例子上的offset就是0,它将映射第0页物理内存?
可是很明显它是想映射并访问自己的缓存区。

不好意思,没弄明白,罗嗦了 :)
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP