忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
楼主: Godbach

内核和用户空间共享内存的实现例程-proc和mmap [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-06-08 13:46 |显示全部楼层
用virt_to_phys可以得到>4G的地址, 可惜还是不对


怎么不对,找原因了吗?

论坛徽章:
0
发表于 2009-06-08 13:55 |显示全部楼层
比方说物理内存是8G, kernel_memaddr的虚拟地址是0xffff81018aa7e000, virt_to_phys(kernel_memaddr)是0x18aa7e000,
可应用层读的结果还是不对,
感觉virt_to_phys()是象__pa那就做了个&操作, 没具体结合物理容量进行转换

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-06-08 14:21 |显示全部楼层
virt_to_phys

这个转换出来的是什么类型的值

论坛徽章:
0
发表于 2009-06-08 15:54 |显示全部楼层
unsigned long

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-06-08 16:18 |显示全部楼层
原帖由 blue006 于 2009-6-8 15:54 发表
unsigned long


你的系统是不是64位的,sizeof(unsigned long) 是不是8啊?

论坛徽章:
0
发表于 2009-06-08 16:37 |显示全部楼层
是64位的,  kernel_memaddr的虚拟地址是0xffff81018aa7e000 是16位,
virt_to_phys(kernel_memaddr) = 0x1,8aa7,e000,  前面省略了7个0
如果是32位的话不会超过0xFFFF,FFFF

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-06-08 16:45 |显示全部楼层
原帖由 blue006 于 2009-6-8 16:37 发表
是64位的,  kernel_memaddr的虚拟地址是0xffff81018aa7e000 是16位,
virt_to_phys(kernel_memaddr) = 0x1,8aa7,e000,  前面省略了7个0
如果是32位的话不会超过0xFFFF,FFFF


看一下这个函数的实现:
virt_to_phys


就像__pa,其实他的转换只是相当于减去0xC000 0000。

另外,你的内存是用什么方式申请的?

论坛徽章:
0
发表于 2009-06-08 16:51 |显示全部楼层
virt_to_phys 有很多版本, 很多都是直接调用 __pa,
例子中的这个_get_free_pages(GFP_KERNEL, PAGE_ORDER)来分配内存

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2009-06-08 17:04 |显示全部楼层
原帖由 blue006 于 2009-6-8 16:51 发表
virt_to_phys 有很多版本, 很多都是直接调用 __pa,
例子中的这个_get_free_pages(GFP_KERNEL, PAGE_ORDER)来分配内存


刚刚看了这写个函数和宏的代码,主要就是定义的地方有好几处。

我建议自己hack一下这几个实现的流程,代码都很简单。顶多就是移位和加减法。调了那个函数,函数做了什么工作,这样你可以搞清楚问题在哪里。

[ 本帖最后由 Godbach 于 2009-6-8 17:06 编辑 ]

论坛徽章:
0
发表于 2009-06-08 17:34 |显示全部楼层
看来大家对linux内核都蛮感兴趣的:wink:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票8.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP