[A-24][V-09]ARMv8/v9-SMMU工作场景与SMMU的虚拟化架构

ver0.1

[看前序文章有惊喜,关注W\X\G=Z+H=“浩瀚架构师”,可以解锁全部文章]

前言

我们在介绍ARM的内存体系的时候,行文中经常讲MMU比作PE-Cores的带刀护卫。按照这个逻辑,那么SMMU也可以称之为总线上各个Master(设备)的带刀护卫,利刃出鞘之后,任何驱动送过来的地址都会被翻译成正确的物理地址、内存中数据也会得到相应的保护、共享SMMU的各个设备也会和睦相处,任何不安守本分的行为都会被惩罚,抛出异常让CPU这个总司令去处理。虽然大家同为带刀护卫,但是工作的场景还是有所区别的,前面我们虽然做了一些介绍,但是偏于原理性质的居多。本文我们会结合具体上下文,讲述一下SMMU在不同的阶段是如何工作的,以及这些工作的意义。最后我们打算花一点时间,简要介绍一下独立形态工作的SMMU的虚拟化架构。俗话说谁还不是个宝宝,就算是好兄弟也是有所区别的,希望大家对SMMU这个设备架构了解之后,能建立起对SMMU正确的认知,毕竟人和人还是不一样的。

同样的道理,SMMU的相关背景知识,我们已经写了三篇文章做了介绍。还没有看过的同学,建议大家不着急越读本文,先去看看前序的文章,建立起对SMMU的感觉。
(1) [A-21]ARMv8/v9-SMMU系统架构和功能概述
(2) [A-22]ARMv8/v9-SMMU多级页表架构
(3) [A-23]ARMv8/v9-SMMU-设备虚拟地址翻译(设备页表映射)

正文

前文中已经介绍了SMMU的工作模式,SMMU是支持两级地址翻译的,但是经过Bypass的配置可以实现多种组合的工作方式。下面我们先进入SMMU只工作在Stage-1阶段模式的场景,在这个基础上再介绍SMMU工作在Stage-2阶段模式的场景。

1.1 Stage-1 USE Case(Linux Kernel中的SMMU)

我们结合Linux系统来说明SMMU的在Stage-1阶段的用法。原因是Linux是宏内核且开源,EL0/El1空间界限相对清晰,帮助文档比较完善,而且都是业界的顶级公司和大牛在做长期维护,质量和水平那是绝对值得信赖的。看一下Kernel中一个比较经典的例子,如图1-1所示。
1-1

图1-1 High-Level DMA ARCH IN Kernel

Kernel的Document中对这个例子有如下的描述:

• During the enumeration process, the kernel learns about I/O devices and their MMIO space and the host bridges that connect them to the system. For example, if a PCI device has a BAR, the kernel reads the bus address (A) from the BAR and converts it to a CPU physical address (B). The address B is stored in a struct res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值