免费注册 查看新帖 |

Chinaunix

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

kernel 中如何访问管理pci memory [复制链接]

论坛徽章:
0
71 [报告]
发表于 2009-05-05 15:10 |只看该作者
原帖由 epegasus 于 2009-4-19 16:57 发表
关于a版主提到的是否存在多个虚拟地址对1个物理地址的问题,我写了个小测试程序,高手勿笑.

平台是32位arm.
运行后打出来的信息如下:
insmod mmtest.ko
va2 is c1761ac0
pa is 01761ac0
va1 is c2878ac0
double va test


通过ioremap得到的返回值,不是应该在3G~3G+896M之间吗?
为什么你这里得到的是va1 is c2878ac0呢?这个值并不在3G~3G+896M之间啊!

另外,你这个程序我在2.6.29(X86,ubuntu8.04)上跑了一下,把第一行去掉了(因为如果不去掉编不过),结果如下:
[37487.717625] va2 is e03184f0
[37487.717759] pa is 203184f0
[37487.717788] ioremap error


谢谢!

论坛徽章:
0
72 [报告]
发表于 2009-05-05 15:11 |只看该作者

回复 #72 new_learner 的帖子

是不是跟平台和物理内存大小有关呢?

论坛徽章:
0
73 [报告]
发表于 2009-05-05 21:04 |只看该作者
ioremap得到的返回值应该在内核逻辑地址的上界.而内核逻辑地址空间大小由内存物理大小觉得,当内存小于896M时ioremap和vmalloc都可以分到896M之下的空间.896只是个"阀值".

论坛徽章:
0
74 [报告]
发表于 2009-05-05 23:49 |只看该作者
看着有点晕。等俺有空再仔细看看。

论坛徽章:
0
75 [报告]
发表于 2009-05-12 12:44 |只看该作者
原帖由 epegasus 于 2009-4-19 16:57 发表
关于a版主提到的是否存在多个虚拟地址对1个物理地址的问题,我写了个小测试程序,高手勿笑.

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include  ...

在我的X86下运行出错
dmesg
va2 is d7873980
pa is 17873980
ioremap error
我机器的内在是384M
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP