C
集成 Qt 安全渲染器
一般先决条件
为了成功使用 Qt 安全渲染器并将其集成到您的系统中,您必须具备以下关于 Qt 及相关工具的知识
- C++ 语言和面向对象软件开发经验
- 对关键安全系统中的功能和需求的知识
- 针对目标设备开发软件的经验
我们建议您了解 Qt 和 Qt 工具。如果您是我们商业客户且有关 Qt 的问题,您可以联系我们的 支持团队。如果您需要超出标准支持范围的协助,还可以使用 Qt 咨询服务。
为系统适配 Qt 安全渲染器
Qt 安全渲染器的核心部分,即 Qt 安全渲染器运行时组件,包含在 SafeRenderer
命名空间中的代码。安全性关键要求的实现仅涵盖 Qt 安全渲染器的核心部分。相关类列在 Qt 安全渲染器 C++ 类 中。
Qt 安全渲染器运行时功能永远不会更改,但 Qt 安全渲染器的某些部分是特定于系统的。例如,系统总线可以是特定于系统的,而系统事件处理器需要相应调整。此外,图形系统依赖于用于目标设备的硬件。
如果您需要为 Qt 安全渲染器参考实现不支持的系统进行适配,则以下组件可能需要根据每个系统进行适配
- 用于安全关键分区和非安全分区之间通信的接口
- 心跳消息。如果心跳超时,应用开发者需要自行决定如何处理该情况。即使没有收到心跳消息,Qt 安全渲染器也会继续正常渲染安全性关键 UI 元素。应用开发者可以配置心跳消息间隔。
- 定位消息
- 有关消息接口的更多信息,请参阅 SafeRenderer::QSafeEvent 和 QSafeMessageInterface 及其继承类。
- 图形渲染输出。更多信息请参阅 SafeRenderer::AbstractFrameBuffer 和 SafeRenderer::AbstractWindow。
- 用于监听系统消息的接口,如 CAN 总线或 FlexRay。
注意:系统总线通信的保护不是 Qt 安全渲染器的一部分。相反,当您集成 Qt 安全渲染器时,您必须自己负责。
- Qt 安全渲染器在系统启动时预分配所需的内存。然而,输出目标(如硬件层)的分配必须通过系统特定接口执行。
Qt 安全渲染器为上述功能提供了参考实现。如果它不适合您的系统且您需要修改或添加新的实现,您必须仔细检查是否满足 ISO 26262-6 第 7.4 节中定义的要求。
注意:Qt 安全渲染器架构和设计文档描述了通信接口。这些文档是 Qt 安全渲染器安装的一部分。
MISRA C++ 规则和异常处理
ISO 26262标准不需要遵循MISRA C++规则。然而,由于Qt Safe Renderer派生项目可能遵循MISRA C++规则,因此Qt Safe Renderer也遵循MISRA C++指南,适用于关键系统。
如果您将Qt Safe Renderer集成到遵循MISRA C++规则的项目中,必须确保用于关键分区的main.cpp兼容MISRA C++。所有从SafeRenderer::StateManager和SafeRenderer::QSafeLayoutFileReader以及SafeRenderer::QSafeLayoutResourceReader的构造函数中抛出的异常都必须在安全部分的代码中单独捕获,并做出如何处理它们的决定。QSR运行时初始化阶段之后,可能发生的运行时异常在SafeRenderer::StateManager中有所记录。
看门狗集成
您可以为Qt Safe Renderer设置一个看门狗,它会监控Qt Safe Renderer并在需要时重新启动它。看门狗可假设如果Qt Safe Renderer进程正在运行,则它正确渲染了关键内容。
Qt Safe Renderer示例中提供了进程监视器的参考实现。
向后兼容
Qt Safe Renderer 2.0
包含安全关键元素的网络文件
使用Qt Safe Renderer 2.0,您可以使用使用某些早期Qt Safe Renderer版本创建的QML文件。Qt Safe Renderer 2.0可以从这些QML文件生成安全布局数据。
但是,请注意,如果您使用某些早期Qt Safe Renderer版本生成安全布局数据,则这些数据与Qt Safe Renderer 2.0不兼容。相反,您必须使用Qt Safe Renderer 2.0从QML文件重新生成数据。
位图
在Qt Safe Renderer 1.2中,位图格式已从32位ARGB格式更改为预乘32位ARGB格式。因此,来自之前Qt Safe Renderer版本的位图与Qt Safe Renderer 2.0不兼容。来自Qt Safe Renderer 1.2的位图与Qt Safe Renderer 2.0兼容。
在某些Qt许可下提供。
了解更多信息。