总体流程
![](https://i-blog.csdnimg.cn/blog_migrate/3767ad684dbc6898d514a0863a5a64ab.png)
(1) IO内存申请
要使用某个外设前,要申请其所对应的IO内存,表明驱动要访问这块区域。
![](https://i-blog.csdnimg.cn/blog_migrate/19460e134e82b41263667a32c2de1042.png)
(2)内存映射和和读写
1、在内核中访问IO内存(通常是芯片内部的各个I2C,SPI, USB等控制器的寄存器或者外部内存总线上的设备)之前,需首先使用ioremap()函数将设备所处的物理地址映射到虚拟地址上
ioremap()与vmalloc()类似,也要建立新的页表,不进行vmalloc()中所执行的内存分配行为
映射的虚拟地址位于vmalloc 映射区域,
![](https://i-blog.csdnimg.cn/blog_migrate/3d7c049d17f757a28d73777048f2a208.png)
2、使用readb,writeb读写
![](https://i-blog.csdnimg.cn/blog_migrate/d5512a414e4a0590c102f6e6c503ff24.png)