4. EyeQ软件安全架构解析

EyeQ 作为面向 ADAS/AD 的 SoC,其软件安全架构不是“在应用层加几个检查”那么简单,而是从芯片启动到应用任务执行的一条纵向安全链。理解这条链,关键在于回答四个问题:哪些软件层承担安全职责、每层部署什么安全机制、不同安全等级的任务如何分区与隔离、以及整车安全目标如何逐级分配到具体软件模块。本节围绕这四个问题展开,并给出可对照的架构视图。

一、EyeQ 上的安全相关软件层

从下往上,EyeQ 软件可划分为若干承担安全职责的层次。最底层是硬件安全基础,包括锁步 CPU 核、ECC 保护的 SRAM、内置自检(BIST)、看门狗、时钟与电压监控等;这些由芯片安全手册定义,是软件安全机制的物理前提。其上是启动与固件层,负责上电自检、镜像校验、安全启动链和基础驱动初始化。再往上是实时操作系统与调度层,EyeQ 通常运行符合功能安全要求的 RTOS(如基于 AUTOSAR Classic 或专用安全内核),提供任务调度、内存保护、时间监控等服务。其上是安全中间件层,包括安全通信、诊断、E2E 保护、安全状态管理等。最上层是感知、融合、规划等应用功能,其中与安全相关的部分需按 ASIL 等级开发。

需要强调的是,EyeQ 的独特之处在于其视觉处理加速器(如 EyeQ 系列中的 VMP、PMA 等)与 CPU 协同工作。安全相关软件层必须覆盖这些异构单元:加速器本身可能不具备完整锁步能力,因此需要软件层面的结果合理性检查、冗余计算或时间监控来补偿。

二、核心安全机制及其部署位置

EyeQ 软件安全机制可归纳为几类,每类都有明确的部署位置和触发条件:

  • 安全启动与镜像校验:上电后由 Boot ROM 校验一级引导加载程序的签名,逐级建立信任链。若校验失败,系统进入安全状态或受限模式,不启动应用。
  • 运行时自检:包括 CPU 逻辑 BIST、RAM March 测试、锁步比较器周期性检查。通常在启动阶段执行完整自检,运行中以背景方式执行部分自检。
  • 内存保护与分区:通过 MPU/MMU 为不同安全等级的任务划分地址空间,防止低等级任务写入高等级任务的数据区。
  • 时间与执行监控:看门狗、程序流监控(如基于检查点的执行序列验证)、截止时间监控,用于发现任务超时、死循环或执行顺序异常。
  • 数据完整性保护:对安全相关数据采用 E2E 保护(CRC、计数器、超时),对存储数据采用 ECC 或冗余存储。
  • 安全状态管理:当检测到故障时,根据故障等级执行降级、切换冗余通道或进入安全状态,并记录 DTC。

这些机制并非孤立存在,而是通过安全架构串联成一条“检测—反应—记录”的闭环。下图给出 EyeQ 软件安全架构的层次与机制部署关系,重点表现各层之间的依赖方向和安全机制的落点。

EyeQ 软件安全架构:层次、机制与隔离 应用功能层 感知(ASIL-B/D) 融合与规划(ASIL-D) 控制输出(ASIL-D) 非安全功能(QM) 安全中间件层 E2E 保护 安全通信 诊断与 DTC 安全状态管理 时间监控 RTOS 与调度层 任务调度与优先级 MPU/MMU 分区 程序流监控 看门狗服务 启动与固件层 安全启动链 镜像签名校验 上电自检 BIST 基础驱动 硬件安全基础 锁步 CPU ECC SRAM 时钟/电压监控 硬件看门狗 温度传感器 故障反应路径: 检测(BIST/锁步/看门狗/E2E) → 判定等级 → 降级或切换冗余 → 进入安全状态 → 记录 DTC 分区与隔离边界

三、分区与隔离策略

EyeQ 上同时运行安全相关任务和非安全任务,隔离是防止故障传播的关键。隔离策略通常从三个维度实施:

空间隔离:利用 MPU/MMU 为每个分区分配独立的地址空间。例如,ASIL-D 的融合任务运行在受保护分区,QM 的显示或日志任务运行在普通分区。任何跨分区访问必须经过受控接口,且接口本身需做数据校验。空间隔离的目标是:即使 QM 分区出现野指针或内存越界,也不会破坏 ASIL-D 分区的代码和数据。

时间隔离:通过调度表或时间分区机制,为不同安全等级的任务分配固定的时间窗口。安全任务在其窗口内独占 CPU,非安全任务不得抢占。时间隔离可防止低优先级任务长期占用 CPU 导致安全任务超时。EyeQ 的 RTOS 通常支持基于时间触发(TT)的调度配置,安全任务以固定周期执行,非安全任务填充剩余时间片。

执行隔离:安全任务与非安全任务不共享可写数据区,通信通过消息队列或共享内存的只读快照完成。对于必须共享的数据,采用 E2E 保护或双区冗余。此外,安全任务的关键变量应避免与 QM 任务放在同一缓存行,以减少干扰。

分区设计的一个实用原则是:先按 ASIL 等级划分分区,再按功能耦合度调整。同一分区内任务的安全等级应一致,避免高等级任务被低等级任务拖累。若无法避免混合,则需在分区内再做子隔离。

四、软件安全需求分配

安全需求分配是把整车安全目标(如“避免误制动”)逐级分解到 EyeQ 软件模块的过程。分配不是简单贴标签,而是建立“安全目标—功能安全需求—技术安全需求—软件安全需求”的追溯链。以“避免误制动”为例:整车安全目标要求制动输出不得在无目标时激活;功能安全需求分配给感知和融合模块,要求目标确认需满足多帧一致性;技术安全需求进一步要求融合模块对感知输入做合理性检查;软件安全需求则落到具体函数:在融合输出前,检查目标置信度、距离变化率和时间戳连续性,任一不满足则抑制输出。

在 EyeQ 上,软件安全需求通常按模块分配,并标注 ASIL 等级、验证方法和失效反应。下表给出一个简化的分配示例,用于说明分配粒度与字段。

软件模块 安全需求示例 ASIL 验证方法 失效反应
感知目标确认 连续 3 帧同一目标置信度 ≥ 0.85 才输出 ASIL-B 故障注入 + 场景回放 抑制目标输出
融合输出检查 输出前校验时间戳偏差 ≤ 20 ms ASIL-D 边界值测试 + 时间监控 切换冗余通道
制动指令生成 指令需带 E2E CRC 和滚动计数器 ASIL-D E2E 协议测试 丢弃指令并报 DTC
安全状态管理 检测到不可恢复故障后 100 ms 内进入降级模式 ASIL-D 故障注入 + 计时测量 进入安全状态

分配完成后,需要验证每条软件安全需求都有对应的实现和测试用例,且追溯链完整。EyeQ 项目通常使用需求管理工具维护追溯矩阵,并在集成测试阶段检查覆盖率。若某条需求无法分配或无法验证,应回到架构层重新设计,而不是降低要求。

五、架构落地的关键检查点

在实际项目中,EyeQ 软件安全架构的落地效果可通过几个检查点快速判断:安全启动链是否完整且不可绕过;各安全机制是否有明确的触发条件和反应时间;分区边界是否与 ASIL 等级一致;跨分区通信是否全部经过校验;安全需求是否逐条追溯到代码和测试。这些检查点不追求形式上的完整,而是确保架构在故障发生时真正能“检测到、反应快、不扩散”。

常见误区:把安全机制堆砌在应用层,却忽略了 RTOS 和启动层的配置。若 MPU 分区未正确设置,应用层的检查可能被内存越界绕过;若看门狗服务被 QM 任务阻塞,时间监控将失效。安全架构的强度取决于最薄弱的一层。

综上,EyeQ 软件安全架构的核心是“分层部署、分区隔离、需求追溯”。安全相关软件层从硬件基础到应用功能形成纵向链条,安全机制在每层有明确落点,分区与隔离防止故障跨等级传播,安全需求分配则保证每条要求都有实现和验证。理解这四者的关系,才能在后续的 SOTIF 验证和故障注入测试中有的放矢。