根据CPU架构的不同,其外设的映射分为两种:memory-map i/o和port-map i/o
这两种映射方式的主要区别:
memory-map i/o:RAM和设备寄存器统一编址,使用同样的访问方式,嵌入式多使用
port-map i/o:RAM和设备寄存器独立编制,使用不同的访问方式,并且对于外设的访问,使用的指令周期要多些,X86比较多
设备驱动程序调用接口:
memory-map i/o:
申请和释放端口:request_region/release_region
对端口进行操作:inb/ine/inl/wtiteb.......
port-map i/o:
申请外设寄存器的RAM地址:request_mem_region/release_mem_region
物理地址重映射:ioremap
对i/0进行操作:ioread8....../iowrite......
为了使port-map i/0兼容memory-map i/o,实现port到mem的map,当然首先要申请port,然后调用ioport_map
物理地址重映射的目的是因为kernel使用的是虚拟地址,必须把物理地址映射成虚拟地址才能被kernel使用,这是MMU的概念了。