理解io端口和io内存--关于驱动开发的问题
2010-08-13 14:07
281 查看
1、外设都是通过读写设备上的寄存器来进行的,外设寄存器也称为“I/O端口”,而IO端口有两种编址方式:独立编址和统一编制。而具体采用哪一种
则取决于CPU的体系结构。
如,PowerPC、m68k等采用统一编址,而X86等则采用独立编址。但对于Linux内核而言,它可能用于不同的CPU,所以它必须都要考虑这两种
方式,于是它采用一种新的方法,将基于I/O映射方式的或内存映射方式的I/O端口通称为“I/O区域”(I/O
region),不论你采用哪种方式,都要先申请IO区域:request_resource(),结束时释放
它:release_resource()。
对于某一既定的系统,它要么是独立编址,也即“I/O端口”方式,外设寄存器位于“I/O空间”;要么是统一编制,也即“I/O内存”方式,外设寄存器位于“内存空间”(很多外设有自己的内存、缓冲区,外设的寄存器和内存统称“I/O空间”)。
2、对外设的访问分为IO端口访问和IO内存访问。
访问IO内存的流程是:request_mem_region() -> ioremap() -> ioread8()/iowrite8() -> iounmap() -> release_mem_region() 。
访
问IO端口有2种途径,
I/O映射方式(I/O-mapped)、内存映射方式(Memory-mapped)。
前一种途径直接使用intb()
/outb()之类的函数来读写IO端口,
后一种是(为了达到接口的同一性)先把IO端口映射到IO内存(“内存空间”):ioport_map(),再
使用访问IO内存的函数来访问IO端口。
则取决于CPU的体系结构。
如,PowerPC、m68k等采用统一编址,而X86等则采用独立编址。但对于Linux内核而言,它可能用于不同的CPU,所以它必须都要考虑这两种
方式,于是它采用一种新的方法,将基于I/O映射方式的或内存映射方式的I/O端口通称为“I/O区域”(I/O
region),不论你采用哪种方式,都要先申请IO区域:request_resource(),结束时释放
它:release_resource()。
对于某一既定的系统,它要么是独立编址,也即“I/O端口”方式,外设寄存器位于“I/O空间”;要么是统一编制,也即“I/O内存”方式,外设寄存器位于“内存空间”(很多外设有自己的内存、缓冲区,外设的寄存器和内存统称“I/O空间”)。
2、对外设的访问分为IO端口访问和IO内存访问。
访问IO内存的流程是:request_mem_region() -> ioremap() -> ioread8()/iowrite8() -> iounmap() -> release_mem_region() 。
访
问IO端口有2种途径,
I/O映射方式(I/O-mapped)、内存映射方式(Memory-mapped)。
前一种途径直接使用intb()
/outb()之类的函数来读写IO端口,
后一种是(为了达到接口的同一性)先把IO端口映射到IO内存(“内存空间”):ioport_map(),再
使用访问IO内存的函数来访问IO端口。
相关文章推荐
- 理解io端口和io内存--关于驱动开发的问题
- 数字电路中关于IO口驱动能力的几个问题
- 【linux开发】IO端口和IO内存的区别及分别使用的函数接口
- 关于MYECLIPSE开发Spring+Struts+Hibernate时用SQL2000出现驱动不匹配的问题
- 理解“统一编址,独立编址,IO端口IO内存”
- [地图SkyLine二次开发]关于IE内存限制问题(1G)......(续)
- 关于linux内核驱动开发中Makefile编译的问题
- iOS开发C语言关于内存问题的总结
- 关于linux内核驱动开发中Makefile编译的问题
- 关于linux内核驱动开发中Makefile编译的问题
- 关于安卓开发当中通过java自带的HttpURLConnection访问XML的java.io.EOFException问题
- 关于代码驱动开发的生产率问题
- 20150222 IO端口映射和IO内存映射(详解S3C24XX_GPIO驱动)
- 使用驱动直写内存时,关于类型需要注意的问题!
- win32驱动开发中的内存偏移问题
- 驱动笔记 - IO端口和IO内存
- 关于Android应用开发的时候内存的问题
- 关于VS中遇到System.IO.FileNotFoundException问题的解决办法
- Android的UI开发,关于dip和px的问题。
- IO端口 和 IO 内存