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空间、内存空间的含义和联系相关推荐

  1. Linux系统IO端口,Linux系统对IO端口和IO内存的管理

    五.Linux下访问IO端口 对于某一既定的系统,它要么是独立编址.要么是统一编址,具体采用哪一种则取决于CPU的体系结构. 如,PowerPC.m68k等采用统一编址,而X86等则采用独立编址,存在 ...

  2. 【linux开发】IO端口和IO内存的区别及分别使用的函数接口

    IO端口和IO内存的区别及分别使用的函数接口 每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把 ...

  3. linux系统下:IO端口,内存,PCI总线 的 读写(I/O)操作

    [GitHub开源项目]https://github.com/sig-ishihara/linux_pysical_address_rw_cmd Table of Contents IO端口的in/o ...

  4. io端口与ion内存

    木子你妹 博客园 首页 新随笔 联系 管理 订阅 随笔- 109  文章- 12  评论- 8  <摘录>io端口和io内存 linux中的 IO端口映射和IO内存映射 (一)地址的概念 ...

  5. 设定pic单片机端口为输入_PIC单片机IO端口的软件/硬件可靠性使用方法讨论

    本帖最后由 dingzy_2002 于 2016-3-19 11:51 编辑 一.PIC的IO端口设置在普通的高低电平情况下 1.有普通的H/L电平下,硬件设计要注意的是外围输出其最大驱动电流(拉出/ ...

  6. 51单片机有几个通用io口_51单片机IO端口基础知识及应用

    文章目录 89C51单片机引脚信息单片机IO端口内部结构单片机IO引脚输出应用单片机IO引脚输入应用总结 89C51单片机引脚信息 我们在学习使用任何芯片到时候,可能第一个要注意的就是芯片的引脚信息了 ...

  7. IO 端口和IO 内存(原理篇)

    CPU要想控制所链接的设备,不可避免需要通过IO(input/output)与外设打交道,CPU通过IO操纵设备上的寄存器等来实现对 设备的控制.一般厂商按照IO空间性质将IO划分为IO 端口和IO内 ...

  8. linux 监控网络IO、磁盘、CPU、内存

    linux 监控网络IO.磁盘.CPU.内存 CPU:vmstat ,sar –u,top 磁盘IO:iostat –xd,sar –d,top 网络IO:iftop -n,ifstat,dstat ...

  9. linux 文件IO与内存映射:内存映射

    前言 前面几篇我们学习了用户空间的IO缓冲区,以及IO缓冲区的分散聚合IO技术. 为了减少系统调用的次数,提升系统性能,操作系统开发者门提出了这么多的缓存技术. 但是到这里这些技术同样有不足的地方:不 ...

最新文章

  1. 主动,是因为在乎,不再联系,是因为感到自己多余
  2. 常见的CSS属性和值CascadingStyleSheets
  3. ETSI GS MEC 013,UE 位置 API
  4. Win2K下关联进程/端口之代码初步分析
  5. 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流
  6. Google Maps API 申请方式变更为APIs Console, android手机申请方式
  7. 求解一元二次方程的简单c语言程序
  8. Java中的枚举类型学习
  9. Java基础学习总结(167)——Java项目实践中如何实现幂等
  10. 流行的JavaScript库 ——jQuery
  11. POJ1067 HDU1527 取石子游戏【博弈】
  12. 【Todo】【转载】Scala中Array, List, Tuple的区别
  13. eclipse环境变量配置步骤
  14. python实现简单银行管理系统
  15. 阿里云发布黑科技:面对海量的文本翻译任务,阿里翻译团队是如何解决的
  16. 【window】解决word,excel,PowerPoint 等office图标不显示问题
  17. 网站改版会影响网站流量吗
  18. 网易雷火防护工程师面经
  19. NAS:以数据为中心的数据存储模式[zt]
  20. 申宝股票-题材股分化

热门文章

  1. 6-7 日期-求当年天数
  2. 计算机excel实发工资高中低,EXCEL表格中计算实发工资的公式
  3. 福州大学计算机基础教学与等级考试暂行规定,福州大学计算机基础教学与等级考试暂行规定...
  4. 涉密学位论文不得在联网的计算机上撰写,华南理工大学涉密学位论文管理暂行规定...
  5. 新媒体背景下大学生的志愿服务参与研究(lunwen+任务书)
  6. RTThread从底层AT组件到上层SAL之间的关系
  7. Docker Swarm 健康检查
  8. (ZZ)毕业五年拉开大家差距的原因
  9. hbase查看表结构_HBase简介和基本命令
  10. pitch yaw roll方向