免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yjcq
打印 上一主题 下一主题

内核虚拟地址转换为物理地址(模拟__pa) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-09-20 14:09 |只看该作者
楼主请问你这个程序的运行环境是什么,是x86的pc,还是arm的嵌入式设备

论坛徽章:
0
12 [报告]
发表于 2011-09-20 20:44 |只看该作者
linux:~ # uname -a
Linux linux 2.6.13-15-default #1 Tue Sep 13 14:56:15 UTC 2005 i686 i686 i386 GNU/Linux

论坛徽章:
0
13 [报告]
发表于 2011-09-21 15:42 |只看该作者
本帖最后由 vonnyfly 于 2011-09-21 15:45 编辑

kmalloc的字节多一点就会看到其它问题,kmalloc(4000,...)   输出0x0
看来的看看kmalloc的实现了。我本以为内核主页表init_mm正确,但结果也有偏差。欢迎各位多多尝试

论坛徽章:
0
14 [报告]
发表于 2011-09-21 20:42 |只看该作者
本帖最后由 yjcq 于 2011-09-21 21:39 编辑

我这也有输出0x0的时候,不知道是怎么回事?
kmalloc分配的内存对应的页表应该是存在的呀,页表对应的page的内存地址应该是存在于pte中的,怎么会是0x呢?最多page对应的物理页面被交换出去了,pte_present为假。地址转换应该还是满足3g偏移的呀?

论坛徽章:
0
15 [报告]
发表于 2011-09-21 23:26 |只看该作者
回复 7# Godbach

用_pa(va)宏转换没有问题,3G的偏移量,但楼主的代码也没有看出有啥问题。。

论坛徽章:
0
16 [报告]
发表于 2011-09-22 20:39 |只看该作者
再想想

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
17 [报告]
发表于 2011-09-23 10:32 |只看该作者
回复 1# yjcq
刚才测试了一下,的确有问题啊。

查找pgd的时候,应该使用pgd_offset_k(va)。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
18 [报告]
发表于 2011-09-23 10:56 |只看该作者
本帖最后由 瀚海书香 于 2011-09-25 15:33 编辑

回复 1# yjcq

kmalloc的地址并不会修改内核页表,只有vmalloc才会修改内核页表

论坛徽章:
0
19 [报告]
发表于 2011-09-23 20:55 |只看该作者
回复 17# 瀚海书香

这个#define pgd_offset_k(address) pgd_offset(&init_mm, (address))

pgd_tmp = pgd_offset(pcb_tmp->mm,va);
#define pgd_offset(mm, address) ((mm)->pgd + pgd_index((address)))
最终得到的结果是一样的,虚拟地址都是大于0xC0000000的,pgd_index((address)肯定是大于768,位于内核页表之中。

论坛徽章:
0
20 [报告]
发表于 2011-09-23 20:56 |只看该作者
回复 18# 瀚海书香


   kmalloc分配的内存也是虚拟地址,也要经过MMU的转换才能得到物理地址才能访问其内存的。页目录项,页表内容也是在内存中的,不然MMU怎么进行转换呢?
   你的意思是内核是没有入口访问的?在内核里面,所有地址都是虚拟地址,所以获得的pgd+pgd_index(vaddr)是虚拟地址,要访问这个虚拟地址的内容(即页表的物理地址),也要经过MMU的转换成物理地址才能访问,但是内核页表里面没有这个虚拟地址的映射,所以访问出错了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP