角色与系统上下文
在 AUTOSAR Adaptive Platform 架构中,服务接口 PackageManagement 是更新与配置管理模块(Update and Configuration Management, UCM)对外暴露的核心服务提供方接口。通过 ara::com 机制,外部客户端(例如车辆级更新客户端或其他管理组件)作为服务消费者,可与 UCM 服务提供端建立客户端/服务器通信。UCM 实例通过方法 [SWS_UCM_00343] 的 GetId 向客户端提供自身模块实例化标识符,从而支持客户端明确识别并定位具体的 UCM 实例。
该接口承担着整车或单个自适应机器上软件包(Software Package)与软件簇(Software Cluster)的全生命周期管理职责。客户端可以通过调用查询接口随时获取运行状态与部署视图,例如通过 [SWS_UCM_00357] 查询处于 kPresent 状态的已安装软件簇,或通过 [SWS_UCM_00358] 读取指定软件簇的清单详细信息。在执行更新过程中,客户端通过 [SWS_UCM_00356] 获取处于 kAdded、kUpdating 或 kRemoved 等待定变更状态的软件簇列表,进而全面掌握当前机器的软件配置态势。
时序图: 展示客户端与 PackageManagement 服务之间软件包传输、处理、激活及完成的标准交互流程。数据源: [SWS_UCM_00345], [SWS_UCM_00346], [SWS_UCM_00347], [SWS_UCM_00349], [SWS_UCM_00352], [SWS_UCM_00354]。
方法、字段与调用语义
接口中定义的所有服务方法均显式配置为非即发即弃语义(Fire & Forget: false),这意味着在 ara::com 中客户端每次调用均会返回基于 ara::core::Future 的异步或同步结果,从而保障交互的强一致性与可靠性反馈。软件包的载入提供了两种途径:其一为流式分块传输,客户端首先调用 [SWS_UCM_00345] 的 TransferStart 声明包总字节大小,获取后续交互专用的 TransferIdType 以及推荐的数据块大小 blockSize;随后通过多次分块调用 [SWS_UCM_00346] 的 TransferData 按块序号顺序发送包载荷,并在数据传输完成后调用 [SWS_UCM_00347] 的 TransferExit 结束传输阶段。若软件包已预置在文件系统中或由网络直载,客户端可直接调用 [SWS_UCM_00344] 的 RegisterSoftwarePackage 并传入 URI 换取传输标识符。
在传输或注册完毕后,客户端调用 [SWS_UCM_00349] 的 ProcessSwPackage 触发对指定软件包的处理与解包。针对处理后的软件簇,客户端调用 [SWS_UCM_00352] 的 Activate 执行软件激活,并在所有更新动作验证无误后调用 [SWS_UCM_00354] 的 Finish 完成批次处理并清除临时来源数据。若需提前丢弃已传输的包,客户端可调用 [SWS_UCM_00348] 的 DeleteTransfer 释放存储。
服务接口还包含只读字段(Field)CurrentStatus,该字段同时具备 Getter 与 Notifier 特性 [SWS_UCM_00361],允许客户端随时拉取或通过事件通知实时监听 UCM 的整体运行状态。针对正在执行的动作,客户端可通过 [SWS_UCM_00360] 的 GetProgress 获取当前激活状态的进度信息;此外还可通过 [SWS_UCM_00359] 检索当前可用的软件包列表,或调用 [SWS_UCM_00355] 的 GetHistory 按时间戳区间过滤并审计 UCM 所执行的历史动作日志。
生命周期与会话控制
PackageManagement 状态机通过严格的前置条件和会话转换保障更新过程的数据完整性。长耗时的软件包处理流程支持中断与挂起控制:客户端可使用 [SWS_UCM_00351] 的 Cancel 主动中止正在处理的软件包;对于耗时或特定状态的操作,可借助 [SWS_UCM_00397] 的 Suspend 进行暂停,后续再通过 [SWS_UCM_00398] 的 Resume 恢复执行。
在异常或放弃部署的场景中,该接口支持两级回滚与恢复机制:若仅在 ProcessSwPackage 处理阶段需要撤销一组已处理包对平台造成的改动,可调用 [SWS_UCM_00350] 的 RevertProcessedSwPackages;若在激活阶段遇到故障或需要整体撤销,可调用 [SWS_UCM_00353] 的 Rollback 使整机系统退回到软件包处理之前的初始状态。此外,激活过程紧密依赖系统状态管理协同,若出现外部会话拒绝或校验未通过,激活将直接终止 [SWS_UCM_00352]。
错误处理与 Application Errors
各方法通过声明式的 Application Errors 清晰表达失败成因,客户端应根据错误码分类进行针对性处理:
- 上下文与状态冲突:几乎所有方法(如
Cancel、Finish、Rollback、TransferData 等)在当前状态机上下文不匹配时均会抛出 kOperationNotPermitted [SWS_UCM_00351]、[SWS_UCM_00354];若存在并发冲突,ProcessSwPackage 会返回 kServiceBusy [SWS_UCM_00349]。
- 传输与数据校验错误:分块传输过程中,校验失败会触发
kBlockIncorrect、kBlockSizeIncorrect、kSizeIncorrect、kBlockInconsistent 或 kTransferFailed [SWS_UCM_00346];调用 TransferExit 时若总大小不符则返回 kDataInsufficient [SWS_UCM_00347];无效传输标识符统一返回 kTransferIdInvalid [SWS_UCM_00348]。
- 安全与包完整性校验:软件包若签名或权限无效则返回
kAuthenticationFailed,格式或校验和错误返回 kPackageFormatUnsupported、kPackageManifestInvalid、kChecksumDescriptionInvalid、kPackageInconsistent 及 kProcessedSoftwarePackageInconsistent [SWS_UCM_00346]、[SWS_UCM_00349]。
- 依赖与策略冲突:如果依赖关系缺失,
Activate 返回 kDependencyMissing [SWS_UCM_00352];若涉及核心平台组件删除或版本降级,会触发 kSwclRemovalDenied 或 kOldVersion [SWS_UCM_00347]、[SWS_UCM_00349]。
- 平台与状态管理协同失败:
Activate 可能由于状态管理(State Management)拒绝更新会话而返回 kUpdateSessionRejected,或返回 kVerificationFailed、kPrepareUpdateFailed 与 kPersistencyAllocationFailed [SWS_UCM_00352]。
gemini-3.8-flash-low· 2026-10-13 · 德文原文