http://blog.csdn.net/gzliu_hit/article/details/7091490
寄存器与ram的区别:
寄存器的操作有副作用(side effect),如有些状态寄存器,读取后便会自动清零。
X86:支持I/O空间,支持内存空间
ARM,MIPS,POWERPC:只支持内存空间
I/O端口:一个寄存器或内存位于I/O空间
I/O内存:一个寄存器或内存位于内存空间
I/O端口的操作:
(1)申请
request_region(start,n,name)
(2)访问
8位:inb(), outb()
16位:inw(), outw()
32位:inl(), outl()
(3)释放
release_region(start,n)
I/O内存的操作:
(1)申请
request_mem_region(start,n,name)
(2)映射
void __iomem *ioremap(unsigned long offset, unsigned long size);
(3)访问
8位:ioread8(), iowrite8()
16位:ioread16(), iowrite16()
32位:ioread32(), iowrite32()
老版本:
readb, readw, readl
writeb, writew, writel
(4)释放
void iounmap(volatile void __iomem *virtual)
release_mem_region(start,n)
对于arm,powerpc来说,只有I/O内存操作,可以映射到一个虚拟地址,然后用访问指针的方式来读写,而不用ioread等。