Linux 内存地址映射函数

Last edited
Last updated July 5, 2023
Pages
Tags

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:映射成功的虚拟内存首地址
返回值:无