内存映射I/O(MMIO)是PCI规范的一部分,它允许I/O设备被放置在内存空间而不是I/O空间。从处理器的角度看,内存映射I/O后系统设备访问起来和内存一样。

在Linux系统中,有两种主要的方式可以访问外设I/O内存资源:动态映射(ioremap)和静态映射(map_desc)。动态映射是通过内核提供的ioremap函数动态创建一段外设I/O内存资源到内核虚拟地址的映射表,从而可以在内核空间中访问这段I/O资源。
另一种方式是静态映射,它在设备打开或驱动模块被加载时,申请IO端口区域并使用ioport_map()映射到内存,之后使用IO内存的函数进行端口访问,最后,在设备关闭或驱动模块被卸载时释放IO端口并释放映射。