免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: onlyflyer

求助:将用户空间的虚拟地址映射到内核态的逻辑地址。 [复制链接]

论坛徽章:
0
发表于 2009-04-14 23:55 |显示全部楼层
先使用get_user_pages
然后kmap, kunmap
再释放set_page_dirty_lock ,put_page

论坛徽章:
0
发表于 2009-04-15 09:30 |显示全部楼层

回复 #1 onlyflyer 的帖子

奇怪了,你的内核态程序又没有独立的执行上下文(也就是说,内核态的ioctl代码是在用户进程的上下文中执行的),这样直接copy_to_user不就可以了吗?

如果内核态有一个线程专门做这个事,那么copy_to_user不能用,因为不能保证currect->active_mm就是用户进程的mm。这种情况下,看看aio是怎么做的,它是先进行mm的切换然后再copy_to_user。

论坛徽章:
0
发表于 2009-04-16 10:17 |显示全部楼层

回复 #1 onlyflyer 的帖子

为什么在我的linux kernel 2.6.8.1的中编译时出现`pud_t' undeclared (first use in this function)的错误呢?

论坛徽章:
0
发表于 2010-07-30 17:46 |显示全部楼层
我找到问题所在了。
用__va代替__pa
将物理地址转化为内核的逻辑地址是用__va而不是__pa,改动以后程序工 ...
onlyflyer 发表于 2007-01-16 22:34



    有一个问题:如果你user的程序分配到的物理地址大于896M,然后你把对应的虚拟地址传到kernel,kernel通过laddr = __va(phy);得到的地址应该是不正确的吧?

论坛徽章:
0
发表于 2010-07-30 17:52 |显示全部楼层
有一个问题:如果你user的程序分配到的物理地址大于896M,然后你把对应的虚拟地址传到kernel,ke ...
new_learner 发表于 2010-07-30 17:46



    7楼已经解释过这个问题了,呵呵

论坛徽章:
0
发表于 2010-07-31 00:33 |显示全部楼层
关注,学习,混分

论坛徽章:
0
发表于 2010-08-30 09:08 |显示全部楼层
关注,学习,混分

论坛徽章:
0
发表于 2011-09-12 22:45 |显示全部楼层
请问楼主:ioctl处理函数中的pte_unmap(pte)这句语句有什么作用呢?

论坛徽章:
0
发表于 2012-02-27 17:08 |显示全部楼层
回复 1# onlyflyer


    valloc申请的内存在物理上是不连续的,在内核态需要一页一页地映射,参考vmap函数的解释

论坛徽章:
0
发表于 2012-12-09 22:42 |显示全部楼层
哈哈,LZ很有想象力,佩服下.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP