Linux下对IO内存的访问

1.引言

1.1文档目的
本文档描述IO内存的概念和访问流程。

1.2背景

1.3参考资料
名称 类型 作者 备注
Linux设备驱动开发详解:基于最新的Linux4.0内核 书籍 宋宝华 第11章
国嵌内核驱动深入班5-1-2(硬件访问) 视频 谢老师

2.几个概念

2.1 IO空间与内存空间
在X86处理器才存在IO空间,是相对于内存空间的概念。目前大多数嵌入式处理器(如ARM、PowerPC等)并不提供IO空间。所以内存空间是必须的,IO空间是可选的。嵌入式开发只关心内存空间即可。
IO空间和内存空间是彼此独立的地址空间,在32位的X86处理器中,IO空间大小为64K ,内存空间为4G。

2.2 IO端口和IO内存
设备通常会提供一组寄存器开控制设备、读写设备和获取设备状态,既控制寄存器、数据寄存器和状态寄存器。这些寄存器可能位于IO空间,也可能位于内存空间中。
当位于IO空间,称为IO端口;当位于内存空间时,对应的内存空间称为IO内存。

3. IO端口和IO内存的访问

Linux是支持嵌入式处理器,也支持X86处理器,所以Linux支持IO空间(IO端口)和内存空间(IO内存)的访问,只是API不同而已。

3.1 IO端口的访问
前面说过了,嵌入式开发不关心IO空间,所以也不关心IO端口的访问。这里不详述。

3.2 IO内存的访问
IO内存的访问,在设备驱动开发中,用的非常多的。比如在ZYNQ平台,操作FPGA的寄存器。FPGA与ARM共享的内存区域,中间的一段用做寄存器的控制。FPGA看做是ZYNQ的一个外设,挂在内存空间。知道物理地址后,对地址进行映射操作即可。具体的IO空间操作流程如下图3.2.1所示。
在这里插入图片描述图3.2.1 IO内存访问步骤

3.2.1 mmap访问
在驱动中访问,可以按上面ioremap的方式。如果在应用层进行访问。就可以mmap的方式实现啦。这种方式,在实际使用中,也比较常用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值