rk356x 内存映射(iommu)

rk356x 内存映射(iommu)

本篇文章来详细、深入对 Rockchip RK3568 芯片中的 IOMMU 进行讲解。

  1. 什么是 IOMMU?
    IOMMU 是 输入输出内存管理单元。你可以将它理解为连接在系统总线和内存之间的一座“智能桥梁”,专门用于管理设备对内存的访问。

类比 CPU 的 MMU:CPU 有一个 MMU,它将进程的虚拟地址转换为物理地址,实现了进程间的内存隔离和保护。IOMMU 为外部设备提供了类似的功能,它将设备的“虚拟地址”(通常称为 IOVA 或 DMA 地址)转换为物理地址

  1. 为什么需要 IOMMU?
    在没有 IOMMU 的传统系统中,设备进行 DMA 操作时,需要直接使用物理地址。
  • 安全隐患
    一个被恶意控制或存在 Bug 的设备可以通过 DMA 写入或读取系统任何物理内存,包括内核、其他应用程序的敏感数据,这被称为 DMA 攻击。
    IOMMU 可以限制某个设备只能访问预先分配给它的特定内存区域,就像防火墙一样,从而将设备“关在笼子里”。

  • 内存碎片化问题
    设备 DMA 需要连续的物理内存缓冲区。在系统长时间运行后,要分配大块的连续物理内存会非常困难。
    IOMMU 可以将多个不连续的物理内存页,映射为一段连续的“设备虚拟地址”提供给设备。设备以为自己是在访问连续内存,而实际上 IOMMU 在背后完成了分散-聚集的操作。这大大减轻了驱动开发人员分配连续物理内存的压力。

  • 简化驱动开发
    驱动程序可以使用任意的内存(如用 kmalloc、vmalloc 分配的)来进行 DMA,无需关心其物理地址是否连续。IOMMU 会处理好地址映射。

  • 支持 32 位设备在 64 位系统上工作
    一个只支持 32 位地址的设备,在 64 位系统中无法直接访问高于 4GB 的物理内存。IOMMU 可以将高地址的物理内存映射到设备能寻址的 32 位地址范围内,从而突破此限制。


提示:。


前言

RK3568 IOMMU 的架构与特点
RK3568 的 IOMMU 实现遵循 ARM System MMU (SMMU) 架构,具体是 SMMUv2 的简化版本。它的设计不是一个大而统一的 IOMMU,而是多个分布式的、与特定 IP 核绑定的 IOMMU 单元。
接下来简单说明 IOMMU 主要组成部分。

  1. 多个独立的 IOMMU 控制器:
    RK3568 为不同的主设备(如 GPU、VPU、VDPU 等)配备了独立的 IOMMU。每个 IOMMU 只服务于一个或一组特定的主设备。

常见的 RK3568 IOMMU 包括:

iommu 单元 描述
iommu@fe043e00 服务于 GPU (Mali-G52)
iommu@fe044000 服务于 VPU (视频处理器,如 H.264 编码器)
iommu@fe044800 服务于 VDPU (视频处理器,如 H.265/H.264 解码器)
iommu@fe046000 服务于 RGA (2D 图形加速器)
iommu@fe04a000
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值