1 简介
本软件规范包含了属于AUTOSAR Adaptive Platform服务的功能集群更新和配置管理的功能描述和接口。更新和配置管理有责任以安全的方式在AUTOSAR Adaptive Platform上安装、更新和删除软件,同时不牺牲AUTOSAR Adaptive Platform的动态特性。
更新和配置管理功能集群负责:
- AUTOSAR Adaptive Platform中现有软件的版本报告
- 接收和缓冲软件更新
- 检查是否有足够的资源可用,以确保进行软件更新
- 执行软件更新,并提供日志消息和进度信息
- 验证软件更新的结果
- 提供回滚功能,以在发生故障时恢复已知的功能状态
除了更新和更改自动自适应平台上的软件,更新和配置管理还负责AUTOSAR Adaptive Platform本身的更新和更改,包括所有功能集群、底层POSIX操作系统及其上面定义的内核。
为了在如何使用更新和配置管理方面允许灵活性,它将通过ara::com服务接口公开其功能,而不是直接的api。这确保了功能集群更新和配置管理的用户可以在不同的ECU上。
2 缩略语
Abbreviation / Acronym | Description |
UCM Master | 车辆中分发软件包和协调一个更新活动 |
UCM | 更新和配置管理 |
后端(Backend) | 托管软件包的服务器 |
OTA client | 与云端后端服务器通信的AP应用 |
Application Error | UCM返回的错误 |
Boot options | 引导管理器配置 |
VCI | 车辆通信接口 |
MVCI | 模块化的车辆通信接口 |
D-PDU API | 诊断协议数据单元应用程序编程接口 |
RDF | 根描述文件 |
MDF | 模块描述文件 |
完整性检查integrity check | 证明该交付物内容没有发生任何变更的验证方法 |
依赖性检查dependency check | 证明在完成激活后所有配置的依赖关系得到满足的验证方法 |
4 限制和假设
4.1 已知限制
- UCM不负责启动更新过程,而只是提供该接口。用户在调用该接口启动升级之前需要验证车辆是否处于可更新的状态;
- UCM不管理到OEM后端的连接。而是由另外一个应用程序从OEM后端下载软件包之后通过ara::com传输给UCM;
- UCM不负责对所提供的接口强制执行身份验证和访问控制;
- 重启应用还是重启机器取决于升级或应用的类型,是特定于实现的,在软件清单中定义;
- UCM只支持符合ARA::COM和UDS(ISO-14229)标准的ECUs的更新。无法防止通过诊断仪更新经典平台的软件集群;
5 对其他功能集群的依赖关系
5.1 与状态管理的接口
UCM依赖状态管理及其提供的UpdateRequest服务接口来执行必要的功能组状态更改,以激活新安装、更新或删除的软件。
在升级的过程中,需要将机器置于一个安全的机器状态,以防止某些应用可能与更新过程或新更新的包发生冲突。
5.2 基于ara::com的UCM服务
UCM应使用method和field通过ara::com提供一个服务接口
5.3 到加密模块的接口
UCM使用AUTOSAR的加密模块来验证包的完整性和真实性,解密更新包数据。
5.4 到身份与访问管理的接口
IAM控制UCM客户端到UCM服务接口PackageManagement的访问
5.5 到时间同步的接口
使用时间同步接口获取最新的时间。
5.5 UCM使用持久性库
使用ara::per来存储内部状态信息。
7 功能规范
7.1 UCM
7.1.1 软件群集生命周期
图7.1中的状态机描述了一个软件集群的生命周期状态。这些状态可以通过接口GetSwClusterChangeInfo获取。
[SWS_UCM_00191] kAdd状态 。【在AP平台,软件簇通过ProcessSwPackage处理后,该软件簇在AP平台之前未存在过,且在激活完成之前。 】(RS_UCM_00011)
[SWS_UCM_00192] 从kAdd转换为kPresent。【通过Finish方法调用成功激活后状态切换为kPresent】
[SWS_UCM_00195]kUpdating状态。【通过ProcessSwPackage成功处理完升级的软件簇后,且在激活完成之前状态为kUpdating】
[SWS_UCM_00193]从kUpdating到kPresent的转换。【使用Finish方法调用成功激活更新的软件集群后,或者使用RevertProcessedSwPackages方法恢复软件集群后】
[SWS_UCM_00196] kRemoved状态。【使用ProcessSwPackage方法删除已存在的软件簇且在激活完成之前】
[SWS_UCM_00194] 调用RevertProcessedSwPackages方法时状态从kRemove切换到kPresent。【之前有调用ProcessSwPackage方法删除软件集群,在调用“RevertProcessedSwPackages”方法后,软件集群状态应从kRemoved变为kPresent】
[SWS_UCM_00286]调用Finish方法时从kRemoved到kPresent。【如果激活失败后必须回滚,则软件集群状态应在成功调用Finish方法后,从kRemoved更改为kPresent】
[SWS_UCM_00197]在kAdded状态调用RevertProcessedSwPackages时,软件簇生命周期结束。
[SWS_UCM_00287]{DRAFT}在kAdded状态调用Finish时,软件簇生命周期结束。
[SWS_UCM_00198] 软件集群生命周期从kRemoved状态结束。【在kRemoved状态调用Finish方法后,软件集群的生命周期结束】
[SWS_UCM_00199] 软件集群达到生命周期结束时的报告。【UCM将不再报告任何达到其生命周期结束的软件集群】
7.1.2 技术概况
AUTOSAR Adaptive Platform的目标之一是能够通过OTA灵活地更新软件及其配置。在AUTOSAR Adaptive Platform的生命周期中,UCM负责对机器进行软件修改,并保持整个系统的一致性。
UCM功能集群提供了服务接口,以实现检索AUTOSAR Adaptive Platform软件信息并持续执行软件更新的功能。由于使用了ara::com,UCM客户端可以在不同的AP平台。
服务接口的主要目的是使用标准诊断服务下载和安装AUTOSAR Adaptive Platform的软件更新。但是,服务接口中的方法和字段的设计方式在原则上可以被任何自适应应用程序使用。UCM不会对数据如何传输到AUTOSAR Adaptive Platform以及如何控制包处理施加任何特定的协议。特别是,UCM不公开诊断服务。
如图7.2所示,无论用例是通过OTA还是通过诊断完成软件更新,UCM都不可见。UCM客户端从UCM中提取用例,并将数据流和控制命令转发给UCM。在本文档的后面,术语UCM Client代表通过UCM ara::com API使用UCM包管理服务的自适应应用程序。诊断应用程序和UCM Master是这类UCM客户端的两个例子。
7.1.2.1 软件包管理
UCM的更新序列包括三个不同的阶段:
软件包传输:将一个或几个软件包从UCM的客户端应用程序转移到UCM的内部缓冲区的一个阶段。有关更多信息,请参见第7.1.3章。
软件包处理:UCM在相关软件集群上执行操作(kInstall, kUpdate, kRemove)的一个阶段。有关更多信息,请参见第7.1.5章。
激活:UCM检查参与操作的软件集群的依赖关系,然后激活它们,最后在完成更新之前检查所有的软件集群是否可以正常执行(通过状态管理)。更多信息请参见第7.1.6章。
7.1.2.1.1 软件包
[SWS_UCM_00122]软件包的使用。【UCM的输入单元称为软件包,一个软件包应处理一个软件集群】
软件集群可以扮演两种角色:
- “子”-软件集群:没有诊断目标地址的软件集群,包含进程、可执行文件和其他元素
- “根”-软件集群:具有一个诊断目标地址,可能引用其他几个子软件集群,从而形成一e个逻辑组
软件集群类别(SoftwareCluster.category):
- APPLICATION_LAYER:通过UCM删除可删除的软件集群
- PLATFORM_CORE:不能删除的软件集群,因为它会破坏系统
- PLATFORM:平台软件的一部分,可以被删除
[SWS_UCM_00245]{DRAFT} 软件集群的类别。【UCM不能删除installationBehavior设置为cannotBeRemoved的软件簇。若出现该尝试,UCM将报错 SwclRemovalDenied】
7.1.2.1.2 一个软件包的内容
每个软件包都处理一个软件集群,并包含清单、可执行文件和进一步的数据(取决于软件集群的角色),如图7.3所示的例子。
单个软件包可以包含一个或几个自适应应用程序、内核或固件更新,或更新的部署在AUTOSAR自适应平台上的配置和校准数据。
建议先发送软件包的清单,以便UCM可以获取实例的内存使用量和流的早期信息。
[SWS_UCM_00112] 软件集群和版本。【软件集群的清单应包括StrongRevisionLabelString描述的名称和版本信息】
[SWS_UCM_CONSTR_00001] 如果已安装的软件集群的任何内容(例如可执行数据或持久数据)被传入的软件包修改,则软件包中指示的传入软件集群的版本号应高于已安装的软件集群的版本号。
[SWS_UCM_00190]重新安装比以前删除的更旧的软件集群版本。正在安装的新软件集群应与所有已安装的软件集群的历史进行比较,以防止比之前安装的版本更低或相同的软件集群。
[SWS_UCM_00130] 软件集群和版本错误。【如果软件集群的清单不包含StrongRevisionLabelString的SoftwareCluster.version描述,UCM应报错InvalidPackageManifest.】
[SWS_UCM_CONSTR_00014] {DRAFT}软件包和软件集群shortNames。【软件包和参考的软件集群应共享相同的shortNames,以便能够比较它们的版本】
7.1.2.1.3 应用程序持续数据
持久性数据的更新和回滚完全由应用程序使用PER来处理,而不涉及UCM。详细的说明可以在持久性规范[12]中找到。这里的一个例外是在删除软件集群后删除了持久性数据。
[SWS_UCM_00184] {DRAFT} 删除软件集群后的持续数据清理。【UCM应通过应用程序清单中给出的信息,PersistencyKeyValueStorage.uri和PersistencyFileStorage.uri,来删除已删除的软件集群的持久性数据,以使AUTOSAR自适应平台和文件系统保持干净】
[SWS_UCM_00273] {DRAFT} 软件集群更新删除了进程后的持久性数据清理。【UCM应通过执行清单中给出的信息,即PersistencyKeyValueStorage.uri和PersistencyFileStorage.uri,来删除已删除进程中的持久数据,以使AUTOSAR自适应平台和文件系统保持干净】
7.1.2.2 运行时依赖关系
软件集群中的进程可以对其他软件集群具有功能依赖关系。
依赖性在软件集群元模型中描述,参见[9].
[SWS_UCM_00120]{draft}运行时依赖项检查。【在由Activate方法调用触发的新软件版本激活之前,UCM应检查运行时依赖关系】
其基本原理是,如果UCM必须处理多个软件包,那么在软件包过程中可能无法始终满足执行依赖关系,但必须在激活更改之前得到满足。
7.1.2.3 更新范围和状态管理
由UCM处理的软件包可以包含自适应应用程序、对AUTOSAR Adaptive Platform本身或底层操作系统的更新。更新类型取决于软件包的内容。
[SWS_UCM_00099] {DRAFT}自适应应用程序的更新。【UCM应能够更新自适应应用程序】
[SWS_UCM_00100]{DRAFT} 功能集群更新。【UCM应能够更新所有功能集群,包括UCM本身】
[SWS_UCM_00101]主机更新。【UCM应能够更新承载AUTOSAR Adaptive Platform的底层操作系统】
定义系统设置的可更新状态是OEM的责任。基于系统设置和应用程序,系统可能需要切换到预定义状态,释放资源以加速升级过程,阻止正常使用可能导致更新过程中断的软件,并阻止使用可能被更新序列中断的功能。
[SWS_UCM_00257]{DRAFT}更新会话。【为了确认系统处于可更新状态,UCM应在由Activate方法调用触发的依赖关系检查后,通过调用状态管理UpdateRequest服务接口RequestUpdateSession方法来启动一个更新会话】
[SWS_UCM_00258]{DRAFT}更新会话被拒绝。【如果状态管理UpdateRequest服务接口请求更新会话方法调用引发错误kRejected,UCM将从kActivating状态过渡到kReady状态,Activate方法调用将返回ApplicationError UpdateSessionRejected】
更新会话可能被反复拒绝,则由实现者来缓存依赖性检查结果,以避免不必要的计算,并且只计算一次。
在更新会话期间,应该执行更新过程所需的最少的应用程序。通过这种方式,系统更加健壮,更多的资源余量,禁止用户使用应用程序,因为的失败可能会给用户造成安全风险。
某些组件的更新需要执行机器重置。这些组件需要配置在Function Group MachineFG中,Function Group MachineFG需要包括一个机器重置状态。执行管理、状态管理、通信管理和UCM本身都需要一个机器重置来激活更新。其他此类组件涉及到更新序列中的应用程序或涉及到安全监控中的应用程序。关于Function Group MachineFG的更多细节参考状态管理文档。
7.1.3 传输软件包
为了加快整个数据传输时间,将包传输与处理和激活过程解耦。本节描述了启动数据传输、数据传输和结束数据传输的要求。
每个软件包在被转移到UCM时有自己的状态。图7.4中的状态机指定了传输到UCM并由UCM处理的软件包的生命周期。在此生命周期中,一个软件包将由UCM向客户端提供的id唯一标识。
在以下状态时UCM将软件包保持在kTransferred状态,以防它失败后重试:传输软件包代价很高,如果它经过身份验证,更新没有成功完成,就没有理由删除它。
[SWS_UCM_00007] 随时都可进行数据传输。【UCM应在UCM运行时随时提供传输软件包的支持。传输与UCM程序包管理状态解耦】
[SWS_UCM_00272]{DRAFT}传输块大小。【TransferStart 应返回块大小参数,以指示在一个传输数据方法调用中允许传输的最大块大小】
例如,对于经典平台能力,块的大小应该与flash能力对齐。
[SWS_UCM_00088]数据传输准备。【数据传输应采用传输启动的方法进行准备。在准备步骤中,要传输的字节数由客户端提供,UCM为要传输的软件包分配一个id】
在传输软件包时,如果UCM收到另一个软件包的后续传输启动调用,UCM应确保两个软件包的大小和请求传输的大小)不超过UCM缓冲区的大小。否则,传输启动将会引发应用程序错误InsufficientMemory,而新请求的传输将会被拒绝。
[SWS_UCM_00008]执行数据传输。【数据传输准备完成后,应调用TransferData方法执行软件包的分段传输】
[SWS_UCM_00145]数据传输的顺序。【 方法TransferData应支持参blockCounter,该参数以0x01开始,每个后续块增加1】
[SWS_UCM_00010]数据传输的结束。【在一个软件包的传输完成后,可以通过TransferExit的方法完成传输】
软件包包含身份验证和完整性标签,在传输过程中用于验证软件包的内容。
[SWS_UCM_00075]多个数据并行传输。【UCM应支持并行处理多个数据传输】
如果UCM为软件包提供了足够的缓冲资源,那么在逐个处理多个包之前可以并行传输(并行)。状态kProcessing所描述的软件包的处理(即解包和对AUTOSAR Adaptive Platform应用的更改)在7.1.5章节中进一步详细说明。
[SWS_UCM_00021]删除已传输的软件包【UCM应提供DeleteTransfer方法,删除目标软件包并释放存储该软件包的资源】
[SWS_UCM_00069]报告有关软件包的信息。【UCM应提供PackageManagement接口服务的方法GetSwPackages,以提供软件包的标识符、名称、版本、状态、接收的连续字节和接收的连续块】
如果软件包处于kTransferring状态,则不可能获得版本或名称因为清单可能是完整的或可访问的,因此GetSwPackages 包应该返回空值,TransferID、ConsecutiveBytesReceived 和 ConsecutiveBlocksReceived除外。
[SWS_UCM_00216]TransferId的有效性。【软件包的传输标识在达到最终生命周期状态时失效以供将来使用】
7.1.3.1 TransferStart中错误处理
TransferStart为客户端传输分配资源。
[SWS_UCM_00140]UCM内存不足。【如果UCM缓冲区没有足够的资源来存储相应的软件包,则TransferStart将引发应用程序错误InsufficientMemory 】
7.1.3.2 TransferData中错误处理
TransferData将执行以下检查。
[SWS_UCM_00275]{DRAFT} TransferData错误处理指令。
[SWS_UCM_00208] OperationNotPermitted。【为特定的TransferId调用TransferExit后调用TransferData 将引发错误ApplicationError OperationNotPermitted】
[SWS_UCM_00203] TransferData InvalidTransferId。
[SWS_UCM_00204] TransferData IncorrectBlock
[SWS_UCM_00243]UCM接收到的块大小太大。
[SWS_UCM_00205] TransferData IncorrectSize
[SWS_UCM_00206] TransferData InsufficientMemory
[SWS_UCM_00289]{DRAFT} TransferData TransferFailed
[SWS_UCM_00207]{DRAFT} TransferData BlockInconsistent
[SWS_UCM_00098]{DRAFT} Software Package Authentication failure
[SWS_UCM_00161] (IncompatiblePackageVersion).
[SWS_UCM_00209]{DRAFT} TransferData PackageInconsistent
7.1.3.3 TransferExit中错误处理
[SWS_UCM_00148] Transfer sequence order
[SWS_UCM_00212] TransferExit InvalidTransferId
[SWS_UCM_00087] Insufficient amount of data transferred
[SWS_UCM_00092] Software Package integrity
[SWS_UCM_00213] TransferExit InvalidPackageManifest
7.1.3.4 DeleteTransfer中错误处理
[SWS_UCM_00283]{DRAFT} DeleteTransfer error handling order
[SWS_UCM_00214] DeleteTransfer InvalidTransferId
[SWS_UCM_00215] DeleteTransfer OperationNotPermitted
7.1.4 从一个流中处理软件包
也可以在传输仍在进行中的同时处理一个软件包。以下要求适用于此用例。
[SWS_UCM_00165] 从流中处理。【UCM可以支持直接从流调用ProcessSwPackage,不用等待软件包接收完成】
[SWS_UCM_00166] 从流状态处理。【如果UCM支持流处理,且状态为kIdle或kReady,则kTransferring 状态的软件包的方法ProcessSwPackage应将此软件包设置为状态
kProcessingStream】
[SWS_UCM_00167]{DRAFT} 取消流式数据包。【如果调用Cancel,UCM应删除状态kProcessingStream中软件包的所有临时和处理数据】
[SWS_UCM_00168] 从流进行处理时的传输。【当调用TransferData时,软件包的状态应保持在kProcessingStream状态】
[SWS_UCM_00169] 在从流中进行处理时完成传输。【当调用TransferExit并且软件包完全处理后,软件包状态设置为kProcessed】
[SWS_UCM_00200]{DRAFT} 认证失败。【如果在TransferExit或ProcessSwPackage调用时身份验证失败,UCM应删除由ProcessSwPackage调用处理的软件包及其相关数据】
7.1.5 处理软件包
与软件包传输不同,只能同时处理一个软件包,以确保系统的一致性。软件或软件包处理涉及安装、更新或删除应用程序、配置数据、校准数据或清单的任何组合。根据软件包中特定于供应商的元数据来描述UCM在处理它时执行的任务。对于删除,涉及到描述需要删除哪些数据的元数据。不管怎么样,触发软件修改的应用与UCM之间的通信顺序都是相同的。对于已有应用程序的更新,软件包只包含部分数据,比如只包含执行清单的更新版本。在开始更新(进程/激活)之前,UCM客户端都需要确认UCM处于kIdle状态。
[SWS_UCM_00137]正在处理几个升级的软件包。 【UCM应通过多次调用方法ProcessSwPackage,支持非并行处理多个软件包】
[SWS_UCM_00018]提供进度信息。【UCM应提供一种方法GetSwProcessProgress,以查询对所提供的传输程序执行ProcessSwPackage方法调用的进度。参数进度应设置为表示0%到100%(0x00...0x...0x64)的值。
[SWS_UCM_00003]取消程序包处理。【调用Cancel后,UCM将中止正在运行的软件包处理任务,撤消对已开始处理的软件群集的更改,并释放用于它的保留资源。】
[SWS_UCM_00024]恢复所有处理过的软件包【UCM应提供RevertProcessedSwPackages方法,以恢复使用ProcessSwPackage做的所有更改】
RevertProcessedSwPackages和回滚之间的主要区别是,前者只能在成功激活目标软件包(s)之前执行,而后者只能在激活后执行。
根据UCM和更新目标的功能,RevertProcessedSwPackages用于还原ProcessSwPackage已应用的所有更改。Cancel还用于恢复由ProcessSwPackage方法调用启动的处理并由TransferId标识的软件包的更改。例如,如果一个具有大型资源文件的应用程序被更新(即在同一个分区中),那么恢复更新可能是不可行的。在这种情况下,要执行回滚,触发应用程序可以下载一个软件包来恢复应用程序的稳定版本。
7.1.5.1 在处理软件包时发生的错误处理
[SWS_UCM_00277]{DRAFT} ProcessSwPackage错误处理顺序
ProcessSwPackage应检查以下错误条件,并返回相应的错误代码
[SWS_UCM_00219] ProcessSwPackage OperationNotPermitted
[SWS_UCM_00017] Sequential Software Package Processing
[SWS_UCM_00218] ProcessSwPackage InvalidTransferId
[SWS_UCM_00161] Check Software Package version compatibility against UCM version
[SWS_UCM_00029] Consistency Check of Manifest
[SWS_UCM_00285]{DRAFT} Removing or updating a Software Cluster not existing in the Machine
[SWS_UCM_00231]{DRAFT}ProcessSwPackage IncompatibleDelta
[SWS_UCM_00217]{DRAFT} ProcessSwPackage InsufficientMemory
[SWS_UCM_00267]{DRAFT} Error when checksum is not recognised at process ing time
[SWS_UCM_00104] Integrity Check of processed Package
[SWS_UCM_00150] Cancellation of a Software Package processing
7.1.5.2 Cancel的错误处理
[SWS_UCM_00278]{DRAFT} Cancel error handling order
[SWS_UCM_00234] Cancel OperationNotPermitted
[SWS_UCM_00235] Cancel InvalidTransferId
7.1.5.3 RevertProcessedSwPackages错误处理
[SWS_UCM_00279]{DRAFT} RevertProcessedSwPackages error handling order
[SWS_UCM_00237] RevertProcessedSwPackages OperationNotPermitted
[SWS_UCM_00236]{DRAFT} RevertProcessedSwPackages NotAbleToRevert Packages
7.1.5.4 GetSwProcessProgress错误处理
[SWS_UCM_00220]GetSwProcessProgress InvalidTransferId
7.1.6 激活和回滚
UCM应将软件包的激活或回滚通知给AUTOSAR Adaptive Platform的其他功能集群。供应商特定的解决方案规定了该信息对哪些模块可用,以及信息的形式和当直接执行时的执行时间或执行完成的时间。
7.1.6.1 激活
软件集群状态kPresent状态并不表示当前是否执行软件集群。您可以参考第7.1.1章软件集群生命周期来了解关于kPresent状态和序列图10.4的更多细节。
软件簇的激活是被Active方法触发的。UCM请求状态管理进入升级会话,一旦被允许,UCM再请求状态管理关闭过期的软件簇。当进程关闭后,UCM提供需要安装的软件簇。软件簇的验证通过请求软件簇的状态切换为kVerify来实现。(10.4有相关的序列图)
[SWS_UCM_00293]{草案}VerifyUpdate方法【在kVerifying 状态时,在触发到激活状态之前,UCM应调用状态管理UpdateRequest服务接口VerifyUpdate方法通过软件集群claimedFunctionGroup属性中定义的功能组列表】
[SWS_UCM_00107]激活状态。【在验证了更新的软件集群的新版本后,应设置UCM状态 kActivated】
执行级别上的状态管理[3]由控制更新进程的UCM客户端处理。
UCM必须能够更新几个软件集群,以进行更新活动。但是,如果逐个处理和激活更新,这些软件集群可能不满足依赖关系。因此,UCM将激活操作从通用的软件包处理中分开。
[SWS_UCM_00022] 软件集群的激活。【当调用Activate时,UCM应激活从软件包中提取的所有软件集群】
激活方法可能会导致一个整个系统的重置。当软件包更新底层操作系统、,AP平台软件或被配置为Function Group MachineFG组的自适应应用程序时,更新的软件通过调用状态管理UpdateRequest服务接口ResetMachine方法的系统重置来执行。软件包的元数据定义了激活方法。
原则上,可以在一个激活步骤中激活同一个软件集群的多个版本。这可能很有用,例如对于增量包更新,但不适用于固件更新。该规范不禁止创建这种链接式的更新。使用链式更新的决定应该基于安全方面和基础更新技术的适用性,假如更新是为一个经典的或一个自适应的平台,或涉及一个文件系统,或使用的平台支持。
7.1.6.1.1 Activate的错误处理
[SWS_UCM_00281]{DRAFT} Activate error handling order
[SWS_UCM_00241] Activate OperationNotPermitted
[SWS_UCM_00026] Dependency Check
[SWS_UCM_00242] Activate PreActivationFailed
[SWS_UCM_00280]{DRAFT} Activate VerificationFailed
7.1.6.2 回滚
[SWS_UCM_00110]回滚软件更新。【在kRollingBack状态下,为每个在更新会话中处理的软件簇的功能组调用UpdateRequest 服务接口的PrepareRollback方法,以禁止软件更新带来的变更。如果软件簇需要机器重启来执行回滚,需要调用ResetMachine方法】
7.1.6.2.1 回滚的错误处理
[SWS_UCM_00282]{DRAFT} Rollback error handling order
[SWS_UCM_00239] Rollback OperationNotPermitted
[SWS_UCM_00238]{DRAFT} Rollback NotAbleToRollback
7.1.6.3 启动选项
在更新过程中,已执行的软件从原始软件切换到更新的软件,如果是回滚,则从更新的软件切换到原始版本。执行哪个版本的软件取决于UCM状态,而该状态由UCM管理。在平台和操作系统更新的情况下,软件版本之间的切换是通过系统重置发生的,根据系统设计,执行管理[2]可能会在UCM之前启动。在这种情况下,在UCM和执行管理[2]之间不能有直接的接口来定义将执行哪些版本的软件。相反,这将通过在本文档中称为引导选项的持久控件进行控制。
[SWS_UCM_00094]可执行软件的管理。【UCM应管理执行管理[2]可启动哪个版本的软件】
在kActivating状态下,UCM会修改引导选项,以便在下次重启更新的软件时执行新版本。在“回滚”状态下,UCM会修改“引导”选项,以便在下次重启更新的软件时执行原始版本。
7.1.6.4 完成激活
[SWS_UCM_00020]完成软件包的激活。【UCM应提供Finish方法提交所有的更改,并清理处理过的软件包的所有临时数据】
UCM还应该删除软件包、日志或旧版本的更改软件,以节省存储空间。由实现者决定是否删除软件包。
[SWS_UCM_00259]结束更新会话。【当UCM退出kCleaningUp状态时,UCM应调用状态管理UpdateRequest服务接口StopUpdateSession方法】
[SWS_UCM_00240] Finish OperationNotPermitted。【Finish应报错ApplicationError OperationNotPermitted, 当如果没有激活或回滚的软件包等待最终结束】(i.e UCM state is not kActivated nor kRolledBack.)
为了使UCM能够在处理Finish请求时释放所有不需要的资源,这取决于供应商和平台特定的实现,以确保已更改的软件集群的过时版本不再被执行。
7.1.7 状态报告
一旦软件包被转移到UCM,它们就可以被处理了,最终将更改应用到AUTOSAR Adaptive Platform。与传输相比,处理和激活任务必须按照严格的顺序进行。
为了概括更新序列,在本节中描述了UCM的全局状态。处理和激活阶段的细节和方法在7.1.5和7.1.6中指定。
可以使用CurrentStatus字段查询UCM的全局状态。CurrentStatus系统的状态机如图7.5所示。此图不包括重置后的行为。在第10章序列图中可以找到UCM及其CurrentStatus字段的行为,包括的重置管理的实例。
[SWS_UCM_00019]软件包管理的状态字段。【UCM的全局状态由字段CurrentStatus提供】
[SWS_UCM_00080] 软件包管理的Idle状态.【 kIdle为默认状态】
[SWS_UCM_00149]从处理状态返回到空闲状态 。当ProcessSwPackage返回错误代码ProcessSwPackage被取消,以及在此处理操作中没有处理其他软件包时,应设置空闲状态。
[SWS_UCM_00151]在取消调用后进入程序包管理的就绪状态。如果ProcessSwPackage被取消,只有在此处理操作中至少处理过一个其他软件包时,才应返回错误代码ProcessSwPackageCancelled并将状态设置为kReady。
[SWS_UCM_00081]程序包管理的处理状态。只有在ProcessSwPackage已被调用时,才应设置kProcessing状态。这只有在CurrentStatus报告为kIdle或kReady时才可能实现。
[SWS_UCM_00266]{DRAFT} OperationNotPermitted error and UCM state。UCM应返回 ApplicationError OperationNotPermitted 如果ProcessSwPackage在CurrentStatus为非kIdle,kProcessing,kReady时 被UCM的客户端调用。
[SWS_UCM_00083]在处理操作成功后,进入软件包管理的就绪状态。
[SWS_UCM_00265]{draft}状态转换的原因。
如果ProcessSwPackage引发ApplicationError而不是ProcessSwPackageCancelled,如果在此处理操作中之前没有处理过其他软件包,则应从kProcessing过渡到kIdle,如果在处理操作失败之前至少处理过至少一个其他软件包,则应进行kReady,并应执行清理操作。
[SWS_UCM_00152]在缺少依赖项后进入程序包管理的就绪状态。
[SWS_UCM_00084]进入程序包管理的kActivating
[SWS_UCM_00153]在程序包管理的kActivating状态中的操作
[SWS_UCM_00260]{draft}PrepareUpdate, VerifyUpdate and PrepareRollback orders
[SWS_UCM_00261] PrepareUpdate, VerifyUpdate and PrepareRollback synchronous calls
[SWS_UCM_00262]{DRAFT} Update preparation rejected
[SWS_UCM_00263] Update preparation failure
[SWS_UCM_00154]{draft}进入软件包管理的验证状态
[SWS_UCM_00085]{draft}进入软件包管理的kActivated状态
[SWS_UCM_00126]在一个回滚调用后进入kRollingBack
[SWS_UCM_00155]{draft}在kVerifying状态失败后进入kRolling-Back状态
[SWS_UCM_00264]{DRAFT} Update verification rejected
[SWS_UCM_00111]{DRAFT} Entering the kRollingBack state
[SWS_UCM_00146] Entering the Cleaning-up state after a Finish call
[SWS_UCM_00162] Entering the Cleaning-up state after a RevertProcessedSw Packages call
[SWS_UCM_00163] Action in Cleaning-up state
[SWS_UCM_00164] Cleaning up of Software Packages
[SWS_UCM_00127]完成的更新序列
[SWS_UCM_00147]从清理状态返回到空闲状态
7.1.8 对重置的鲁棒性
OTA更新期间的失败可能会导致软件配置损坏或不一致,从而无法进一步的更新。因此,UCM需要保持鲁棒性即使遇到像断电这样的中断。
[SWS_UCM_00157] 复位检查。【在启动时,UCM应识别是否发生了未受控制的复位】
UCM检测失控重置的方法是特定于项目的。UCM可以使用硬件平台特定的寄存器来检测软/硬重置。或者它可以访问PHM功能集群来检测不受控制的重置。UCM还可以检查CurrentStatus持久性字段是否没有kIdle or kVerifying。
[SWS_UCM_00158]清理已中断的操作【在不受控制的复位后,UCM应检查非易失性内存完整性,在损坏时恢复已处理的工件,并恢复中断的操作,以使系统回到UCM可以继续为其客户端服务的状态】
[SWS_UCM_00270]{draft}UCM内部状态持久性【UCM应保留CurrentStatus状态字段,以便在预期的或意外的重新启动后能够恢复正在进行的更新】
7.1.8.1 启动监控
操作系统和平台自更新期间的激活失败可能导致系统无法达到UCM和客户端能够按预期运行的状态,因此无法执行回滚。对于这些情况下,系统应包括负责监控操作系统和平台将正确启动的组件。如果失败,启动监控组件应触发重置或修改启动选项,以触发回滚。
7.1.9 历史
[SWS_UCM_00115]历史记录。【GetHistory方法应检索UCM在特定时间窗内执行的所有操作】
如果UCM客户端在成功激活后请求回滚,则CurrentStatus字段转换到kActivated,GetHistory方法稍后将返回GetHistoryType,子元素解析类型等于kActivatedAndRolledBack。
[SWS_UCM_00160] 处理结果记录。【当UCM进入kVerifying时,UCM将根据timeBaseResource和历史记录中处理过的软件包的激活结果保存激活时间】
[SWS_UCM_00271]{DRAFT} 保留故障的历史记录,错误代码。【UCM应在GetHistoryType子元素故障错误中保留[SWS_UCM_00136]中所述的最后一个故障错误代码。如果没有发生错误,则存储的值应为0】
[SWS_UCM_00303]{草案}未能记录历史记录【如果UCM未能在历史中记录新条目,UCM应报告错误: UCM_HISTORY_RECORD_FAILED。任何成功的历史更新都会重置此生产错误】
7.1.10 版本报告
[SWS_UCM_00004]报告软件信息。【UCM应提供接口PackageManagement的方法GetSwClusterInfo,以提供处于kPresent状态的软件集群的标识符和版本】
[SWS_UCM_00030]报告更改。【UCM应提供接口PackageManagement的方法GetSwClusterInfo,以提供处于kAdded, kUpdating ,kRemoved状态的软件集群的标识符和版本。 】
[SWS_UCM_00185]提供软件集群的一般信息。【UCM应提供一种方法GetSwClusterDescription,以返回处于kPresent状态的软件集群的版本、型式批准、许可和发布说明】
7.1.11 安全软件更新
UCM提供了使用ara::com的服务接口。在UCM的更新序列中没有对客户端的身份验证。对于软件包的身份验证,您可以参考7.1.3
[SWS_UCM_00103]{draft} 更新到比当前版本和之前已删除的更旧的软件集群版本。【如果软件包的版本(由GetSw包返回)小于当前软件集群的版本(由GetSw集群信息返回),UCM方法TransferExit 或 TransferData应提高应用错误旧版本,,将此尝试记录入历史记录(可从获取历史记录中检索),并删除被拒绝的软件包】
[SWS_UCM_00190] 重新安装比以前删除的更旧的软件集群版本【正在安装的新软件集群应与所有已安装的软件集群的历史进行比较,以防止安装版本较于或相同的软件集群】
[SWS_UCM_CONSTR_00002]{DRAFT} UCM保密信息处理。【 PackageManagement接口通过ara::com映射到一个使用提供加密保护的安全通信通道的安全端点】
GetSwClusterInfo, GetSwClusterChangeInfo, GetHistory, GetSwClusterDescription and GetSwPackages方法使用的数据可以识别车辆用户,因此应该受到保密保护。
[SWS_UCM_00202]{draft}受信任的平台遵从性。【UCM应确保在更新后,所有符合安全平台的更改应被使用】
与更新/删除/添加的可执行文件对应的可信平台的身份验证标签也应该被更新/删除/添加。有关可信平台的详细信息,请参见执行管理[2]的第7.10章
7.1.12 功能集群生命周期
[SWS_UCM_00274]{draft}UCM初始化。【UCM只有在内部初始化完成后,向执行管理报告运行状态后才能提供服务】
此要求防止在内部初始化时调用UCM从属API。具体的初始化任务是特定于实现的。
7.1.12.1 关闭动作
UCM功能集群不要求关机行为。
7.2 UCM Master
7.2.1 UCM Master集群的生命周期
[SWS_UCM_01205]{draft}UCM Master内部状态持久性。【UCM Master应保持其状态,以便能够在预期或意外的重新启动后恢复正在进行的更新活动】
[SWS_UCM_01019]{draft}UCM Master初始化。【UCM Master只能在其内部初始化完成后,并在切换到运行状态后提供其服务】
此要求防止在内部初始化时调用UCM MasterAPI。具体的初始化任务是特定于实现的。
7.2.2 技术概况
UCM Master的目标是提供自适应AUTOSAR解决方案,通过OTA或诊断仪安全地更新整车。
UCM Master从后端或诊断工具接收软件包,解析车辆软件包,传输软件包到合适的目标(UCM从属模块或诊断应用程序),并协调处理、激活和最终回滚。所有这些行动都是由UCM master协调的。在UCM Master的同一网络中的机器的UCM模块 ,被称为UCM 从属模块。
UCM Master可以被认为是一组附加的特性从而丰富UCM用例。因此,UCM Master api是自适应平台服务的一部分。UCM和UCM Master都有单独的服务实例。
OTA客户端与后端和UCM Master之间建立了一个通信,以便它们可以交换车辆中已安装的软件集群和后端中可用的软件集群的信息。该通信由带调度器的OTA客户端触发,UCM Master在有新可用的软件集群(push case)时请求更新,或者由后端推动,例如,对车辆的重要安全更新(推送)。找到新的软件集群版本和解决软件集群之间的依赖关系,可以在UCM Master或后端完成。
车辆驾驶员接口的AP应用在更新期间与车辆人类驾驶员交互时用到。从后端下载软件包可能会给司机带来支出成本,因此需要获得司机的同意。
如果在更新过程中需要为了安全目的控制车辆状态,则需要车辆状态管理AP应用。例如,为了安全,在启动UCM激活之前或在其处理过程中,可以要求车辆静止、关闭发动机、关闭车门等。
7.2.3 UCM Master通用行为
UCM Master充当UCM提供的服务接口的客户端。然而,UCM Master还分别为OTA客户端、车辆驾驶员接口和车辆状态管理器提供了三种不同的服务接口。UCM Master聚合UCM下属状态,并可以通过其OTA客户端向后端报告其状态字段。
UCM Master接收一个车辆包,并将软件包传输传输给UCM,以进行AUTOSAR Adaptive Platform软件集群更新。车辆包包含了在ecu之间协调更新的指令。UCM主控器提供有关车辆中ECU、安装的软件和更新活动解决方案的信息。
[SWS_UCM_01003]UCM Master检查UCM的状态【UCM Master应在开始活动前检查其UCM的状态都处于空闲当前状态】。(RS_UCM_00043)
例如,UCM Master应通过检查UCM服务器的报告状态是否空闲,确保没有正在进行的诊断更新。
7.2.4 UCM识别
对于UCM Master将软件包分发给其他UCM,UCM Master必须识别车上的UCM。识别可以在引导时或更晚,但至少在与后端通信之前。每个UCM在车辆包的UcmModuleInstantiation中都有一个唯一的标识符,帮助UCM Master将包传输到目标UCM。为了获得这样的标识符,UCM Master将首先通过ara::com执行一个服务发现,以获得所有可用的UCMs服务实例。然后,UCM Master将调用每个UCM的GetId方法,返回每个对应的Ucm模块实例化标识符。
[SWS_UCM_01005] UCM Master在车辆中发现UCM【UCM master应持续查找UCM服务实例】
如果UCM Master 失效了,则可是使用另一个非活动的UCM Master或者通过UCM Client激活。
默认值(在启动时),在OTA客户机可以正确解析车辆包的条件下,可以根据车辆包的内容,可选择地覆盖每个活动的主/下属层次结构或优先级。
7.2.5 UCM Master软件包传输
UCM Master通常具有与UCM相同的传输API,以便尽可能地简化实现和重用代码(可以在UCM和UCM Master之间共享库)。
有必要区分车辆包(UCM主控专用)和软件包传输。
[SWS_UCM_01011] TransferVehiclePackage InsufficientMemory
【如果UCM缓冲区没有足够的资源来处理相应的车辆包,则TransferVehiclePackage方法将raise ApplicationError InsufficientMemory】
[SWS_UCM_01018]{DRAFT} TransferVehiclePackage BusyWithCampaign
【如果OTA客户端想要启动一个新的活动,而一个活动已经开始和激活,那么TransferVehiclePackage方法将返回ApplicationError BusyWithCampaign】
[SWS_UCM_01014] 包传输序列 【如果软件包名称参数不是RequestedPackage的字段,则TransferStart方法应引发ApplicationError UnexpectedPackage】
[SWS_UCM_01013] Too big block size received by UCM Master
[SWS_UCM_01015] Invalid Vehicle Package manifest
[SWS_UCM_01016] Invalid Package Manifest
[SWS_UCM_01017] RequestedPackage field
OTA客户端不知道在特定活动中车辆包中哪些软件包需要被传输。可以通过订阅UCM master的RequestedPackage字段来知道需要传输的软件包。在这种情况下,版本参数明确传输哪个包版本,因为两者都分配了相同的名称。
7.2.6 自适应应用程序与UCM Master交互
为了在几个供应商平台之间实现互操作性,自适应应用程序通过ara::com交互,如OTA客户端,车辆状态管理器或车辆驾驶员交互,指定了它们的api。但是,它们的详细行为超出了本规范文件的范围。
7.2.6.1 OTA客户端
OTA客户端是一个自适应的应用程序,它可以设置后端和UCM Master之间的通信通道。后端和OTA客户端之间的通信是抽象的,协议等细节超出了本规范文档的范围。OTA客户端应通过识别车辆,确保后端向车辆提供了正确的信息和软件包,例如通过向后端发送VIN。
OTA客户端通过ara::com使用UCM master作为服务Provider。OTA客户端负责将车辆包和软件包从后端转移到UCM Master,OTA客户端兼容到后端之间专有通信协议,并将其转换为ara::com传输协议。OTA客户端应该支持第7.2.5章中规定的UCM Master包传输或流传输,然后它应该至少提供以下功能:
- 在OTA客户端和UCM Master之间的软件包传输过程中,请遵守第7.1.3章的要求。
- OTA客户端应该订阅UCM Master的请求软件包字段,以了解预计要转移的软件包
- OTA客户端应该订阅UCM Master的传输状态字段,以了解什么是活动状态
- OTA客户端应该订阅UCM Master的安全状态字段,以最终确保车辆在传输软件包之前处于安全状态
- OTA客户端可以支持多个并行数据传输,如[SWS_UCM_00075]中指定的
此外,OTA客户端可以支持暂停当前活动的或恢复包传输的能力,以确定从不同活动的包传输的优先级。如果需要取消kTransferring状态下正在进行的活动,以允许执行更高优先级的活动,那么OTA客户端暂停或恢复包传输的能力是有用的。
每个网络域的OTA客户端只能使用一个UCM master。UCM master分发软件包和协调UCM从属,OTA客户端在同一网络域必须确保没有已经进行活动时开始一个新的活动,并通过调用TransferVehiclePackage方法检查UCM master的状态,以避免任何干扰和保证更新活动的成功。
[SWS_UCM_01101]提供车辆中已安装的软件集群的信息 【UCM Master应提供一种方法,以返回处于kPresent状态的所有软件集群的信息】
UCM Master可以从车辆内的多个ucm中聚合软件集群信息,并将结果返回到后端,后者可以计算是否有新的软件集群,并决定通过OTA客户端将车辆包发送给UCM Master。在调用GetSwClusterInfo 或SwPackageInventory 之前,由OTA客户端确保车辆中的软件包和软件集群的版本同步。
[SWS_UCM_01103]通知后端进行更新所需的软件包。【在调用SwPackageInventory时,UCM Master应将车辆后端提供的可用软件包清单与车辆中现有软件集群的内部信息进行比较,并返回选择进行更新的软件包清单】
OTA客户端使用此返回的软件包列表来向后端请求选定的软件包。根据约束[SWS_UCM_CONSTR_00014]的要求,每个软件集群对应一个软件包,并共享相同的短名称。
[SWS_UCM_CONSTR_00016]{DRAFT} OTA客户端使用RequestedPackage字段【当UCM Master更新RequestedPackage字段时,OTA客户端应启动传输所请求的软件包】
[SWS_UCM_01119]有关软件包的报告信息【UCM Master应提供方法GetSwPackages来返回标识符、名称、版本、连续接收字节数、连续接收块和软件包的状态】
7.2.6.2 车辆驾驶员接口
车辆驾驶员接口需要满足法律法规或通信成本的考虑。为了支持强制性的安全和关键的安全更新,驾驶员界面可用于:
- 向车辆司机申请转移、处理或激活许可
- 通知车辆司机必须对车辆采取安全措施,以便进入更新活动的下一步
[SWS_UCM_CONSTR_00017]{草案}UCM Master与车辆驾驶员的交互 【当车辆驾驶员接受或拒绝该活动时,车辆驾驶员应用需要调用VehicleDriverApplicationInterface的DriverApproval方法以通知UCM Master车辆驾驶员的决定】
[SWS_UCM_01117]{draft}UCM Master安全状态字段。【UCM Master应向车辆驾驶员界面提供SafetyConditions字段,其中包含在SafetyConditions中配置的活动所需的
安全条件】。
如果在更新过程中违反了车辆安全,UCM Master可以通过弹框,通过安全状态字段通知车辆驾驶员。
[SWS_UCM_01118]UCM主控等待车辆驾驶员批准。【在按照车辆包中配置的方式请求DriverApproval的情况下,在kVehiclePackageTransferring过渡到kSoftwarePackage_-Transferring,kSoftwarePackage_Transferring到kProcessing或kProcessing to kActivating之前,UCM Master应等待参数Approval=True的DriverApproval方法】
[SWS_UCM_CONSTR_00003]专用的车辆驾驶员接口。【软件集成商应确保只有一个自适应应用程序在使用UCM Master的车辆驾驶员接口】
例如,集成商可以通过相应地配置身份和访问管理功能集群来限制从UCM Master对车辆驾驶员界面的访问。
[SWS_UCM_CONSTR_00004]车辆驾驶员界面不支持的安全问题。【如果车辆驾驶员接口自适应应用程序不支持安全条件字段中包含的至少一个安全条件,则车辆驾驶员接口自适应应用程序应调用方法ReportUnsupportedSafetyConditions ,参数为 UnsupportedSafetyConditions,其中包含车辆驾驶员接口自适应应用程序不支持的所有安全条件。】
[SWS_UCM_01120]提供软件包的通用信息 【UCM Master应提供方法GetSwPackageDescription,以返回作为当前活动的一部分和包含在车辆软件包中的每个软件包的描述。】
[SWS_UCM_01135]从车辆中获取软件集群的描述。【在通过车辆驾驶员应用程序接口调用GetSwClusterDescription方法时,UCM Master应返回从UCM次级或flash适配器聚合的软件集群描述】
7.2.6.3 车辆状态管理器
车辆状态管理器从不通风的车辆ECUs中收集状态,并在根据车辆包中引用的安全策略计算出的安全状态发生变化时通知UCM Master。如果不满足安全策略,UCM master可以决定:
- 通知车辆驾驶员不满足安全条件,继续更新
- 推迟、暂停或取消更新,直到满足策略
[SWS_UCM_01109]{draft} UCM Master提供了一个安全接口。【UCM Master应为每个车辆包的VehicleRolloutStep设置安全条件字段,安全条件来自m safetyCondition属性】
[SWS_UCM_01110]{draft} UCM主控器安全状态方法。UCM master应提供一种安全状态的方法,以了解车辆状态的变化。
车辆状态管理器自适应应用程序可以通过调用PublishSafetyState 方法来通知任何车辆状态更改。
[SWS_UCM_CONSTR_00005]{DRAFT}安全状态变更。【车辆状态管理器自适应应用程序应在安全状态发生变化时调用UCM Master提供的PublishSafetyState方法】
[SWS_UCM_CONSTR_00009]{起草}安全条件变更【当字段SafetyConditions值改变时,车辆状态管理器自适应应用程序应调用UCM Master提供的PublishSafetyState方法】
[SWS_UCM_CONSTR_00015]{草案}在kVehicleChecking状态的触发 【当VehicleStateManagerInterface接口提供的状态切换为kVehicleChecking时,车辆状态管理器应首先执行检查,以评估车辆的激活后状态。】
[SWS_UCM_01272]{DRAFT}VehicleCheck调用未被允许。【如果VehicleCheck方法在另一个UCM Master状态,而不是在kVehicleChecking状态时,UCM Master应返回ApplicationError OperationNotPermitted】
[SWS_UCM_CONSTR_00006]车辆状态管理器专用【系统集成商应确保车辆状态管理器是PublishSafetyState方法的唯一使用者】
例如,集成商可以在相应地配置身份和访问管理功能集群时限制对车辆状态管理器的访问
[SWS_UCM_01275]在激活期间的安全条件【 UCM Master最终的VehicleRolloutStep的安全条件应用到SafetyCondifion字段】
[SWS_UCM_CONSTR_00007] {DRAFT} 车辆状态管理器不支持的安全条件。【如果请求的安全条件字段不是指由车辆状态管理器实现的现有安全条件,车辆状态管理器应调用VehicleStateManagerInterface服务接口PublishSafetyState方法,其参数SafetyStates至少包含一个等于“NotSupported”的值】
[SWS_UCM_CONSTR_00008]正在将车辆切换到更新模式。【车辆状态管理器应改变正确的车辆状态和正确的更新模式,以避免更新期间出现超时问题】
7.2.6.4 刷写适配器
刷写适配器是一个应用程序,在UCM Master更新AUTOSAR经典平台或任何平台,可以使用诊断。它包含OEM特定的诊断序列,并通过ara::com与UCM Master和AUTOSAR 自适应平台进行通信,并使用诊断协议数据单元应用程序编程接口(D-PDU API)的实现,通过车辆总线与经典的ECUs进行通信。
如果在更高优先级协议上的通信,例如OBD服务,通过诊断通信从刷写适配器到目标ECU的数据传输可能受到中断。在这种情况下,刷写适配器可以使用特定于项目的策略来检测中断,从起始处就重试传输,并决定是否通知客户机传输中断。
[SWS_UCM_CONSTR_00011]{draft}刷写适配器提供的接口。【刷写适配器应提供与UCM相同的ara::com服务接口】
7.2.7 非自适应平台更新
[SWS_UCM_01121]{草稿}为Flashing Adapter提供的自适应平台接口。
【AUTOSAR自适应平台为更新非自适应平台而提供的接口应符合ISO22900-2:2017(D-PDUPAPI)规范,但由于该标准的覆盖范围很广,允许实现一个简化的API,来更新ECU,例如自AUTOSAR经典平台。
D-PDU API的实现是处理来自Flashing Adapter的二进制数据,并执行所有所需的会话、传输和网络层处理,以发送和接收物理车辆总线上关于底层协议的数据。使用ISO22900-2:2017的原因是为了确保来自任何车辆或工具制造商的特定刷写适配器可以在一个通用的软件接口上运行,并可以轻松地交换MVCI(模块化车辆通信接口)协议模块的实现。
如果更新的目标ECU无法在当前和新软件集群之间切换,车辆包活动不仅应该下载新版本,还应该下载要更新的软件集群版本,以便能够从新版本回滚到旧版本的软件集群。存储当前软件包的位置可能是Flashing Adapter,但最终它必须对于Flashing Adapter是可用的,以便在回滚时刷写它。
7.2.7.1 D-PDU API实现支持
[SWS_UCM_01122]{draft}由D-PDU API实现支持的物理层【需要支持ISO_11898_2_DWCAN (Dual Wire CAN), ISO_11898_3_DWFTCAN(Dual Wire CAN Fault tolerant), SAE_J2411_SWCAN (Single Wire CAN) 和IEEE_802_3(Ethernet) 物理层协议,,假如相应的ECU支持某一种,其他的则是可选的】
[SWS_UCM_01123]{draft}通过D-PDUAPI实现所支持的应用程序层【需要支持ISO_15765_3(统一诊断服务、CAN上的UDS、ISO撤回的UDS)、ISO_14229_3(基于CAN的统一诊断服务、UDSonCAN)和ISO_14229_5(基于以太网的统一诊断服务、UDSonIP)协议,假如相应的ECU支持某一种,其他的则是可选的】
[SWS_UCM_01124]{DRAFT}[SWS_UCM_01124]{草案}由D-PDU API实现支持的协议 【】
7.2.7.2 不需要的D-PDU API概念
windows操作系统不需要动态库,ISO 22900-2:2017(E) 8.7.2章节的安装程序不适用与posix操作系统中的AUOSAR AP。
[SWS_UCM_01125] {DRAFT} D-PDU API-软件与MVCI协议模块固件的分离
[SWS_UCM_01126]{DRAFT}根目录描述文件(RDF)
[SWS_UCM_01127]{模块描述文件(MDF)
[SWS_UCM_01128]{DRAFT}符号名称和id
[SWS_UCM_01129]{DRAFT} SAE J2534-1和RP 1210a的兼容性
7.2.7.3不需要D-PDU API功能
PDULockResource()和PDUUnlockResource()在同一物理通信链接上用于锁定和解锁对通信链接的独占访问。
7.2.7.4 使用UCM Master和诊断工具更新经典的平台
诊断管理器将诊断工具连接到自适应平台。诊断应用程序就像一个OTA客户端,并使用UCM Master来推送车辆包和软件包。。
7.2.8 状态报告
UCM Master支持一种机制,将更新活动的状态提供给OTA客户端、车辆驾驶员应用程序和车辆状态管理器。
[SWS_UCM_01201]活动的顺序编排【UCM Master在任何时候最多安排一个活动】
[SWS_UCM_01265]TransferState字段。【UCM Master应提供UCM Master 的VehiclePackageManagement服务接口的TransferState字段上的活动状态】
[SWS_UCM_01203] CampaignState字段。【UCM Master应提供UCM Master 的VehiclePackageManagement服务接口的CampaignState字段上的活动状态】
7.2.8.1 状态
7.2.8.2 状态转换
7.2.9 活动取消
CancelCampaign方法用来取消一个阻塞的更新。UCM Master的行动细节,如清理几个ucm,改变AUTOSAR自适应平台状态,等。都是特定于实现的。
如果一个更新活动被取消,一个新的更新活动可以再次使用传输过来的软件包。UCM Master可以通过调用GetSwPackages调用UCM 来列出已传输过来的软件包。
[SWS_UCM_01244]将有可能取消更新活动【来自UCM Master的方法CancelCampaignr将触发kTransferring或kUpdating状态下的活动的取消】
[SWS_UCM_01270]新活动禁用 【当CancelCampaign方法被调用且参数为DisableCampaign时,UCM Master仍将保持在kIdle状态】
[SWS_UCM_01271]{草案}新的活动启用 【 AllowCampaign方法允许调用CancelCampaign后重新新的活动 】
7.2.10 活动报告
在活动结束后(完成方法已发送给所有UCM),UCM Master应向其报告车辆的后端服务器状态,例如车辆中存在的软件集群的更新信息。
[SWS_UCM_01247]读取历史记录报告的方法
[SWS_UCM_01248]历史记录报告的内容
[SWS_UCM_01266]下属在网络上不可用
[SWS_UCM_01267]车辆状态管理器通信错误
[SWS_UCM_01268]起草}车辆驾驶员接口通信错误
[SWS_UCM_01269]{起草}活动取消的历史记录
7.2.11 车辆包内容
车辆软件包通常由OEM后端组包。一个车辆包必须被建模为一个所谓的VehiclePackage ,它包含从存储在后端数据库中的后端包中提取的软件包清单的集合。这些软件包必须被建模为一个所谓的SoftwarePackage ,其中描述了软件包的内容。车辆包仅包含一个车辆包清单。几种存档文件格式可以用于车辆包或软件包,如.zip、gz、bz2等。UCM和UCM Master可以实现几种与几种归档格式兼容的提取算法,并通过分析文件头来确定要应用的正确格式。
在一个更新活动中,可能需要更新/安装/删除几台机器或ECUs。有些软件集群需要重新启动机器或ECU,有些则只需要重新启动自适应应用程序,有些什么都不需要做(被动地等待下一次重新启动)。为了优化一个活动或实现依赖关系,可能需要一个接一个激活软件集群或者同时激活。为了支持所有可能的活动,车辆包包括一个描述这种协调的模型。它还包含了一种方法来识别涉及的UCM,可能会覆盖此特定活动的默认UCM Master。
必须包含在车辆包清单中的信息有:
- 存储库:uri,存储库或诊断地址,用于历史,跟踪和安全目的
- 车辆描述:车辆描述
- 车辆驾驶员通知:可能需要询问车辆司机,UCM Master是否可以开始传输软件包、处理和激活软件包。还可以通知他必要的安全要求
- 安全策略:安全政策索引,用作向车辆安全经理订阅一个字段的参数。如果车辆安全,将随时通知UCM Master。
- UCM主标识符列表:定义备份UCMMaster
- 活动编排:您可以参考[9]了解更多细节。这个活动模式允许组激活几个ucm和组软件包处理和转移。
[SWS_UCM_01301]车辆包认证
[SWS_UCM_01302]{草案}车辆软件包身份验证失败
[SWS_UCM_01303]}软件包之间的依赖关系
[SWS_UCM_01305]车辆包装格式
[SWS_UCM_01307]{draft}的车辆软件包格式
[SWS_UCM_01306]TransferExit无效的程序包清单
[SWS_UCM_01308]{草稿}检查车辆软件包版本与UCM主版版本的兼容性
7.2.12 车辆更新的安全性和机密性
GetSwClusterInfo, SwPackageInventory和GetHistory方法可以使用私有的或机密信息。
[SWS_UCM_CONSTR_00013]{起草}机密信息保护 【VehiclePackageManagement 和VehicleDriverApplicationInterface接口只能被提供认证保护的安全通信通道调用】