2,851
社区成员




请问QCS8550 linux是否支持硬件看门狗,目前看到内核下有msm-kernel/drivers/soc/qcom/qcom_soc_wdt.c驱动文件,但是其对应的{ .compatible = "qcom,msm-watchdog" }的设备树节点却找不到,请问该怎么使能内核下的硬件看门狗功能?
在主虚拟机(PVM)的情况下,看门狗完全由虚拟机监控器(hypervisor)模拟。这意味着来自PVM的任何对看门狗寄存器的访问都会被拦截并模拟。具体来说,Gunyah虚拟机监控器通过调用资源管理器虚拟机生成一个虚拟设备(vDev)。这个专为看门狗创建的vDev会将设置、喂养或重置看门狗等被捕获的事件转发到虚拟机监控器内的一个核心引擎。在这里,这些来自多个虚拟机的事件会被排队处理。
对于客户虚拟机(GVM),看门狗定时器是半虚拟化的。如下图所示,客户内核中的看门狗驱动程序会触发一个ARM SMCCC调用,然后由虚拟机监控器管理。
在PVM和GVM之间,看门狗的喂养过程略有不同。在PVM中,通过Linux内核看门狗框架建立的设备节点,由SystemD执行这项操作。相反,在GVM中,看门狗的喂养是在高通看门狗引擎内执行的,这是Linux Android使用的下游看门狗驱动程序。而在PVM中,RedHat内核使用的是上游驱动程序。
虚拟机通过喂养看门狗来重置其看门狗计数器。如果看门狗计数器到达预设的吠叫值(bark value),它会触发一个吠叫中断(bark interrupt)到中断控制器(GIC)。如前所述,这个事件会被排队处理。虚拟机监控器在检测到即将到来的看门狗中断后,会检查队列的头部,并向相应的虚拟机生成一个虚拟中断(vIRQ)。
如果任何虚拟机在收到吠叫中断后未能喂养其看门狗,就会导致看门狗咬合事件(bite event)。对咬合事件的处理取决于目标虚拟机。如果咬合事件来自GVM,它被认为是可恢复的。PVM中的vmm_service会与虚拟机监控器和资源管理器虚拟机协同工作,清理PVM与崩溃的GVM之间的通道并重新启动VMM。更多的细节将在下一张幻灯片中提供。然而,如果咬合事件来自PVM,它被认为是不可恢复的,并会启动系统重置。
虚拟机监控器自身的看门狗咬合事件会被Trustzone接收,最终会重置整个系统。
总结:
虚拟机监控器虚拟化看门狗功能并驱动物理看门狗
每个虚拟机都有自己独立的虚拟看门狗
虚拟机可以独立设置吠叫和咬合超时并喂养看门狗
咬合行为可以按虚拟机配置
选项1(对于主要和关键虚拟机):通过触发物理看门狗咬合来使系统崩溃
选项2(对于非关键虚拟机):停止虚拟机并将咬合事件报告给其VMM(通常是主要虚拟机的一个组成部分)
虚拟机看门狗API基于SMC
等效于MSM™芯片组的WDT硬件寄存器访问
Linux驱动程序已移植到这个SMC API