linux I/O内存映射

本文介绍Linux系统的内存布局,包括用户空间和内核空间的划分,并详细解释了I/O内存资源如何通过ioremap映射到内核空间,以及如何通过mmap使用户空间能够访问这些资源。
	Linux的线性地址空间为 0x000000000xffffffff Linux内核将这 4G字节的空间分为两个部分:将最高的 1G字节(0xc0000000 0xfffffff)供内核使用,称之为内核空间。而将较低的 3G字节(0x00000000 0xbfffffff),供各个进程使用,称之为用户空间。因为每个进程都可以通过系统调用进入内核,因此, linux内核由系统内的所有进程所共享。从而,每个进程都可以拥有 4G的线性地址空间。

	设备通常会提供一组寄存器,如控制寄存器、数据寄存器和状态寄存器等等。这些寄存器可能位于 I/O空间,也可能位于内存空间。
	当这些寄存器位于I/O空间时,通常被称为 I/O端口。
	当这些寄存器位于内存空间时,对应的内存空间被称为 I/O内存

	一般来说,在系统运行时,外设的 I/O内存资源的物理地址是已知的,由硬件的设计决定。但是 CPU并没有为这些已知的外设 I/O内存资源的物理地址预定义虚拟地址范围,驱动程序并不能直接通过物理地址访问 I/O内存资源,而必须将它们映射到内核的虚拟地址空间,然后才能根据映射所得的虚拟地址空间,通过访问指令访问这些 I/O资源。Linux 通过ioremap来将 I/O内存资源的物理地址映射到内核的虚拟地址空间( 3G~4G)中去。
但用户空间仍不能直接访问内核空间中映射的 I/O内存资源地址,必须把设备地址映射到用户空间中去才能实现用户空间态的访问。通过 mmap,我们可以讲用户空间的一段内存与设备内存相关联,当用户访问用户空间的这段地址范围时,就会转化为对设备的访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值