1. 概述

控制硬件正常工作需要对硬件的寄存器进行读写,而硬件寄存器的地址属于物理内存地址,而驱动是加载在内核空间,内核空间属于虚拟内存,二者相互独立,所以想要在驱动中操作硬件寄存器,需要通过某种方式将硬件寄存器的物理内存映射为虚拟内存

2. API

2.1 进行物理地址的映射

#include <linux/io.h>
void *ioremap(phys_addr_t paddr, unsigned long size)

功能:将指定大小和地址的物理内存映射为虚拟内存

参数:

返回值:映射成功的虚拟内存首地址

2.2 取消物理内存的映射

#include <linux/io.h>
void iounmap(const void __iomem *addr)

功能:取消物理内存的映射

参数:addr:映射成功的虚拟内存首地址

返回值:无