汽车MCU虚拟化--对中断虚拟化的思考(1)

目录

1.中断虚拟化的困惑

2.从R52入手

3.小结


1.中断虚拟化的困惑

在车控类控制器里,中断对于我们来说是非常宝贵的资源,可大幅提高系统实时性。

这些中断基本都属于实际物理硬中断(软中断另说),例如对一个按键按下的中断响应,对于CAN报文的接收中断响应,这些都已经玩的比较熟练了。

但当我发现MCU也能开始谈虚拟化的时候,中断开始变得有趣起来,我们以Type 1类Hypervisor为例,它结构如下图示:

假设现在系统出现一个物理中断,这个物理中断实际上是至少应该要分配给VM0-VM4中一个进行处理,由于VM是分时复用,问题就来了:

  • 中断应该由谁来进行分配?
  • 假设被分配到的VM此时还没有运行怎么办?
  • 假设被分配到的VM此时正在处理中断怎么办?

带着这些问题,我们来畅想一下关于虚拟化的中断处理,不一定准确,但先记录思考过程。

2.从R52入手

ARM Cortex-R52是Armv8-R架构,目前很多大厂用它来做MCU,目标区域控制器,原因除了高实时性之外,还有就是支持虚拟化。

该内核包含了三个异常等级EL0-EL2,其中EL2具有完整资源访问权限,主要运行Hypervisor;EL1除了不能访问Hypervisor相关寄存器其余均可访问,EL0权限有限;同时新增了两级MPU,为虚拟化奠定基础,其推荐用法如下:

关于中断R52使用GIC进行路由,概念如下:

  • SPI(Shared Peripheral Interrupts):由外设产生的中断,需路由给目标核
  • PPI(Private Peripheral Interrupts):内核内部产生的中断,如Timer;
  • SGI(Software Generated Interrupts):软件触发的中断,可以路由给不同Cluster的内核

那么当一个实际物理中断触发后,它应该给谁呢?

逻辑上讲,按照以前跑无虚拟化的AUTOSAR OS的方案,我们应该把直接把中断传给目标VM,如下图:

但是如果此时VM2没有运行,那这个中断如何处理?如果要从其他VM切换过来那意味着还得有个帮手来帮忙存储当前运行VM的上下文。如果一个物理中断是多个VM复用,这种方式就显得不合理了。

故我们可以在Hypervisor层级捕获物理中断,然后生成虚拟中断给到目标VM,如下图:

这样一看就比较合理了,事实上在R52里,可以看到针对中断虚拟化也是上述两种实现方式,与中断虚拟化相关的组件包括系统寄存器HCR(Hyp Configuration Register)、GIC(Generic Interrupt Controller)。

当我们设置HCR.IMO、HCR.FMO为1时,表示IRQ\FIQ将会在EL2等级下进行处理,

而EL2一般用于运行Hypervisor,故需要在Hypervisor里对IRQ\FIQ进行处理,即使此时VM还处于运行,也会立即跳转至EL2的异常向量中。

假设该物理IRQ需要路由给VM1,此时该怎么办呢?需要Hypervisor配置GIC CPU interface关于虚拟中断内容,如下图:

总结下来,中断虚拟化的流程基本如下:

  • 设置HCR.IMO\FMO等;
  • 物理中断产生被路由到Hypervisor
  • Hypervisor 配置GIC ICV()相关寄存器,产生虚拟中断;
  • 返回EL1 OS,OS从虚拟GIC相关寄存器读取中断信息,处理中断

3.小结

其实不管内核怎么变,针对中断虚拟化无非就是上面两种,要么透传给VM,要么由Hypervisor统一分发。

那么,作为车规MCU龙头的英飞凌在TC4xx是如何考虑中断虚拟化的呢?

相关推荐
智者知已应修善业37 分钟前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
智商偏低7 小时前
单片机之helloworld
单片机·嵌入式硬件
青牛科技-Allen8 小时前
GC3910S:一款高性能双通道直流电机驱动芯片
stm32·单片机·嵌入式硬件·机器人·医疗器械·水泵、
森焱森10 小时前
无人机三轴稳定控制(2)____根据目标俯仰角,实现俯仰稳定化控制,计算出升降舵输出
c语言·单片机·算法·架构·无人机
白鱼不小白10 小时前
stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
stm32·单片机·嵌入式硬件
S,D11 小时前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
芯岭技术14 小时前
PY32F002A单片机 低成本控制器解决方案,提供多种封装
单片机·嵌入式硬件
youmdt14 小时前
Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
单片机·嵌入式硬件
嘿·嘘14 小时前
第七章 STM32内部FLASH读写
stm32·单片机·嵌入式硬件
Meraki.Zhang14 小时前
【STM32实践篇】:I2C驱动编写
stm32·单片机·iic·驱动·i2c