控制硬件正常工作需要对硬件的寄存器进行读写,而硬件寄存器的地址属于物理内存地址,而驱动是加载在内核空间,内核空间属于虚拟内存,二者相互独立,所以想要在驱动中操作硬件寄存器,需要通过某种方式将硬件寄存器的物理内存映射为虚拟内存
#include <linux/io.h>
void *ioremap(phys_addr_t paddr, unsigned long size)
功能:将指定大小和地址的物理内存映射为虚拟内存
参数:
返回值:映射成功的虚拟内存首地址
#include <linux/io.h>
void iounmap(const void __iomem *addr)
功能:取消物理内存的映射
参数:addr:映射成功的虚拟内存首地址
返回值:无