MIPS、ARM和PowerPC等平台的I/O和主存采用的是统一编址的方式,它们将I/O空间映射到内存,采用与内存相同的汇编指令(load和store)来读写设备,这种方式称为I/O内存;x86平台的I/O和主存采用的是独立编址的方式,CPU有专门的线路来访问I/O,而且有专门的汇编指令(in和out)来读写设备,这种方式称为I/O端口。
Linux系统在各种平台(不管是MIPS、ARM、PowerPC,还是x86)上,都提供了文件/proc/ioports和/proc/iomem。可以cat这两个文件来查看I/O端口的分配情况和I/O映射到内存的空间范围。另外Linux还提供了相应的两个设备文件/dev/port和/dev/mem,可以读写这两个文件来访问相应的端口和内存。尽管MIPS等平台采用的是I/O内存的方式,但是也提供了ioports等文件,即可以通过函数inb()、outb()等同类函数来读写I/O端口,其实这些函数仅仅是个外壳,通过查看Linux内核源代码可以发现它们最终也是转换成readb()和writeb()来读写内存;对于x86平台,其inb()、outb()等同类函数是通过汇编指令in、out的形式来完成的。
这部分内容可以查阅《Linux设备驱动程序 第三版》第9章的相关内容来深入学习。
本文来自:http://blog.youkuaiyun.com/lanshixiong/article/details/4647253

本文介绍了不同平台(如MIPS、ARM、PowerPC和x86)上的I/O端口和I/O内存的编址机制,并解释了Linux系统如何统一处理这两种编址方式。文章还提到了Linux提供的/proc/ioports和/proc/iomem文件,以及如何通过/dev/port和/dev/mem文件来访问端口和内存。
1117

被折叠的 条评论
为什么被折叠?



