青岛网站开发中心,wordpress分享,购物网站模板html,公司网站开发语言目录
1.中断虚拟化的困惑
2.从R52入手
3.小结 1.中断虚拟化的困惑
在车控类控制器里#xff0c;中断对于我们来说是非常宝贵的资源#xff0c;可大幅提高系统实时性。
这些中断基本都属于实际物理硬中断(软中断另说)#xff0c;例如对一个按键按下的中断响应#xff0…目录
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具有完整资源访问权限主要运行HypervisorEL1除了不能访问Hypervisor相关寄存器其余均可访问EL0权限有限同时新增了两级MPU为虚拟化奠定基础其推荐用法如下 关于中断R52使用GIC进行路由概念如下 SPIShared Peripheral Interrupts由外设产生的中断需路由给目标核PPIPrivate Peripheral Interrupts内核内部产生的中断如TimerSGISoftware 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等物理中断产生被路由到HypervisorHypervisor 配置GIC ICV()相关寄存器产生虚拟中断返回EL1 OSOS从虚拟GIC相关寄存器读取中断信息处理中断
3.小结
其实不管内核怎么变针对中断虚拟化无非就是上面两种要么透传给VM要么由Hypervisor统一分发。
那么作为车规MCU龙头的英飞凌在TC4xx是如何考虑中断虚拟化的呢