AUTOSAR_CP_OS-Protection Error Handling:保护错误处理
Protection Error Handling:保护错误处理

概述
保护错误处理
-
是保护机制的最终响应环节
-
负责在检测到 “内存访问违规、时序故障、非法服务调用” 等保护错误时
-
通过用户配置的 ProtectionHook 执行预设处理逻辑
-
核心目标是 “精准隔离故障源,避免故障扩散”
与 “监控机制” 不同
-
保护错误处理在错误发生时立即捕获(检测延迟极短)
-
且仅针对 OS 管理的对象(如任务、Category 2 ISR、OS 应用)生效
背景与原理
保护错误的检测与特点
-
检测依据
-
OS 基于静态配置的 “对象访问权限、时序约束”
- 如 OsTaskExecutionBudget、OsPeripheralArea
-
在运行时实时检测保护错误
- 如非可信应用写 OS 数据段、任务执行时间超预算
-
-
与监控的区别
-
监控机制(如栈监控)可能存在 “错误发生到检测的延迟”
- 如栈溢出后,需等到上下文切换才检测
-
保护机制则在错误发生瞬间捕获
- 如 MPU 触发内存违规中断时立即响应
-
-
错误类型
-
内存访问违规
(E_OS_PROTECTION_MEMORY)-
写未授权内存
-
读禁止访问的私有数据
-
-
时序故障
(E_OS_PROTECTION_TIME /E_OS_PROTECTION_ARRIVAL /E_OS_PROTECTION_LOCKED)-
执行时间超预算
-
任务高频激活
-
资源锁定超时
-
-
非法服务调用(E_OS_ACCESS/E_OS_CALLEVEL)
-
跨应用调用无权限对象
-
错误上下文调用服务
-
-
硬件异常
(E_OS_PROTECTION_EXCEPTION)-
除零
-
非法指令
-
-
ProtectionHook 的角色与运行环境
-
定义
-
ProtectionHook 是用户提供的可信代码
-
由 OS 在检测到保护错误时调用
-
运行在 OS 内核上下文
- 非用户应用上下文
-
拥有与 OS 相同的权限
- 如访问所有内存、修改硬件寄存器
-
-
职责
-
接收 OS 传入的 “错误类型”
-
返回 “处理策略”
- 如终止违规任务、重启应用
-
是用户控制保护错误响应逻辑的唯一入口
-
-
信任要求
-
ProtectionHook 必须无安全漏洞
- 如无内存越界、无死锁
-
否则会导致 OS 自身故障
-
因 OS 假设其为可信代码,不额外检查其行为
-
保护错误的处理选项
-
PRO_IGNORE(忽略错误)
-
描述
-
不执行任何操作
-
返回用户应用继续运行
-
-
适用场景
-
仅允许到达率错误(E_OS_PROTECTION_ARRIVAL)
-
如任务提前激活但不影响全局
-
-
-
PRO_TERMINATETASKISR(终止违规任务 / ISR)
-
描述
-
强制终止触发错误的任务 / Category 2 ISR
-
释放其持有的资源、启用中断
-
-
适用场景
-
错误仅影响单个任务 / ISR
-
如 “任务栈溢出”
-
-
-
PRO_TERMINATEAPPL(终止违规应用)
-
描述
-
强制终止触发错误的 OS 应用
- 含所有任务 / ISR、闹钟、调度表
-
禁用其中断源
-
-
适用场景
-
错误影响整个应用
-
如 “应用内多个任务时序违规”
-
-
-
PRO_TERMINATEAPPL_RESTART(终止并重启应用)
-
描述
-
终止违规应用后
-
激活其配置的 OsRestartTask 重启应用
-
-
适用场景
-
应用故障可恢复
-
如 “临时内存访问违规”
-
-
-
PRO_SHUTDOWN(关闭 OS)
-
描述
-
调用 ShutdownOS 关闭所有核心
-
进入安全状态
-
-
适用场景
-
严重错误
- 如可信函数内存违规
-
无法隔离故障
-
-
-
ProtectionHook 返回值规则
-
①
-
若返回非定义的无效值
- 如超出 PRO_* 枚举范围的值
-
OS 将视为‘未配置 ProtectionHook’,直接调用 ShutdownOS
-
参考SWS_Os_00308
-
-
②
-
仅 5 种预定义返回值视为有效,需严格按枚举值返回
- PRO_IGNORE、PRO_TERMINATETASKISR、PRO_TERMINATEAPPL、PRO_TERMINATEAPPL_RESTART、PRO_SHUTDOWN
-
-
特殊场景的处理规则
-
PRO_IGNORE 的限制
-
仅生效场景
-
仅当错误类型为 E_OS_PROTECTION_ARRIVAL(任务 / ISR 提前激活)时
-
有效返回值为 PRO_IGNORE 或 PRO_SHUTDOWN:
-
PRO_IGNORE
- OS 会继续执行原服务(如激活任务)并返回 E_OK
-
PRO_SHUTDOWN
- OS 调用 ShutdownOS 关闭系统
-
-
-
无效场景
-
若其他错误类型(如 E_OS_PROTECTION_MEMORY)返回 PRO_IGNORE
-
OS 会直接调用 ShutdownOS,因这类错误可能已破坏系统完整性
-
-
-
强制终止的区别:ISR vs 应用
-
强制终止 ISR
-
仅终止当前 ISR 实例(中断源保持当前状态)
- 后续 ISR 仍可触发(因中断源未被禁用)
-
同时执行(参考SWS_Os_00109):
-
清除中断请求
-
释放 ISR 持有的 OSEK 资源
-
启用被 ISR 禁用的中断
-
-
-
强制终止应用
-
不仅终止所有任务 / ISR
-
还会禁用应用的
-
中断源(防止后续中断触发)
-
取消闹钟
-
停止调度表
-
-
确保应用完全 “离线”
-
-
可信函数导致的保护错误
-
若保护错误由可信函数触发
- 如可信函数访问非法内存
-
可能影响多个应用
-
因此 仅允许返回 PRO_SHUTDOWN
-
返回其他值时,OS 仍会强制关闭 OS,避免故障扩散
-
-
保护错误检测与处理流程
需求
ProtectionHook 的权限与基础行为
-
权限要求
-
SWS_Os_00211
-
ProtectionHook 必须以与 OS 相同的权限执行
-
如特权模式、访问所有内存
-
-
确保 ProtectionHook 能执行高权限操作
- 如修改应用状态、激活重启任务
-
无需额外授权
-
-
无 ProtectionHook 时的处理
-
SWS_Os_00107
-
若未配置 ProtectionHook,检测到保护错误时
-
OS 直接调用 ShutdownOS
-
-
默认安全策略
-
无用户自定义处理时
-
优先保证系统不被故障破坏,进入安全关闭状态
-
-
不同返回值的具体处理需求
-
PRO_IGNORE 的处理
-
SWS_Os_00106
-
若 ProtectionHook 返回 PRO_IGNORE 且错误类型为 E_OS_PROTECTION_ARRIVAL
-
OS 需返回用户应用继续运行
-
-
SWS_Os_00475
-
若其他错误类型返回 PRO_IGNORE
-
OS 调用 ShutdownOS
-
-
示例:
-
任务 A 提前激活任务 B
- 触发 E_OS_PROTECTION_ARRIVAL
-
ProtectionHook 返回 PRO_IGNORE
- OS 会继续激活任务 B,并向任务 A 返回 E_OK
-
-
-
PRO_TERMINATETASKISR 的处理
-
SWS_Os_00553
-
若返回 PRO_TERMINATETASKISR
-
OS 需强制终止违规任务 / Category 2 ISR
-
-
SWS_Os_00108
-
终止任务时
-
需释放其持有的 OSEK 资源,并启用被禁用的中断
-
如任务调用 DisableAllInterrupts 后未恢复
-
-
-
PRO_TERMINATEAPPL 的处理
-
SWS_Os_00554
-
若返回 PRO_TERMINATEAPPL
-
OS 需强制终止违规应用
-
-
SWS_Os_00110
-
终止操作包括:
-
终止所有任务 / ISR
-
取消闹钟
-
停止调度表
-
禁用中断源
-
-
-
SWS_Os_00502
-
应用终止后
-
状态设为 APPLICATION_TERMINATED
- 不可访问
-
-
-
PRO_TERMINATEAPPL_RESTART 的处理
-
SWS_Os_00555
-
若返回 PRO_TERMINATEAPPL_RESTART
-
OS 需终止应用后,激活其 OsRestartTask 重启
-
-
SWS_Os_00557
- 若未配置 OsRestartTask,调用 ShutdownOS
-
SWS_Os_00503
-
应用重启前,状态设为 APPLICATION_RESTARTING
- 其他应用无法访问
-
直到调用 AllowAccess 切换为 APPLICATION_ACCESSIBLE
-
-
-
PRO_SHUTDOWN 的处理
-
SWS_Os_00556
-
若返回 PRO_SHUTDOWN
-
OS 调用 ShutdownOS 关闭所有核心
-
-
SWS_Os_00860
-
若错误由可信函数触发
-
仅 PRO_SHUTDOWN 有效,其他返回值仍会关闭 OS
-
-
无故障源时的默认处理
-
无违规任务 / ISR
-
SWS_Os_00243
-
若返回 PRO_TERMINATETASKISR 但无法关联到具体任务 / ISR
- OS 会强制终止当前运行的应用
-
若仍无应用可关联,调用 ShutdownOS
-
-
-
无违规应用
-
SWS_Os_00244
-
若返回 PRO_TERMINATEAPPL/PRO_TERMINATEAPPL_RESTART 但无法关联到具体应用
-
OS 直接调用 ShutdownOS
-
-
强制终止应用的操作步骤

总结
AUTOSAR OS 的保护错误处理是保护机制的闭环
核心逻辑可概括为 “检测 - 通知 - 处理 - 隔离” 四步:
-
检测
-
OS 实时监控保护规则
- 内存权限、时序约束
-
错误发生时立即捕获
-
-
通知
-
调用 ProtectionHook 向用户传递错误信息
-
提供处理选项
-
-
处理
-
根据 Hook 返回值执行对应操作
- 终止对象 / 应用、重启、关闭 OS
-
严格限制 PRO_IGNORE 的适用场景
-
-
隔离
-
强制终止时确保故障源完全离线
- 如禁用中断源、取消闹钟
-
避免影响其他对象
-
需根据系统安全等级配置 ProtectionHook
-
对安全要求高的场景(如动力域 ECU),优先选择 PRO_SHUTDOWN 或 PRO_TERMINATEAPPL
-
对可用性要求高的场景(如信息娱乐 ECU),可选择 PRO_TERMINATEAPPL_RESTART 恢复应用,但需确保重启逻辑无漏洞

