免费注册 查看新帖 |

Chinaunix

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

[硬件及驱动] MMIO 内存映射I/O 使用内存读写指令访问端口 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-13 10:21 |只看该作者 |倒序浏览
问题1:
内存映射IO之后,将硬件IO端口地址映射到内存空间地址,那么之后用内存读写指令访问硬件,可是在硬件层解释不通啊,我们都知道CPU和外设都是有M/IO引脚的,当M/IO引脚表示访问内存时,外设是不会被使能的,这时候怎么可能访问外设?

举例来说 在X86环境下,intel处理器,我们有一个摄像头,32M的缓存ram
当我们把摄像头缓存ram映射到内存空间后,当我们访问显存时,使用mov 指令而不是in out 指令,那么这时候M/IO引脚肯定表示的是访问内存,这时候摄像头肯定是无法被使能的,那么怎么可能被CPU的mov指令访问呢?

问题2:
如果我们实用32位处理器模式,那么当我们给电脑配备4G内存时,是不是由于需要映射一些外设寄存器 缓存等等,所以这4G内存肯定不能全部被利用??

问题3:
在linux和win中,当我们写驱动时,如何查找哪个外设的寄存器和缓存被映射到了哪个地址上?也就是说我如何才能知道外设的某个寄存器的地址是多少?

问题4:
在IO独立编制时,x86环境下,外设寄存器访问和外设的ram访问是否是一样的,都是通过in out指令,只是访问地址不一样,外设的自身ram是一块连续的io地址?

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
2 [报告]
发表于 2013-08-13 10:56 |只看该作者
这个是host bridge控制的, 作为码农, 你知道它能这么工作就行了, 不用深究。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
3 [报告]
发表于 2013-08-24 13:40 |只看该作者
本帖最后由 arm-linux-gcc 于 2013-08-24 13:44 编辑

回复 1# losemyheaven

IO端口空间只有64k,所以很多pcie设备的寄存器都是映射到io内存空间的,将io端口映射到io内存需要硬件支持
所以4G就必须留一些出来给设备

/proc/iomem和/proc/ioport里面可以看到

映射到io内存空间之后,就直接使用内存空间的访问指令了,访问的地址是映射之后的虚拟地址,硬件会做地址转换,从而使得设备被片选




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP