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