IO端口、IO内存、IO空间、内存空间的含义和联系

蓟县莱德商厦大火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);
indesign
由于边际效应的缘故,不管是否需要 ioremap,都不⿎励直接使⽤I/O内存指针,⽽应使⽤专门的I/O内存操作函数。这些I/O内存操作函数不仅在所有平台上是安全,⽽且对直接使⽤指针操作 I/O 内存的情况进⾏了优化。 --->《LDD》Chapter 9, Page 249
>kis2009

本文发布于:2024-09-22 09:47:12,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/41014.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:内存   函数   操作
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议