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

Linux内存从0到1学习笔记(8.17 SMMU Fault调试方法)

写在前面

通过前面的介绍,我们知道了SMMU实际上是一个针对外设的MMU。它作为一个硬件IP被设备执行DMA操作时使用。

再来简单回顾下SMMU的工作流程:

外设 ---> DMA操作 ---> SMMU ---> Memory

也就是说,通常情况下驱动程序会先分配DMA Buffer ---> 然后执行SMMU映射,并得到IOVA ---> 驱动在设置IOVA到设备(也就是告诉设备Buffer的位置) ---> 设备驱动开始执行DMA操作 ---> 设备通过SMMU访问分配的DMA Buffer。

一,SMMU Fault简介

什么是SMMU Fault,从字面上可以理解为SMMU访问错误,访问错误的情况有很多,地址本身无效,或地址是非法地址等等。

我们知道SMMU是被用来将IOVA翻译成物理地址PA,那么总结下来常常会遇到下面几种情况:

  1. 驱动可能给到设备的是一个无效的IOVA(Invalid Address)。
  2. 驱动复用了已经free或unmap的IOVA(Use After Free)。
  3. 驱动程序给到的设备Buffer Size大于Buffer实际大小,即OOB(Out Of Boundary)。

以Camera为例,当Camera需要传数据时,获取到当前的缓冲区对应的DMA内存地址(IOVA)后,通过SMMU相对应的RAM地址传输数据。当Camera驱动通过SMMU网对应的DMA地址发送数据时,其数据大小超过了预分配的Buffer Size,SMMU发现对应的DMA地址并没有映射到物理地址中,就会出现上面所述第三种情况的SM

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

相关文章:

  • 讲座学习截图——《CAD/CAE/CAM几何引擎-软件概述》(一)
  • 鸿蒙开发系统基础能力:【@ohos.hichecker (检测模式)】
  • WordPress CDN是什么?CDN有什么作用?
  • 【containerd】Containerd高阶命令行工具nerdctl
  • Spring+SpringMVC+MyBatis整合
  • springboot+vue+mybatis穷游管理系统+PPT+论文+讲解+售后
  • ClickHouse备份方案
  • windows启用和禁用内存压缩
  • MATLAB-振动问题:单自由度无阻尼振动系统受迫振动
  • 示例:WPF中应用DependencyPropertyDescriptor监视依赖属性值的改变
  • 链家房屋数据爬取与预处理-大数据采集与预处理课程设计
  • 一种502 bad gateway nginx/1.18.0的解决办法
  • 二叉树第一期:树与二叉树的概念
  • vue跨域问题,请注意你的项目是vue2还是vue3
  • 大厂晋升学习方法一:海绵学习法
  • 【ARMv8/v9 GIC 系列 4.2 -- GIC CPU Interface 详细介绍】
  • 小抄 20240619
  • 【06】数据模型和工作量证明-工作量证明
  • VBA递归过程快速组合数据
  • 基于豆瓣电影TOP250的可视化设计
  • YOLOv8中的C2f模块
  • ESP32 双线汽车接口 (TWAI)
  • docker-compose离线安装harbor
  • 服务器“雪崩”的常见原因和解决方法 (C++)
  • 详解ES6中的类、对象和类的继承
  • 游戏遇到攻击有什么办法能解决?
  • 【LLM】GLM系列模型要点
  • 安卓开发,获取本机手机号
  • linux学习week1
  • 【React篇】父组件渲染时避免重复渲染子组件的3种处理方法