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等。