当前位置: 首页 > news >正文

linux驱动:(7)物理地址到虚拟地址映射

单片机、裸机、linux操控硬件方法

在单片机和裸机中操作硬件是通过指针来对寄存器赋值来进行操控 

但对于linux中不能这样,不能直接对物理地址直接修改,因为linux使能了mmu,所以不能直接菜操作物理地址

如果要操作硬件,需要先把物理地址转换成虚拟地址

使能mmu的好处

  • 让虚拟地址成了可能
  • 可以让系统更加安全,上层应用看到的都是虚拟内存,不能直接访问硬件

物理地址到虚拟地址映射函数

内核提供了几个函数,定义在源码根目录中的include/asm-generic/io.h

ioremap:物理地址转为虚拟地址

iounmap:把映射的地址释放掉

static inline void _iomem *ioremap(phys_addr_t offset,size_t size)
static inline void _iomem *ioremap(void _iomem *addr)

参数

  • phys_addr_t offset:是映射物理地址的起始位置
  • size_t size:要映射多大的内存空间
  • void _iomem *addr:要取消映射的虚拟地址的首地址

返回值

  • ioremap:成功返回虚拟地址的首地址,失败返回null

注意

  • 物理地址只能被映射一次,多次映射会失败

查看被映射过的物理地址

输入命令:cat /proc/iomem

如果要取消某个映射就需要找到对应的驱动取消

 

http://www.lryc.cn/news/415859.html

相关文章:

  • 浏览器用户文件夹详解 - Preferences(十)
  • Robot Operating System——电池电量通知
  • 二进制安装docker
  • @SpringBootConfiguration重复加载报错
  • 【SpringBoot】数据验证之分组校验
  • MySQL Galera Cluster 部署与介绍
  • RuoYi-Vue-Plus (XXL-JOB任务调度中心二:配置管理与定时任务编写、执行策略、命令行任务、邮件报警等等
  • 【docker】虚拟化与docker基础
  • Vue3安装ffmpeg做视频截取报错
  • 如何在 Java 中实现自定义的排序算法?
  • 【Homebrew】brew 命令
  • 【https】无法安装OpenSSL时如何在局域网开通https服务
  • OpenGL实现3D游戏编程【连载1】——初探3D世界
  • 工程化实践:工程配置化设计
  • 浏览器事件循环详解
  • Linux:线程管理(线程创建、线程退出、线程回收、线程分离、其它线程函数)
  • 【JVM】常见面试题
  • 0805作业+梳理
  • Java高并发编程详解教程(对高并发更深一层的领悟和体会 电子版)
  • 字符串中的第一个唯一字符
  • leetcode数论(​3044. 出现频率最高的质数)
  • 70.加载功能菜单功能设计
  • 在线Banner设计工具大比拼:谁更胜一筹
  • C++ STL copy, move 用法
  • MoonBit 周报 Vol.52:增加类型别名的支持、错误类型声明方式说明、MoonBit AI 支持生成文档等!
  • Android开发之事件分发
  • PyTorch深度学习实战(2)——PyTorch快速入门
  • ServletConfig、ServletContext超详细讲解
  • 【文献阅读】GraphAny: A Foundation Model for Node Classification on Any Graph
  • 动态规划.