乐于分享
好东西不私藏

【功能安全软件实践】软件安全机制2–SOC安全监控

【功能安全软件实践】软件安全机制2–SOC安全监控

  • Alive监控实践

  • Deadline监控实践

  • Logical监控实践

此篇文章《【功能安全软件实践】软件安全机制2–安全监控要求从理论层面介绍了安全监控的需求导出,并且从MCU域和SOC域两个维度介绍了安全监控的相关知识点。这篇文章《【功能安全软件实践】软件安全机制2–安全监控实践》从实践的角度,介绍了MCU上安全监控的实施方法。本文将沿着前两篇文章的脉络,围绕SOC域上安全监控的实践方法进行讨论。

1. Alive监控实践

对于Alive监控,需要在监控的代码段处打点,即在周期性运行的代码段调用 ReportCheckpoint()函数(该函数为埋点函数,在需要监控的代码处调用即可,不同的厂商可能函数命名不同),函数的参数是json文件中对应checkpoint(检查点)的编号,这个需要在打点之前定义好,具体的打点示例可见图1所示的代码。

图1 Alive监控打点代码

打完点之后,需要配置好与Alive监控配置参数相关的json文件,主要需要配置的参数有:

1)Expected_alive_indications:在Alive监控的一个周期内期望检查点到达的次数。

2)Max_margin:一个Alive监控周期内检查点到达次数的上边界,具体数值等于Expected_alive_indications + Max_margin。

3)Min_margin:一个Alive监控周期内检查点到达次数的下边界,具体数值等于Expected_alive_indications – Min_margin。

4)Supervision_cycle:Alive监控周期,单位是ms。

其它更详细的配置参数的含义会在表1和表2中详细说明。

观察监控的程序段是2秒执行一次,因此正确配置的Alive参数如图2所示。

图2 Alive监控参数示例1

之后运行程序,观察控制台中程序的进程pid一直没变,说明程序一直在正常运行,如图3所示。

图3 Alive监控调试截图1

之后修改json文件的参数,将监控周期改为0.2s,此时监控的程序段执行频率和配置的不符合,如图4所示。

图4 Alive监控参数示例2

观察程序运行情况,因为配置中将程序故障恢复设置为程序重启,所以此时的进程运行频率与配置的不相符,所以程序一直在重启,进程的pid一直在变,如图5所示。

图5 Alive监控调试截图2

三种监控(Alive、Deadline、Logical)均相关的配置参数说明。

表1 Phm监控general配置参数介绍

表2 Alive相关的配置参数

总结一下,Alive针对进程的监控:

1)周期性运行:直接在周期性运行的代码段上调用ReportCheckpoint函数;

2)非周期性但一直运行的程序(如守护进程):开一个线程,周期性报告ReportCheckpoint;

针对线程的监控:打点和进程一致。

2. Deadline监控实践

Deadline监控一段程序相领两个检查点的运行时间是否超出预期,在监控代码段的首尾分别调用ReportCheckpoint() 函数,具体示例如图6所示。

图6 Deadline监控打点代码

Deadline监控需要配置的参数如表3所示。

表3 Deadline监控配置参数

由于监控的代码段运行时间是2s,所以设置最早达到时间不早于1.9s,最晚达到时间不晚于2.2s,如图7所示。

图7 Deadline监控参数示例1

运行程序,观察控制台结果,发现进程pid号一直没变,说明程序执行时间符合预期,如图8所示。

图8 Deadline监控调试截图1

改变配置参数文件,将终点的最早达到时间改为0.9s,最晚达到时间改为1s,如图9所示。

图9 Deadline监控参数示例2

改动后的参数与程序时间运行时间不符,运行程序之后会发现控制台的进程pid一直变化,如图10所示,说明Deadline监控到了程序的执行时间与预期的不符,一直在执行程序重启操作。

图10 Deadline监控调试截图2

总结一下,Deadline监控无论进程线程,在要监控deadline的代码段起始处和终止处调用ReportCheckpoint函数打点。

3.Logical监控实践

Logical主要监控程序运行的逻辑是否符合预期,对于需要监控的程序,在监控的地方先后调用ReportCheckpoint() 函数,具体实例如图11所示。

图11 Logical监控打点代码

示例程序的执行逻辑是检查点91—检查点92—检查点93—检查点94—检查点95—检查点96再到检查点91一直循环执行。Logical监控需要配置的参数如表4所示:

表4 Logical监控配置参数

正确配置的Logical配置参数json文件如图12所示。

图12 Logical监控参数示例1

运行程序,观察控制台进程pid一直不变,如图13所示,程序逻辑流监控无误。

图13 Logical监控调试截图1

修改Logical配置参数json,如图14所示。

图14 Logical监控参数示例2

运行程序,发现控制台的进程pid一直变化,说明逻辑流监控识别到了错误,进程一直重启,如图15所示。

图15 Logical监控调试截图2

总结一下,Logical监控,无论进程线程,按程序的运行逻辑分别调用ReportCheckpoint函数打点。

SOC域安全监控的故障处理措施,上面主要介绍了重启,与MCU一致,SOC域也可以通过硬件看门狗来处理。如果监控实体运行异常,则一般停止喂狗,这样硬件看门狗在计时器归0之后就会触发SOC的硬件复位。另一种处理方式是通知MCU芯片,让MCU芯片执行整体的程序流错误故障处理。

最后,请大家思考及回顾以下问题:

SOC域上的监控实体一般以什么划分?

一般以进程或线程为单位划分。

SOC域安全监控的故障处理措施是什么?

与MCU一致,SOC域也可以通过硬件看门狗来处理。

本文承接上文《【功能安全软件实践】软件安全机制2–安全监控实践》,介绍了SOC域上安全监控方案实践底层思路。与MCU域上的安全监控相同,通常可分为Alive监控、Deadline监控以及Logical监控,三种监控所诊断的程序异常不同,可根据不同组件的ASIL等级来选择做何种监控。与MCU域不同的是,SOC域可通过重启单个进程或线程的方式来恢复故障相关程序。

安全监控的开发常通过配置软件(EB)实现,开发者可基于本文介绍原理灵活配置实现。

我们功能安全团队成立于2008年,是国内较早从事功能安全技术研究的团队,作为功能安全国家标准委员会成员参与功能安全、预期功能安全标准制定,作为芯片创新联盟核心成员参与车规级自主芯片功能安全国标制定。目前有专职的功能安全技术人员80余人,团队成员大多来自985/211高校,核心项目实施团队拥有8年以上电控产品开发经验,可以提供面向量产车型开发从概念设计到正式投产的全栈功能安全咨询服务,当前已成功为国内外整车及零部件企业提供150+项工程咨询服务。

未来,我们将紧跟行业发展趋势和市场需求,结合自身汽车电子产品研发和国内外咨询实践,一如既往地坚持自主创新道路,为智能汽车安全保驾护航。

如涉及文字或图片侵权请及时与我们联系反馈,文章版权及解释权归原作者及发布单位所有,如需转载或引用文本的任何内容,请注明出处。

✌✌tips:敬爱的读者朋友们,由于微信的推送规则,即使您关注了我们,可能也常常收不到推送,记得点击”HiFusa”名片,设为星标⭐ ,文章会自动推送哦!

陈楠 | 作者

董小雨|刘天宇 | 编辑

夏信凯|陈楠 | 图片

董小雨|赵宁|常诚|邵亮 | 校审

hifusa@hirain.com | 联络/投稿

转发分享!

推荐阅读 · 其他合集

【出海合规】

【功能安全软件提效】

【功能安全芯片解析】

【功能安全方法论】

【安全机制解读】

功能安全基础知识

行业观察

AI功能安全

安全组件设计

新能源三电功能安全