C
架构考虑因素
Qt 安全渲染器运行时组件旨在集成到具有独立进程的安全关键功能和非安全功能的系统中。本主题描述了 Qt 安全渲染器运行时的基本架构方面。
Qt 安全渲染器的商业客户可以访问模块架构和设计文档。这些文档提供了关于 Qt 安全渲染器结构和架构的更详细信息。将 Qt 安全渲染器安装到主机平台后,您可以在以下位置找到这些文档:<Qt 安装目录>/Docs/QtSafeRenderer-<版本>/。
有关将 Qt 安全渲染器运行时组件集成到系统中的更多信息,请参阅集成 Qt 安全渲染器。
安全关键功能分区
Qt 安全渲染器运行时组件针对底层系统研究了多种架构模型。在所有类型的底层架构模型中,Qt 安全渲染器监视主 UI 状态,即包含所有非安全 UI 元素的所有非安全 UI。主 UI 中的错误不会影响安全关键信息的渲染。相反,Qt 安全渲染器在检测到错误后重新启动主 UI。由于 Qt 安全渲染器运行时和主 UI 在独立进程中运行,主 UI 功能不依赖于 Qt 安全渲染器运行时。
Qt 安全渲染器接收定期的心跳信号,指示主 UI 正在运行。如果心跳信号超时,Qt 安全渲染器认为主 UI 不再运行。
注意:应用程序开发人员必须在应用程序端实现心跳处理。Qt 安全渲染器不会自动处理。有关更多信息,请参阅哨兵:渲染安全关键 UI示例。
Qt 安全渲染器仅负责将安全内容渲染到屏幕。使用底层系统提供的合成器渲染非安全内容。
架构选项
结合 Qt 和 Qt 安全渲染器的系统软件架构将一个 CPU 虚拟分成两部分。根据使用的操作系统以及所需的职能安全认证水平,这可能在操作系统本身内完成。如果不可能,则添加 hypervisor 可以保持每个部分的软件彼此隔离。在任何情况下,目标是对较小部分进行职能安全认证,而剩余的软件可以使用标准做法和现有方法构建。
使用外部监视器组件可以在 QM 硬件上运行 Qt 安全渲染器。控制监视功能与渲染过程在独立硬件上运行。该监视器根据输出 CRC 值验证渲染输出,并将结果与预期的 CRC 相比较。 输出监视器需要支持输出 CRC 计算的硬件。
有关架构模型的其他信息,请参阅 Qt 安全渲染器架构文档和白皮书:职能安全与 Qt。
推荐架构
我们对于使用Qt安全渲染器的应用程序架构的推荐是,渲染应用程序中应只有一个线程。系统代理进程接收系统事件,并通过事件队列控制Qt安全渲染器进程。
注意: 在开发安全关键型应用程序时,应该避免动态内存分配,因为内存可能会导致损坏。相反,您应该遵循覆盖动态内存分配和其他安全方面的MISRA C++编码标准。
消息接口
Qt安全渲染器负责在其自己的进程中渲染安全关键型UI。Qt安全渲染器使用其消息接口通过系统总线与非安全部分的UI和底层系统进行通信。但是,系统总线通信保护不是Qt安全渲染器功能的组成部分。当您将Qt安全渲染器集成到自己的系统中时,您必须自己注意系统总线通信保护。
主UI产生的心跳信号定期发生。它通知Qt安全渲染器非安全分区正在运行。如果心跳信号超时,Qt安全渲染器假定非安全分区不再处于已知良好状态。如果心跳信号停止,应用程序开发者需要决定如何处理这种情况。Qt安全渲染器即使在心跳信号停止的情况下也会持续渲染安全关键型UI元素。
主UI可以请求定位安全关键型UI元素。非安全分区可能请求在目标设备上放置UI元素在特定的位置。Qt安全渲染器忽略非法位置请求,并根据布局数据的健全性检查失败的方式抛出异常。Qt安全渲染器的适应可以捕获并忽略非法布局或发送关于它们的错误消息。
有关将Qt安全渲染器集成到您的系统时必须考虑的消息接口问题,请参阅集成Qt安全渲染器的详细信息。
以下与消息接口相关的Qt安全渲染器类:
设计和实现约束
Qt安全渲染器的设计和实施有以下约束:
- 如ISO 26262第6部分中的表3所推荐,模块结构尽可能小且集中。
- 初始化后,不允许动态内存分配。
- 安全渲染进程只有一个线程。
- 尽可能遵循静态配置技术而非动态配置技术。因此,编译时配置优先于运行时配置。
- 编码遵循MISRA C++指南的安全系统。
注意: 遵循MISRA C++指南的类包含在
SafeRenderer
命名空间中。Qt安全渲染器安装部分包含的示例代码并不完全遵循MISRA C++指南。
Qt安全渲染器系统要求
为了使用Qt安全渲染器,目标设备系统必须满足以下要求:
- 系统必须支持安全和非安全功能之间的分区。
- 必须能够独立渲染与安全相关的图形输出。
- 必须能够同时渲染安全和非安全图形输出。
可在某些Qt许可证下使用。
了解更多。