AUTOSAR图解==>AUTOSAR_SWS_E2ETransformer
AUTOSAR E2E Transformer详解
目录
- 1. E2E Transformer概述
- 1.1 E2E Transformer的作用
- 1.2 功能特点
- 1.3 应用场景限制
- 2. 模块架构
- 2.1 架构设计
- 2.2 与其他模块的关系
- 3. 初始化与状态机
- 3.1 模块状态流转
- 3.2 初始化与去初始化
- 4. 保护功能实现
- 4.1 保护函数流程
- 4.2 缓冲区处理
- 5. 配置与数据流
- 5.1 配置结构层次
- 5.2 数据流处理
- 6. 总结
1. E2E Transformer概述
1.1 E2E Transformer的作用
E2E Transformer是AUTOSAR基础软件中安全类模块的重要组成部分,提供端到端通信保护功能。它在安全相关软件组件间通信过程中确保数据完整性,即使数据需要穿越被视为"黑通道"的QM(合格级)通信栈。
E2E Transformer主要承担以下职责:
- 根据配置调用E2E Library的保护和检查功能
- 实例化E2E配置和状态数据结构
- 在不修改应用层接口的情况下提供数据保护
- 作为RTE(运行时环境)和E2E Library之间的桥梁
1.2 功能特点
E2E Transformer的关键功能特点包括:
- 一对一映射关系:数据元素与I-信号之间存在一对一的映射关系
- 接收端扇出:一个I-信号可以映射到多个数据元素(接收端)
- 配置灵活性:支持不同的E2E配置文件(Profile P1/P2/P4/P5/P7/P11/P22)
- 透明处理:对于不读取状态码的接收SWC完全透明
- 编译时变体:支持链接时和后构建可选配置变体
- 跳过E2E检查:可配置某些接收方跳过E2E检查
1.3 应用场景限制
当前E2E Transformer受限于以下应用场景:
- 仅支持发送者-接收者通信(无客户端-服务器)
- 仅考虑软件组件间的周期性通信(无事件触发)
- 仅考虑ECU间通信(通过COM堆栈交换)
- 仅支持队列发送者-接收者通信的非阻塞特性
2. 模块架构
2.1 架构设计
下图展示了AUTOSAR E2E Transformer的整体架构设计:
从架构图中可以看出,E2E Transformer处于应用层软件组件与通信栈之间的中间位置,主要由以下几部分组成:
E2EXf_<transformerId>
保护函数:在发送端被RTE调用,负责对数据进行E2E保护E2EXf_<transformerId>
检查函数:在接收端被RTE调用,负责对数据进行E2E检查E2EXf_Init
:模块初始化函数,负责初始化状态数据E2EXf_DeInit
:模块去初始化函数,负责清理资源
E2E Transformer封装了E2E配置和处理的复杂性,对调用者(RTE)提供标准的变换器接口。通过这种设计,调用E2E Transformer的组件无需了解内部的E2E处理细节。
2.2 与其他模块的关系
E2E Transformer与周边模块的关系如下:
- 与RTE的关系:被RTE调用,通过RTE的API(读、写、发送、接收)提供服务
- 与E2E Library的关系:调用E2E Library提供的功能,执行实际的保护和检查算法
- 与通信栈的关系:通过通信栈(COM、PDU Router等)传输被E2E保护的数据
- 与应用层的关系:为安全相关软件组件和QM软件组件提供透明的数据保护
目前,E2E Transformer支持以下RTE函数:
Rte_Write
/Rte_Read
Rte_IWrite
/Rte_IRead
Rte_Send
/Rte_Receive
未来版本计划扩展支持客户端/服务器功能。
3. 初始化与状态机
3.1 模块状态流转
E2E Transformer模块的状态流转如下图所示:
E2E Transformer模块具有三种主要状态:
- 未初始化状态:模块启动的初始状态,此时模块状态标志为FALSE
- 已初始化状态:通过调用
E2EXf_Init()
进入,此时模块状态标志为TRUE - 去初始化状态:通过调用
E2EXf_DeInit()
进入,重置模块状态标志为FALSE
3.2 初始化与去初始化
E2E Transformer的初始化过程包括两个主要部分:
-
状态数据初始化:
- 初始化
E2E_PXXCheckStateType
类型的状态数据资源 - 初始化
E2E_SMCheckStateType
类型的状态数据资源,通过调用相应的E2E_SMCheckInit()
方法
- 初始化
-
配置数据初始化:
- 初始化
EndToEndTransformationDescription
配置 - 初始化
EndToEndTransformationISignalProps
配置 - 初始化
EndToEndTransformationComSpecProps
配置
- 初始化
特别注意:如果E2E Transformer模块未正确初始化(即E2EXf_Init()
未成功调用),所有生成的E2E Transformer API都会立即返回E_SAFETY_HARD_RUNTIMEERROR
错误。这是一种安全机制,确保只有在模块正确初始化后才能使用其功能。
4. 保护功能实现
4.1 保护函数流程
E2E Transformer的保护函数E2EXf_<transformerId>
的处理流程如下图所示:
保护函数处理流程包括以下关键步骤:
- 初始化检查:检查模块是否已初始化,未初始化则返回错误
- 参数校验:根据处理模式(原地/非原地)验证输入参数有效性
- 缓冲区处理:根据配置参数处理原始头部数据
- E2E保护:调用
E2E_PXXProtect
函数添加E2E保护头信息 - 结果返回:根据处理结果返回相应状态码
4.2 缓冲区处理
E2E Transformer支持两种缓冲区处理模式:
-
原地处理(In-place):
- 使用同一缓冲区作为输入和输出
- 通过向左移动方式为E2E头部腾出空间
- 性能优势:减少复制操作和缓冲区使用
-
非原地处理(Out-of-place):
- 使用单独的输入缓冲区和输出缓冲区
- 将输入缓冲区内容复制到输出缓冲区的适当位置
- 计算并设置新的缓冲区长度
对于原始头部数据的处理,关键参数是upperHeaderBitsToShift
,它控制需要移位的原始头部位数。
5. 配置与数据流
5.1 配置结构层次
E2E Transformer使用三级层次的配置结构,如下图所示:
E2E Transformer的配置结构包括以下三个层次:
-
EndToEndTransformationDescription
:- 最低优先级配置
- 配置多个ISignal共享的E2E配置文件
- 定义Profile类型、
upperHeaderBitsToShift
等参数
-
EndToEndTransformationISignalProps
:- 中间优先级配置
- 定义针对特定ISignal的配置选项
- 包含
dataLength
、dataBitPosition
等参数
-
EndToEndTransformationComSpecProps
:- 最高优先级配置
- 可覆盖特定ReceiverComSpec的配置选项
- 包含
disableEndToEndCheck
、maxDeltaCounter
等参数
配置的优先级顺序确保了灵活性,允许在不同级别进行配置覆盖。这对于处理接收端扇出场景(一个I-信号映射到多个数据元素)尤为重要。
5.2 数据流处理
E2E Transformer的数据流包含两个主要部分:
-
发送方数据流:
- 数据 ->
E2EXf_<transformerId>
->E2E_PXXProtect
- 添加CRC、计数器等E2E头部信息
- 根据需要处理原始头部数据
- 数据 ->
-
接收方数据流:
- 数据 ->
E2EXf_<transformerId>
->E2E_PXXCheck
- 验证CRC、计数器等E2E头部信息
- 状态机评估数据安全状态
- 可配置关闭E2E检查(
disableEndToEndCheck=TRUE
)
- 数据 ->
特别注意,如果接收方设置了disableEndToEndCheck=TRUE
,E2E Transformer将跳过E2E检查,仅执行缓冲区处理操作。这在接收端扇出场景中非常有用,可以让某些QM(合格级)接收者跳过E2E检查。
6. 总结
AUTOSAR E2E Transformer作为安全相关通信的关键组件,提供了在标准通信堆栈上实现端到端数据保护的能力,主要优势包括:
- 标准接口:遵循AUTOSAR变换器通用规范,提供标准化接口
- 保护透明性:对不关注E2E状态的软件组件完全透明
- 灵活配置:支持三层配置结构,提供不同级别的配置覆盖能力
- 多种处理模式:支持原地和非原地缓冲区处理,适应不同性能需求
- 可选E2E检查:允许某些接收方跳过E2E检查,适用于QM组件接收数据场景
E2E Transformer通过封装E2E配置和处理的复杂性,简化了安全相关数据传输的实现。它不需要了解E2E内部细节,仅负责根据配置调用E2E Library,使得安全通信的实现更加灵活和标准化。
未来版本中,E2E Transformer将扩展支持客户端/服务器功能,并可能放宽当前的应用场景限制,进一步提升其在AUTOSAR平台中的适用性。