I/O端口和I/O内存
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的形式来完成的,x86平台的I/O也可以映射到内存,即通过I/O内存的方式来读写。
阅读(1274) | 评论(0) | 转发(0) |