一个容易混淆的问题

在汽车电子开发中,经常能听到这样的表述:"我们用的是经过ASIL-D认证的RTOS"。这句话有时是准确的,有时是有误导性的,而区分这两种情况,需要对RTOS与功能安全的关系有清楚的认识。

RTOS本身是否需要ASIL认证?
RTOS提供了什么样的安全属性,又有什么做不到?
在ASIL-D系统中,RTOS的边界在哪里?

这三个问题,是本文要认真回答的。


RTOS在汽车嵌入式系统中的角色

首先明确一下:在汽车电子的两种主流软件框架下,RTOS的地位是不同的。

AUTOSAR Classic框架(适用于MCU,深度嵌入式控制):使用的是AUTOSAR OS,它是一种静态配置的操作系统,不完全是传统意义上的RTOS,但具备任务调度、中断管理、资源保护等RTOS核心功能。AUTOSAR OS的安全版本(Safety OS)针对ASIL要求进行了特别设计。

AUTOSAR Adaptive框架(适用于域控计算平台):运行在支持POSIX的操作系统上,通常是QNX Neutrino、VxWorks或Linux(配合安全分区使用)。这里的RTOS概念更接近传统定义。

第三类:裸机+轻量RTOS(常见于资源受限的安全关键控制器):FreeRTOS、RTEMS、μC/OS等,在一些简单但安全关键的应用中仍然使用。

不同框架下,RTOS的安全要求和证明方式不同,但有一些共同的基本问题。


RTOS认证意味着什么?

当一个RTOS声称"获得ASIL-D认证"时,需要理解这个认证的确切范围。

根据ISO 26262 Part 6,软件组件的安全属性取决于两个维度:

  1. 开发过程合规:软件是否按照ASIL-D的开发流程开发(需求可追溯、代码审查、MC/DC覆盖等)
  2. 产品功能的安全相关性:软件的哪些功能具有安全相关性,这些功能是否满足ASIL-D要求

一个"ASIL-D认证RTOS"通常意味着:其核心调度功能、任务隔离机制、时间保护等安全相关功能,满足ASIL-D的开发过程要求,并且由第三方机构(如TÜV SÜD)审核认可,并提供了安全手册。

但这不意味着:凡是运行在这个RTOS上的应用,就自动继承了ASIL-D属性。RTOS提供的是一个受信任的执行环境,真正的应用层安全要求仍然需要应用层代码自己证明。


RTOS为功能安全提供了哪些保障?

认证级别的车规RTOS(如AUTOSAR OS Safety、VxWorks 653、QNX Safety)通常提供以下安全属性:

时间保护(Time Protection)

每个Task被分配一个确定的执行时间预算(Time Budget)。OS监控每个Task的实际执行时间,一旦超出预算,OS立即强制终止该Task的执行,防止低优先级任务无限占用CPU时间(时间资源耗尽攻击,Time Starvation)。

这个机制对ASIL-D系统至关重要:如果一个QM等级的Task出现死循环或性能异常,时间保护确保它不会"饿死"安全关键Task的执行机会。

内存分区(Memory Partitioning)

配合MPU,Safety OS为每个Task/应用分配独立的内存分区,并在任务切换时更新MPU配置,确保任务间不能相互访问内存。这提供了空间维度的隔离,防止一个模块的内存错误蔓延到其他模块。

安全启动与OS验证

Safety OS通常提供在系统启动阶段验证OS自身完整性的机制(OS代码CRC校验、签名验证),防止OS代码被篡改后以安全身份运行不可信代码。

错误处理框架

提供结构化的故障检测和处理框架,允许上层软件注册错误处理回调,在发生栈溢出、内存访问违规等OS层面可检测的故障时,有序地执行安全响应(进入安全状态、触发上层故障处理等)。


RTOS做不到的事

在明确了RTOS能提供什么之后,理解RTOS的边界同样重要。

RTOS不能保证应用代码本身的逻辑正确性

OS可以提供任务执行的时序确定性,但它无法保证任务里的控制算法计算结果是正确的。如果PID控制器的积分参数设置错误,导致控制输出振荡,这不是OS层面能检测或防护的问题。应用层的功能安全需要应用层的安全机制(输出范围检查、合理性监控、冗余计算比较等)来保证。

RTOS的安全属性不能直接"继承"到应用层

如前所述,ASIL-D的RTOS为应用提供了一个受信任的执行环境,但应用代码本身的ASIL等级需要独立证明。一个运行在ASIL-D RTOS上的QM应用,其安全等级仍然是QM,不会因为OS的安全等级提升。

RTOS无法替代硬件安全机制

锁步双核、ECC、MPU是硬件层面的安全机制,是RTOS运行的基础。如果底层芯片没有这些硬件机制,RTOS再怎么安全,也无法弥补硬件层面的单点故障风险。


混合关键性系统:RTOS的真正挑战

真正体现RTOS在功能安全系统中价值的场景,是混合关键性系统(Mixed Criticality System)

┌─────────────────────────────────────────────────────┐
│                    单颗RTOS MCU                      │
│                                                     │
│  ┌─────────────────────┐  ┌─────────────────────┐  │
│  │   ASIL-D分区         │  │   QM分区             │  │
│  │                     │  │                     │  │
│  │  • 制动控制          │  │  • 诊断通信          │  │
│  │  • 安全监控          │  │  • 数据记录          │  │
│  │  • 看门狗管理        │  │  • 参数管理          │  │
│  └─────────────────────┘  └─────────────────────┘  │
│                                                     │
│         RTOS隔离保证:QM分区不影响ASIL-D分区         │
└─────────────────────────────────────────────────────┘

在这种架构中,RTOS需要提供两个分区之间的强隔离保证:时间隔离(QM任务的延迟不影响ASIL-D任务的时序)和空间隔离(QM分区的内存错误不能蔓延到ASIL-D分区)。

这要求RTOS不仅自身被认证,还必须提供针对具体隔离配置的安全分析文档,证明在当前配置下,隔离属性成立。


ASIL分解与RTOS依赖

ISO 26262允许通过“ASIL分解(ASIL Decomposition)”降低单个组件的安全要求。例如,一个ASIL-D的安全功能可以分解为两个ASIL-B的独立通道(D ← B+B),每个通道独立实现,只要两个通道之间满足独立性要求。

在基于RTOS的实现中,一个常见的问题是:运行两个ASIL-B通道的RTOS本身,需要什么ASIL等级?

答案取决于ASIL分解的独立性证明。如果两个通道都运行在同一个RTOS实例上,RTOS就成了一个共因失效(Common Cause Failure)的潜在来源——RTOS故障会同时影响两个通道,使得分解无效。为了证明分解有效,必须证明RTOS的故障不构成两通道的相关故障,通常需要RTOS达到ASIL-D以支持ASIL-D的ASIL分解应用。

这是一个经常在安全分析评审中引发讨论的问题,没有通用答案,需要根据具体的系统架构和分解策略逐一分析。


结语

车载RTOS在功能安全系统中的角色,是提供受信任的执行环境,而不是替代应用层的安全设计。理解这个边界,是避免在系统设计中产生"安全假象"的关键。

选择一个获得认证的Safety RTOS,只是功能安全系统的起点。在它之上,还需要应用层的安全机制、与芯片硬件安全特性的深度配合,以及完整的功能安全分析文档体系。每一层都有其不可替代的作用。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐