Arm 推出了功能安全运行时系统(FuSa RTS),这是一组经过安全认证的软件组件,对于 Arm Cortex-M 设备上的软件开发至关重要。下图突出显示了嵌入式系统中的 FuSa RTS 组件。
Arm FuSa RTS 包括一个强大的实时操作系统 (FuSa RTX RTOS)、一个独立的处理器抽象层 (FuSa CMSIS-Core)、一个经过验证的 FuSa C 库和用于 RTOS 感知和事件跟踪的 FuSa 事件记录器。
FuSa RTS 所提供的优势受到用户的好评,我们很高兴看到它被广泛应用于各种医疗、汽车和工业应用中。
进程隔离
基于 Arm Cortex-M 架构的现代微控制器功能非常强大,并且通常具有灵活的内置通信外设,例如 CAN、以太网和无线接口,以及 LCD 图形支持等。
通常,仅使用一个具有单核的微控制器来执行与安全相关的功能(例如胰岛素泵控制、紧急停止按钮)以及执行从安全角度来看并不重要的功能(蓝牙用于记录的通信,用于用户通知的 LCD 显示屏)。
对于这种工作方法,必须确保非安全部分(或完整性级别较低的部分)不会影响应用程序的安全关键部分(或完整性级别较高的部分)的操作。
我们分析了有关如何为 FuSa RTS 项目提供最佳支持的不同概念。经过数月的广泛实施、验证和文档工作,我们很高兴在即将发布的 FuSa RTS 版本中引入流程隔离功能,这将支持此类用例。
好处
在单个 MCU 上将具有不同软件要求(或软件完整性级别)的软件组件组合在一起具有以下优势:
它通过添加功能丰富的功能来增加产品价值和差异化。
它通过节省系统中的第二个 MCU 来减少物料清单 (BOM)。
它可以通过降低系统部分的安全要求来重用其他项目的代码,并集成第三方组件。
它通过一个项目和 RTOS 控制所有组件,从而简化了软件开发。
FuSa RTS 中的工作原理
即将发布的 FuSa RTS 版本实现了一组功能,以保护应用程序的关键部分免受应用程序其他部分中可能存在的软件缺陷的影响:
MPU 保护区允许对处理器内存和外围设备进行访问限制。
安全类为 RTOS 对象启用额外的访问控制。
线程看门狗确保线程可以在其时序约束内执行。
系统恢复允许在发生故障时控制系统运行。
MPU 保护区
许多 Cortex-M 设备上都提供了内存保护单元 (MPU),可以限制对内存区域和外设的访问。它用于实现应用程序进程之间的空间隔离。
在 FuSa RTX 中,RTOS 线程被分配到 MPU 保护区,然后只能访问其中指定的内存区域,并且不会意外修改位于其他受保护内存区域的关键 RTOS 内核数据或线程对象。可以分配共享区域并将它们用于跨不同线程的数据交换。概念如下图所示。
CMSIS-Zone简化了系统分区并允许在用户友好的图形环境中定义 MPU 保护区。
安全等级
此外,安全类支持对使用 RTX 内核分配的 RTOS 对象的访问控制。包括线程在内的所有 RTOS 对象都被分配了一个安全等级值。属于较低安全等级的线程不能修改较高安全等级的 RTOS 对象。因此,应将应用程序的安全关键部分分配给更高的安全等级。
线程看门狗
所有 RTOS 线程共享处理器的计算时间。因此,必须控制其使用以避免对安全关键功能的执行产生不良影响(时间隔离)。
在 FuSa RTS 中,每个线程都可以维护自己的线程看门狗。如果发生时序违规,则会引发线程看门狗警报。下图显示了一个示例:
系统恢复
当发生故障(例如 HardFault、内存访问冲突或线程看门狗警报)时,FuSa RTS 会阻止非关键部分的执行或进入安全状态。RTOS 内核可以暂停线程执行,例如对于较低安全等级的线程。这可用于恢复关键线程操作的执行。对于 FuSa RTS,我们提供了一个示例来演示该概念。
概括
Arm 的功能安全运行时系统 (FuSa RTS) 已经支持并极大地简化了安全关键系统中 CMSIS-RTOS 和相关组件的使用。随着 MPU 保护区、安全等级、线程看门狗和系统恢复等进程隔离功能的引入,用户将能够在单个微控制器内核上安全地执行关键和非关键功能。
原作者:弗拉基米尔·马尔琴科