嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读 > 基于Cortex-R52架构的MCU虚拟化特性

基于Cortex-R52架构的MCU虚拟化特性

关于ARM Cortex

ARM Cortex系列分为三类:Cortex-A,Cortex-R,Cortex-M。

其中,基于Cortex-A的处理器适合运行对性能有极高要求的系统,如果是有比较高性能的同时,还需要保证实时性,则适合采用Cortex-R架构的处理芯片,Cortex-M则适合其他应用于嵌入式系统的微控制器芯片。[1]

关于ARM Cortex-R52

作为基于ARMv8-R架构下的第一款R核处理器,Cortex-R52拥有4个核心,采用16纳米工艺,最高时钟频率为1.6GHz。[2]

R52是一款32位的高性能实时处理器,拥有极高的功能安全标准,同时也极具灵活性,4个核心既可以独立运行,也可以配置为至多4核锁步或者split-lock。R52拥有两级MPU,各自可设置24分区,分区最小可以为64字节。

Cortex-R52支持硬件强制(hardware-enforced)软件分离功能,以确保需要绝对安全的代码被完全隔离。这使得硬件可由软件管理程序管理,监督任务的执行和资源分配。通过精准且完善的软件分离,Cortex-R52减少了必须通过安全认证的代码量,简化了软件集成、维护和验证,从而加快了研发进程。[3]

NXP S32Z与ST SR6P7G7

近期关注到的S32Z,就是采用了Cortex-R52架构,另外,SR6P7G7则采用的是Cortex-R52的升级版Cortex-R52+。(关于R52/R52+的区别,请参考链接[4])

本文不对这两款芯片做具体解读,但选用这两款芯片的场景下,应该不会错过基于ARMv8-R的新特性,也即本文将主要介绍的虚拟化特性,能够帮助开发者有效合理地将多个传统分布式ECU的功能集成在一个控制器中[5]。例如,基于这个特性,开发者可以将不同的功能安全等级要求,信息安全等级要求,需要OTA升级的软件,划分到不同的虚拟机中做强隔离。

两种虚拟机?

由于不同的来源对于嵌入式虚拟机的说法有一些稍许区别,但从技术上,主要分为两种:Hypervisor以及Separation Kernel。

Hypervisor

Hypervisor,也被称为虚拟机监视器(virtual machine monitor, VMM),作为电脑软件,固件或者硬件,可以创建并运行虚拟机。被hypervisor用来执行一个或多个虚拟机的电脑称为宿主机(host machine),这些虚拟机则称为客户机(guest machine)。Hypervisor 提供虚拟的作业平台来执行客户操作系统(guest operating systems),负责管理其他客操作系统的执行阶段;这些客户操作系统,共同分享虚拟化后的硬件资源。[6]由于Hypervisor分离了各虚拟机,各虚拟机内部的动作并不会影响其他虚拟机。

从VM使用资源的角度,可以将Hypervisor分成两类:Type-1与Type-2。Type-1的Hypervisor直接运行在物理硬件上(有时也称之为裸机虚拟器或者本地虚拟机),Type-2的Hypervisor直接运行在一个操作系统(该操作系统运行在物理硬件)上面。[7]

Type-1 Hypervisor需要硬件支持,运行效率高,Type-2 Hypervisor就像其他计算机程序一样运行在操作系统上,运行效率较Type-1比要低。[6]

Hypervisor提供硬件资源的虚拟化,根据技术的不同,可以分成完全虚拟化技术(Full Virtualization)和半虚拟化技术(Paravirtualization),区别就是半虚拟化需要修改Guest OS,能够将一部分API操作无需借助Hypervisor进行翻译,直接与硬件交互。

完全虚拟化技术

半/准虚拟化技术

Separation Kernel

无论是使用何种类型的Hypervisor,为了提供虚拟化技术,都需要消耗一定的系统资源。为了在嵌入式领域也能引入虚拟机的概念(嵌入式领域也能称之为分区,partition),一种特别类型的Hypervisor就是Separation Kernel(隔离内核)。

隔离内核仅仅做隔离,没有设备驱动/用户模型/shell访问/动态内存,如有需要,这些都是在虚拟机里的客户程序中实现的。如此,隔离内核可以实现的非常精简,定义好固定的虚拟机(以及分配资源),控制消息交互流就可以了。[8]

隔离内核的代码量精简的优势即是,更容易实现并验证它是安全的,这在当前需要保证高等级功能安全的车载系统中尤为重要。由于无需提供虚拟化,虚拟机对于硬件的操作无需内核翻译,如果没有虚拟机间的消息请求,隔离内核在运行时甚至可以认为是“不存在的”,各虚拟机可以拥有与之前没有差异的实时表现。

Why Cortex-R52?

根据前文所说,为了在一个MCU上运行所谓的多个程序,需要有Hypervisor,Guest OS(in VM)以及上层应用。为了对硬件资源有不同的控制权限,Cortex-R52(基于ARMv8)提供三级Exception level,也即EL0-EL2。

Exception Level

EL0拥有最低的软件执行权限,也被称作为非特权执行,EL1与EL2拥有更高的软件执行特权,而在EL2级别,则提供处理器虚拟化特性。触发一个exception,或是从某一个exception返回,软件执行可以在不同的EL间转移,触发exception只能触发当前级别或者更高等级的exception,无法降级,如果是从某一EL返回,只能保持在当前EL级别或者降到更低等级的EL。另外,无法触发一个目标EL等级为EL0的exception。[9]

这样,一般地,Hypervisor运行在提供处理器虚拟化的EL2级别,Guest OS运行在EL1级别,而各个上层应用程序则运行在EL0级别。

两级内存保护

除此之外,R52(或者说ARMv8-R核心)支持两级MPU,EL-1 MPU和之前在其他芯片上使用的MPU功能一样,但是R52新增的EL-2 MPU既可以提供EL2级别对于存储的访问保护(stage 1),也能提供从EL1/EL0级别的存储访问请求的保护(stage 2)。R52支持两级保护的地址转换。

中断虚拟化

HCR(Hyp Configuration Register)和GIC(Generic Interrupt Controller),都会使用到虚拟中断。

Hypervisor使用虚拟中断将中断分发到对应的guest OS,对于guest OS来说,处理中断和处理物理中断没有区别。

虚拟中断只能由EL2级别创建。

如果设置了HCR,由hypervisor捕获exception,当exception被捕获于EL1/EL0,CPSR寄存器的F(FIQ mask bit)/I(IRQ mask bit)/A(Asynchronous (imprecise) abort disable bit)标志位会被忽略,程序会立即跳转到对应EL2的exception handler。

当某一exception配置为EL2捕获,且发生在EL2/EL1/EL0程序执行时,标志位F/I/A会起作用。F/I/A作为掩码来确定EL1/EL0的虚拟中断或者EL2的物理中断是否会被当做exception处理。

如果没有设置HCR去捕获exception,那么EL1发生的exception仍旧由EL1处理。

对于GIC,它会对中断进行分发,例如将外设产生的SPI(shared peripheral interrupts,共享外设中断),转发到一个具体核心上,或是将某一核心触发的SGI(software generated interrupts,软件生成中断)分发到另外一个核心,作核间通信用。

除此之外,还有PPI(private peripheral interrupts,私有外设中断),只能在某一个核心中存在,无法被其他核心接收到。

由于虚拟中断的存在,GIC可以将某一物理中断关联到某一虚拟中断,并进行分发到某一个核心上。虚拟中断可以独立存在,不需要一定对应到物理中断。

虚拟定时器

不同的guest OS拥有各自的虚拟定时器,且仅在各自guest OS活动状态下才记录时间。例如某一10秒时间内,有两个guest OS分别执行了5秒,那么各自的定时器也只会记录5秒的时间。

虚拟机ID

为了区分虚拟机的不同,Hypervisor会为不同的虚拟机分配不同的ID,当guest OS访问外设时,总线上会有ID信息,这样就可以根据访问限制进行请求过滤了。对于每个设备或寄存器,都由SMPU(System Memory Protection Unit)进行保护。

寄存器备份

创建虚拟机的一个重要部分是,guest OS能够被暂停执行,之后再恢复。当暂停执行时,虚拟机的状态必须被保存下来,由hypervisor作备份。如果需要再次激活guest OS的执行,hypervisor会从备份中恢复寄存器信息。如下方两张图所示,Action1/2交替执行。

EB/Vector/ETAS的产品?

关注领域有限,此处仅记录部分AUTOSAR供应商所提供的MCU端Hypervisor产品。

EB:EB tresos Embedded Hypervisor – Elektrobit (Separation Kernel/Hypervisor)

ETAS:RTA-LWHVR - RTA Software Products - ETAS(Separation Kernel/Hypervisor)

Vector:Safe and Efficient Virtualization With MICROSAR Classic veHypervisor | Vector(Separation Kernel/Hypervisor)

括号内注释仅根据官方页面内容记录推测其产品所支持范围,如有错误还请指正。

参考

  • ^Which ARM Cortex Core Is Right for Your Application: A, R or M? https://www.silabs.com/documents/public/white-papers/Which-ARM-Cortex-Core-Is-Right-for-Your-Application.pdf

  • ^Cortex-R52 Technical-Specifications https://developer.arm.com/Processors/Cortex-R52#Technical-Specifications

  • ^ARM推出面向无人驾驶的安全处理器Cortex-R52 https://www.eet-china.com/news/201609210921.html

  • ^What are the major differences between Cortex-R52 and Cortex-R52+ https://developer.arm.com/documentation/ka005377/1-0/?lang=en

  • ^高效的多ECU集成:基于恩智浦S32实时处理器和虚拟机的多应用开发 https://www.nxp.com.cn/pages/multi-application-hosting-and-virtualization-on-s32-real-time-processors-for-effective-multi-ecu-consolidation:TIP-S32ZE-TRAINING-CN

  • ^abHypervisor https://en.wikipedia.org/wiki/Hypervisor

  • ^嵌入式虚拟化技术 http://www.prtos.org/embedded-hypervisor/

  • ^WHAT IS A SEPARATION KERNEL? https://www.lynx.com/embedded-systems-learning-center/what-is-a-separation-kernel

  • ^Exception levels https://developer.arm.com/documentation/100026/0104/Programmers-Model/Armv8-R-AArch32-architecture-concepts/Exception-levels?lang=en