免费注册 查看新帖 |

Chinaunix

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

映射pci设备寄存器到用户空间的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-16 13:31 |只看该作者 |倒序浏览
方法是将ioremap后得到的地址换算成物理地址再用nopage方法返回页么?感觉不是很对阿  设备内存不是物理内存 应该只有虚拟地址没有物理地址吧? 还是有对应的物理地址 然后从物理地址往寄存器写?
这地方不清楚  请高手指点下

论坛徽章:
0
2 [报告]
发表于 2008-07-16 13:38 |只看该作者
设备内存有物理地址。
一个物理地址可能对应的是物理内存,也可能是设备内存,或者是设备的寄存器

论坛徽章:
0
3 [报告]
发表于 2008-07-16 13:45 |只看该作者
那是不是和映射常规内存的方式一样  也是通过页表换算出ioremap对应的物理地址, 再把对应的页返回掉?  只不过映射常规内存返回的是物理内存    映射io地址的时候返回设备内存?

论坛徽章:
0
4 [报告]
发表于 2008-07-16 13:55 |只看该作者
哦 懂了 重翻了ldd  应该是在mmap中使用remap_pfn_range
谢谢wing兄

论坛徽章:
0
5 [报告]
发表于 2008-07-16 13:55 |只看该作者
原帖由 duanius 于 2008-7-16 13:45 发表
那是不是和映射常规内存的方式一样  也是通过页表换算出ioremap对应的物理地址, 再把对应的页返回掉?  只不过映射常规内存返回的是物理内存    映射io地址的时候返回设备内存?

宾果
ioremap返回的是虚拟地址哈,这个虚拟地址对应的物理地址指向的是设备内存或寄存器

论坛徽章:
0
6 [报告]
发表于 2008-07-16 14:02 |只看该作者
原帖由 zx_wing 于 2008-7-16 13:55 发表

宾果
ioremap返回的是虚拟地址哈,这个虚拟地址对应的物理地址指向的是设备内存或寄存器

了解  非常感谢:P

论坛徽章:
0
7 [报告]
发表于 2008-08-26 15:31 |只看该作者
晕  今天发现了一个问题  寄存器地址按照ldd上面的话说应该是超出物理内存的那部分物理地址
而比如ioaddr = ioremap (mmio_start, mmio_len)这样的函数   它的mmio_star据资料说是从bios中读出的物理地址 也就是说是一个定值  那如果物理内存很大  比如4G  这样的情况下  会不会出现物理内存地址和寄存器地址覆盖掉的情况?    以前好像记得物理内存的线性映射最多到896好像  剩下的内存通过页表在剩余100多兆的空间进行映射(记不清了) 那是不是设备内存在bios中记录的都是896往后的地址?

论坛徽章:
0
8 [报告]
发表于 2008-08-28 14:45 |只看该作者
原帖由 duanius 于 2008-8-26 15:31 发表
晕  今天发现了一个问题  寄存器地址按照ldd上面的话说应该是超出物理内存的那部分物理地址
而比如ioaddr = ioremap (mmio_start, mmio_len)这样的函数   它的mmio_star据资料说是从bios中读出的物理地址 也就 ...

还是没有理解物理地址空间的含义哈。
去找找以前的帖子,先把物理内存(RAM)和物理地址空间的概念分开。
另外对于这里的问题,架构会预留一部分物理地址空间用于映射设备的寄存器和设备内存,例如在x86上预留的物理地址3G~3G+512M。所以当你的内存(RAM)有4G的时候,物理地址空间的布局就如下:
物理地址0 ~ 3G <---对应----> 内存(RAM)0~3G
物理地址3G~3.5G <---对应--->设备的寄存器和设备内存的地址
物理地址3.5G ~ 4G <---对应--->内存(RAM)3G ~ 3.5G

由此看出4G的物理内存并不能被完全使用。实际上当物理内存(RAM)大于物理地址空间时,并不能同时使用所有RAM,而必须通过页表映射多出来的RAM,这和x86下映射高端内存的原理是一样的。

论坛徽章:
0
9 [报告]
发表于 2008-08-28 15:44 |只看该作者
以为这贴子就带着我的疑惑沉下去了     感谢wing兄
又重看了一些贴子和书   内核逻辑地址 物理地址 物理内存 把我搞的头昏脑花  想了一些出来  不知道对不对
就是4g内存的机器  物理地址前896M是线性映射在内核逻辑地址3g-3g+896那块的  后128M用于映射剩余的物理地址   而设备内存位于物理地址3G~3G+512M  也在这128M的空间内通过ioremap返回的内核虚拟地址进行寻址   应该是这样吧。。   
头都晕了

论坛徽章:
0
10 [报告]
发表于 2008-08-28 15:47 |只看该作者
还有最后的0.5g内存空间就寻址不到了么 ? 因为他们连对应的物理地址都没有(超出4G了)  怎么映射呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP