IO端口、IO内存、IO空间、内存空间的含义和联系
1,IO空间:X86一个特有的空间,与内存空间独立的空间,同样利用IO空间可以操作数据,只不过是利用对应的IO端口操作函数,例如inb(), inbw(), inl(); outb(), outw(), outl()等。
2,内存空间:内存地址的寻址范围,例如32位操作系统内存空间为2的32次幂,即4G。
3,IO端口:当外部寄存器或内存映射到IO空间时,即只能用IO端口操作函数进行数据读写,称为IO端口。
4,IO内存:当外部寄存器或内存映射到内存空间时,即使用访问内存的方式对外部寄存器或者内存进行读写操作。
从上面定义可以看出,外部设备只能通过设备上的寄存器或者内存(SRAM?DRAM?)与CPU进行通讯,外部设备的寄存器可以是IO端口(映射到IO空间),也可以是IO内存(映射到地址空间)。当映射到IO空间时,必须使用对应的IO操作函数;映射到内存空间时就要注意要使用特定的IO内存操作函数,最好不要直接使用指针操作,IO内存操作函数有如下:
IO内存读函数:
unsigned int ioread8(void *addr);
unsigned int ioread16(void *addr);
unsigned int ioread32(void *addr);
IO内存写函数:
unsigned int iowrite8(u8 value, void *addr);
unsigned int iowrite16(u8 value, void *addr);
unsigned int iowrite32(u8 value, void *addr);
以下这些函数读和写一系列值到给定的I/O内存区域,从给定的buf读或写count个值到addr,参数count表示要读写的数据个数,而不是字节数
void ioread8_rep(void *addr, void *buf, unsigned long count);
void ioread16_rep(void *addr, void *buf, unsigned long count);
void ioread32_rep(void *addr, void *buf, unsigned long count);
void iowrite8_rep(void *addr, const void *buf, unsigned long count);
void iowrite16_rep(void *addr, const void *buf, unsigned long count);
void iowrite32_rep(void *addr, const void *buf, unsigned long count);
需要操作一块IO地址时,使用下列函数(这些函数的行为类似于它们的C库类似函数)
void memcpy_io(void *addr, u8 value, unsigned int count);
void memcpy_fromio(void *dest, void *source, unsigned int count);
void memcpy_fromio(void *dest, void *source, unsigned int count);
由于边际效应的缘故,不管是否需要 ioremap,都不鼓励直接使用I/O内存指针,而应使用专门的I/O内存操作函数。这些I/O内存操作函数不仅在所有平台上是安全,而且对直接使用指针操作 I/O 内存的情况进行了优化。 --->《LDD》Chapter 9, Page 249
IO端口、IO内存、IO空间、内存空间的含义和联系相关推荐
- Linux系统IO端口,Linux系统对IO端口和IO内存的管理
五.Linux下访问IO端口 对于某一既定的系统,它要么是独立编址.要么是统一编址,具体采用哪一种则取决于CPU的体系结构. 如,PowerPC.m68k等采用统一编址,而X86等则采用独立编址,存在 ...
- 【linux开发】IO端口和IO内存的区别及分别使用的函数接口
IO端口和IO内存的区别及分别使用的函数接口 每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把 ...
- linux系统下:IO端口,内存,PCI总线 的 读写(I/O)操作
[GitHub开源项目]https://github.com/sig-ishihara/linux_pysical_address_rw_cmd Table of Contents IO端口的in/o ...
- io端口与ion内存
木子你妹 博客园 首页 新随笔 联系 管理 订阅 随笔- 109 文章- 12 评论- 8 <摘录>io端口和io内存 linux中的 IO端口映射和IO内存映射 (一)地址的概念 ...
- 设定pic单片机端口为输入_PIC单片机IO端口的软件/硬件可靠性使用方法讨论
本帖最后由 dingzy_2002 于 2016-3-19 11:51 编辑 一.PIC的IO端口设置在普通的高低电平情况下 1.有普通的H/L电平下,硬件设计要注意的是外围输出其最大驱动电流(拉出/ ...
- 51单片机有几个通用io口_51单片机IO端口基础知识及应用
文章目录 89C51单片机引脚信息单片机IO端口内部结构单片机IO引脚输出应用单片机IO引脚输入应用总结 89C51单片机引脚信息 我们在学习使用任何芯片到时候,可能第一个要注意的就是芯片的引脚信息了 ...
- IO 端口和IO 内存(原理篇)
CPU要想控制所链接的设备,不可避免需要通过IO(input/output)与外设打交道,CPU通过IO操纵设备上的寄存器等来实现对 设备的控制.一般厂商按照IO空间性质将IO划分为IO 端口和IO内 ...
- linux 监控网络IO、磁盘、CPU、内存
linux 监控网络IO.磁盘.CPU.内存 CPU:vmstat ,sar –u,top 磁盘IO:iostat –xd,sar –d,top 网络IO:iftop -n,ifstat,dstat ...
- linux 文件IO与内存映射:内存映射
前言 前面几篇我们学习了用户空间的IO缓冲区,以及IO缓冲区的分散聚合IO技术. 为了减少系统调用的次数,提升系统性能,操作系统开发者门提出了这么多的缓存技术. 但是到这里这些技术同样有不足的地方:不 ...
最新文章
- 主动,是因为在乎,不再联系,是因为感到自己多余
- 常见的CSS属性和值CascadingStyleSheets
- ETSI GS MEC 013,UE 位置 API
- Win2K下关联进程/端口之代码初步分析
- 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流
- Google Maps API 申请方式变更为APIs Console, android手机申请方式
- 求解一元二次方程的简单c语言程序
- Java中的枚举类型学习
- Java基础学习总结(167)——Java项目实践中如何实现幂等
- 流行的JavaScript库 ——jQuery
- POJ1067 HDU1527 取石子游戏【博弈】
- 【Todo】【转载】Scala中Array, List, Tuple的区别
- eclipse环境变量配置步骤
- python实现简单银行管理系统
- 阿里云发布黑科技:面对海量的文本翻译任务,阿里翻译团队是如何解决的
- 【window】解决word,excel,PowerPoint 等office图标不显示问题
- 网站改版会影响网站流量吗
- 网易雷火防护工程师面经
- NAS:以数据为中心的数据存储模式[zt]
- 申宝股票-题材股分化
热门文章
- 6-7 日期-求当年天数
- 计算机excel实发工资高中低,EXCEL表格中计算实发工资的公式
- 福州大学计算机基础教学与等级考试暂行规定,福州大学计算机基础教学与等级考试暂行规定...
- 涉密学位论文不得在联网的计算机上撰写,华南理工大学涉密学位论文管理暂行规定...
- 新媒体背景下大学生的志愿服务参与研究(lunwen+任务书)
- RTThread从底层AT组件到上层SAL之间的关系
- Docker Swarm 健康检查
- (ZZ)毕业五年拉开大家差距的原因
- hbase查看表结构_HBase简介和基本命令
- pitch yaw roll方向