Adaptive AUTOSAR——Update and Configuration Management(VRTE 3.0 R21-11)

2023-05-16

16.1 What is Update and Configuration Management?

更新和配置管理(UCM)是自适应平台服务中的一个功能集群。

作为一种自适应平台服务,UCM实现了自适应平台的主要目标之一:

支持在机器上运行的自适应应用程序的灵活更新、安装和删除。

UCM为自适应应用程序实现了一个ara::com API,它实现了更新过程的活动方面。

UCM使用ara::com而不是直接的API,这样就可以灵活地访问功能集群,甚至可以从不同的机器访问。由于UCM完全通过面向服务的通信访问,因此与自适应平台基础中的功能集群不同,RTA-VRTE入门套件中没有提供库(使用正常的ara::com交互)。

16.2 Responsibilities

UCM服务负责管理软件包的安装、更新和删除。UCM是自适应平台的可选组件,但必须存在于每个可以更新的机器上。

UCM只负责其机器上的更新过程,它也被称为UCM Subordinate(第16.7节)。接收要在车辆上安装、更新或删除的软件包由UCM Master(第16.6节)处理。UCM Master制协调所有UCM Subordinate 的软件活动更新。

软件包(第16.4节)描述了在机器使用寿命期间在建模软件集群上执行的单个操作。SoftwareCluster是AUTOSAR ARXML元素,表示一个或多个自适应应用程序进程和包括AUTOSAR清单在内的相关数据元素的集合。

在软件包的构建过程中,UCM的许多行为可以根据所安装工件的需求进行配置。

对SoftwareCluster(及其包含的元素)进行版本控制。

UCM负责检查要安装的软件包的版本,如果传入的版本低于机器上已经可用的版本,则拒绝更新(引发OldVersion错误)。软件集群类型:

APPLICATION-LAYER应用程序层:UCM可以删除软件集群

PLATFORM-CORE平台-核心:不能删除SoftwareCluster,因为它会破坏系统

PLATFORM:SoftwareCluster是平台软件的一部分,可以删除

RTA-VRTE入门套件UCM执行应用程序更新(第16.5节),包括在POSIX文件系统上安装、修改和删除单个软件集群。在更新过程中,RTA-VRTE入门套件UCM管理与状态管理的交互(以确保应用程序在更新前停止)和与持久性的交互(用于软件包存储)。

根据特定项目的集成(默认情况下不包括在RTA-VRTE入门套件中),RTA-VRTE入门套件UCM也可以配置为支持映像更新(第16.6.3节),即不修改POSIX文件系统上的应用程序,而是修改整个映像(即NOR映像、eMMC分区),包括支持A/B更新。请注意,A/B图像之间的切换不在AUTOSAR机器的上下文范围内,因此不在本章的范围内。请联系ETAS了解所需项目特定集成的更多详细信息。

16.3 Architecture

图16.1说明了通用逻辑UCM架构,反映了AUTOSAR服务的通用方法,如状态管理,UCM过程在机器上执行更新的机制,以及特定于平台的自适应应用UCM客户端,其可以被实现为包括诸如从空中传送(OTA)接收更新或决定何时更新以及更新什么之类的功能。

UCM客户端是一个特定于项目的自适应应用程序,用作更新机器的单点交互。UCM客户端应用程序未标准化,因为机器外部的交互超出了AUTOSAR的范围。因此,UCM客户端可以扩展为具有项目所需的任何功能。

无论用例是通过诊断进行的空中更新还是车库更新,UCM都看不到。UCM客户端从UCM中提取用例,并转发数据流和序列控制命令。术语UCM客户端用于描述通过UCM ara::com API使用UCM包管理服务的自适应应用程序。诊断应用程序和UCM主机是此类UCM客户端的两个示例。

UCM客户端获取有关AUTOSAR自适应平台软件的信息,并通过使用UCM API传输和处理软件包来执行更新过程(第16.4节)。

软件包是一个元素,包含要放置在平台上的人工制品以及UCM执行更新过程所需的说明。包含这些指令的元素被称为“软件包清单”,或者更简单地说,“更新清单”。

UCM Master(第16.6节)的目标是提供一个标准的自适应自动泊车解决方案,以通过空中或诊断测试仪安全可靠地更新整车。它协调UCM下属的软件活动。

UCM下属负责机器更新。它(第16.7节)与多个自适应平台功能集群进行交互:

STM (State Management),STM(状态管理),UCM在更新过程中请求不同功能组的状态。例如,停止功能组以更换文件,重新启动ECU等。

Cryptography,加密,UCM需要加密API来对软件包和包含的人工制品进行身份验证和验证。

Persistency,持久性,UCM使用持久性来存储与更新过程相关的值。

此外,UCM下属将在应用程序更新过程中直接与文件系统交互,以复制、删除和添加文件,并在更改内容时在图像更新过程中与存储设备交互。

16.3.1 Dependencies

UCM对自适应平台内的功能集群有多个依赖关系。

RTA-VRTE入门套件UCM的二进制依赖关系见第17.2.10节。本节仅考虑RTA-VRTE入门套件中UCM的功能依赖性。

16.3.1.1 State Management

UCM依赖于状态管理器过程,以在自适应平台处于安全状态时发出信号来执行更新,然后在更新期间将自适应平台和自适应应用程序放入正确的功能组。这是通过向UCM提供UpdateRequest服务来完成的。

有关应如何实现状态管理器以支持UCM交互的更多信息,请参阅第16.5.2节。

16.3.1.2 Cryptography

UCM依赖于加密功能集群进行软件包的身份验证和完整性验证。加密机密,即密钥,用于保护完整性和签署软件包,确保只有授权的包源才能为UCM创建更新包。

签名由UCM检查,而不是由UCM客户端检查。

注意:在当前版本中,RTA-VRTE入门套件UCM未强制执行签名。不完全支持加密功能。

16.3.1.3 Persistency

持久性用于存储有关诊断会话的信息。它由UCM的诊断服务应用程序(DSA)组件使用。

持久化数据的更新和回滚完全由自适应应用程序使用持久性API处理,不涉及UCM。

16.3.1.4 Diagnostics

如第16.3.1.6节所述,UCM使用统一诊断服务(UDS)在诊断客户端和UCM主机之间传输软件包。

UDS是ISO 14229-1:2013[10]中规定的诊断通信协议。它由车库测试仪在与ECU通信时使用,并用于运行更新过程。

16.3.1.5 Package Management

UCM需要来自包管理自适应应用程序的信号,该应用程序被称为“UCM主应用程序”。UCM主应用程序需要UCM提供的PackageManagement服务接口。

有关UCM Master实施的更多信息,请参阅第16.6节。

16.3.1.6应用程序通信

UCM依赖于多个其他自适应应用程序,这反过来意味着这些应用程序需要通过通信管理功能集群进行通信。

需要在以下自适应应用程序之间进行通信:

State Manager状态管理器16.3.1.1–UCM需要状态管理器应提供的UpdateRequest服务。

Package Manager软件包管理器(UCM Master)16.3.1.5–UCM提供UCM Master应要求的软件包管理服务。

16.3.1.7 UDS

UCM的服务接口被设计为使用“标准”UDS诊断服务来接收自适应应用程序的更新,但是服务接口中的方法和字段被设计为可以被任何自适应应用程序使用。

16.4 Software Package

UCM负责管理自适应应用程序的安装、更新和删除。此过程使用软件包执行,每个软件包封装UCM的更新操作(安装、更新、删除)以及相关的可执行代码、数据文件和AUTOSAR清单信息。

UCM支持软件包的身份验证和完整性验证。身份验证可确保包由授权更新机器的已知来源发布。

完整性验证可确保包内容自发布以来未被篡改或损坏。

软件包清单描述了软件包的内容。

在转发到UCM之前,使用ISOLAR VRTE离线配置软件包和清单(见第16.8.2.2节)。

 UCM提供软件包管理服务接口,用于控制软件包的更新。UCM处理本地包,因此包从脱机包存储库转移到UCM可以通过辅助应用程序(如UCM客户端)或通过车外诊断测试仪进行。软件包引用机器上的单个软件集群。

SoftwareCluster是AUTOSAR ARXML元素,表示一个或多个自适应应用程序进程和包括AUTOSAR清单在内的相关数据元素的集合。

SoftwareCluster可以是包含进程、可执行文件和其他元素但没有诊断目标地址的简单“子SoftwareCluster”,也可以是既有诊断目标又可以引用零个或多个“子SoftwareClusters”的“根SoftwareCluster”。

对软件包(以及包含的元素)进行版本控制。UCM在处理操作之前验证要更新或安装的程序包的版本是否比计算机上已有的版本新。

AUTOSAR遵循语义版本控制模式,版本号由三个主要、次要和补丁号组成。通过增加主版本号、次版本号或修补程序,可以获得更高的版本号。AUTOSAR UCM不支持软件集群的降级,因此如果需要降级,则有必要使用更高的版本号重新打包旧的软件集群

SoftwareCluster还可以对其他集群的依赖关系进行建模。UCM将在激活期间验证这些依赖关系(第16.5.1.3节),以确保运行时

在激活完成和自适应应用程序执行开始之前,完成软件包的依赖关系。

16.4.1 Configuration

一个软件包直接引用一个软件集群。此外,程序包必须定义:

1.软件集群名称和版本。

2.要使用软件包执行的操作,即添加、删除或更新。

3.包含在软件包中并由软件包交付的人工制品。人工制品列表中包括真实性/有效性检查的值以及它们在目标上的目的地。

4.包装是否需要ECU重置。

5.在PrepareUpdate、PrepareRollback和VerifyUpdate函数期间,应在与状态管理(STM)交互时调用的函数组的列表。

6.使包能够进行身份验证的加密证书。

使用ISOLAR VRTE中的UCM清单编辑器配置软件包。详见第16.8.2.2节。

16.5使用UCM的应用程序更新

应用程序更新修改一个或多个软件集群的数据和/或可执行文件(一个或更多个自适应应用程序加上自适应平台使用的相关元数据)。这种形式的更新可以在(POSIX)文件系统上安装、删除和修改应用程序,即使在机器使用时也是如此。

执行简单的应用程序更新需要以下内容:

  • UCM subordinate:这是UCM守护进程UCM-pkgmanager,负责处理软件包的处理和安装。
  • State Manager:状态管理器的实现。对State Manager要求的更详细描述见第16.5.2节,关于实施State Manager的指南见第16.8.3.4节。
  • Software Package软件包:一个正确构建的软件包。创建RTA-VRTE入门套件定义软件包的指南见第16.8.2.2节。
  • 软件包最终在机器上的方式取决于实施,但在此过程之后,RTA-VRTE入门套件定义的软件包应最终在目标ECU上。

16.5.1应用程序更新

应用程序更新过程由一个称为UCM Master的应用程序管理;

UCM Master是一个特定于项目的应用程序

UCM Master使用PackageManagement服务控制 subordinate UCM实例。

16.5.1.1传输软件包

UCM在使用软件包时使用缓存机制,一个或多个软件包被传输到UCM下属并进行缓冲。

包传输与下一阶段“处理”解耦,以实现下载优化,例如并行下载,或使下载能够在车辆正常运行期间在后台进行。

组织和应用程序更新的第一步是将软件包从UCM Master转移到UCM subordinate

缓存的数据只能由UCM subordinate 访问但文件被放置在“Scratch”目录中,该目录是为UCM subordinate 的每个实例配置的。

有关配置UCM subordinate 的更多信息,请参阅第16.8节。

软件包数据以序列化的形式发送。序列化是手动执行的:必须读取软件包的数据,将其拆分为块,并分别发送每个块。传输分三个步骤完成:

1.使用TransferStart方法启动传输,该方法需要3个参数:

  • [IN]size–软件包的大小(以字节为单位)。
  • [OUT]id–在并行发生多个传输的情况下,传输id用于通过TransferData和Transfer-Exit方法区分每个流。
  • [OUT]块大小–软件包应拆分为的块的大小(以字节为单位)

2.软件包被拆分为大小为BlockSize的块。

3.使用TransferData方法发送软件包的每个块。

4.为了完成传输,调用TransferExit方法。这也将使软件包转换为transferred状态。

 这将最终导致一个完整的软件包被转移到scratch暂存目录。

16.5.1.2处理软件包

处理阶段processing准备用于安装的软件包,安装将在下一阶段进行。

要启动此阶段,必须调用ProcessSwPackage方法。UCM subordinate 将采取以下行动:

1.提取软件包的内容。文件尚未提取到最终目的地,但仍位于scratch目录中。

2.分析UCM清单文件

 16.5.1.3激活软件包 Activating a Software Package

在激活activation阶段,执行操作(在软件包内的清单文件中指定)。

软件包的激活是使用激活方法开始的;在此阶段,将发生以下情况:

1.检查依赖项–确保清单文件中指定的执行依赖项得到满足。

2.验证机器是否处于安全状态以执行更新——UCM subordinate 调用方法UpdateRequest::RequestUpdateSession。状态管理器可以使用kRejected错误拒绝此更新。

3.现在已经知道可以进行应用程序更新,在更新期间将受到影响的自适应应用程序需要终止。这需要与状态管理器进行另一次交互,UCM subordinate调用UpdateRequest::PrepareUpdate方法,该方法将指定的功能组转换为关闭状态,并终止它们。

4.在一切都处于安全状态的情况下,可以进行应用程序更新。因此,UCM subordinate将执行清单文件中描述的操作。

UCM一次只激活一个软件包,以防止对关键文件进行冲突更新。

16.5.1.4验证软件包Verifying a Software Package

在验证阶段verifying stage,已安装的自适应应用程序在测试配置中运行,以验证其完整性

成功调用Activate后,会自动调用软件包验证

UCM subordinate尝试通过请求状态管理器使用UpdateRequest::VerifyUpdate方法将相关功能组切换到软件包中指定的验证状态来激活更新的集群

如果验证成功,UCM将转换到激活Activated状态。

 如果UCM内部失败,或者从状态管理器接收到错误kVerifyFailed,它将转换到RollingBack状态并尝试回滚更新。成功回滚后,UCM将转换到回滚RolledBack状态。

 16.5.1.5 Finishing a Transaction完成交易

要完成Transaction,将调用Finish方法,UCM将处于Activated or RolledBack状态,软件包将处于Processed已处理状态。

调用Finish后,UCM将转换到CleaningUp状态,在该状态下删除任何备份数据。

完成此操作后,UCM将调用UpdateRequest::StopUpdateSession此时UCM将返回idle空闲状态。

16.5.2 State Manager

状态管理用于将自适应平台和自适应应用程序置于正确的功能组状态,以便进行更新。

更新后,UCM将向状态管理发出信号,再次转换功能组状态,以重新启动自适应应用程序。

因此,所有功能组都需要定义以下强制状态:

Off :自适应应用程序被关闭。在UCM的情况下,这是为了安全地更新应用程序。

Verify:自适应应用程序已启动,应验证它们是否正确运行。

UCM需要由状态管理器提供的UpdateRequest服务接口。State Manager是实现机器状态逻辑的特定于项目的自适应应用程序。UpdateRequest服务接口包括以下方法:

RequestUpdateSession:UCM在准备启动一个或多个软件包的更新会话时调用的方法。如果计算机不处于合适的状态,状态管理将通过抛出kRejected错误来拒绝启动会话请求。

StopUpdateSession:UCM在更新完成时调用的方法,用于通知状态管理操作已完成且机器现在稳定。

ResetMachine:UCM调用的方法,用于请求机器重置。对于要由状态管理接受的请求,UCM之前必须调用RequestUpdateSession

PrepareUpdate:UCM调用的方法,其中包含要更新的功能组列表。状态管理器应将这些功能组转换为关闭状态,以便可以终止和更新相关的自适应应用程序。如果UCM以前没有调用RequestUpdateSession,则状态管理将拒绝该请求。

PrepareRollback:UCM调用的方法,其中包含要回滚的函数组列表。当UCM在激活软件包期间遇到错误时,将调用此方法。如果UCM以前没有调用RequestUpdateSession,则状态管理将拒绝该请求。

VerifyUpdate:UCM调用的方法,带有要验证的功能组列表。状态管理器应将这些功能组转换为验证状态,以便相关自适应应用程序能够启动并验证自身。如果UCM之前未调用PrepareUpdate,则状态管理将拒绝该请求。

UCM和状态管理器之间的交互如图16.9所示。

该图还显示了在更新失败的情况下运行的可选回滚步骤

16.6 UCM Master

UCM Master是AUTOSAR服务的一个特定于项目的附加组件,为UCM Subordinate的控制提供标准化解决方案。

UCM Master可以通过通信管理向不同机器上的UCM下属寻址。

使用PackageManagement服务的功能集群。

UCM Master具有多项职责,但主要负责检索机器上软件包的当前状态信息,并将适当的软件包传输到UCM。

UCM Master可以与以下自适应应用程序交互:

OTA Client–允许从存储库中检索软件包或车辆包。应使用VehiclePackageManagement服务来实现与空中客户端的通信。

Diagnostic Client诊断客户端-(前面描述过)

UCM subordinates——参见第16.7节

Vehicle State Manager车辆状态管理器:它正在收集来自多个车辆ECU的状态,并在安全状态发生变化时通知UCM主机

Vehicle Driver Interface车辆驾驶员界面:创建该界面是为了支持强制性的安全和安保关键更新。它允许驾驶员通过通知和确认请求进行交互

UCM Master可能实现的另一个功能是备份UCM Master系统,其中UCM Master的另一实例将出现在系统上,如果检测到主UCM Master实例的问题,系统可能会回退到第二个实例上。

 16.6.1包装管理

16.6.1.1协商软件包需求

UCM Master的第一个目标是获取有关计算机上已安装软件集群的当前状态的信息,以便构建和安装适当的软件包。可以使用以下PackageManagement方法检索此信息:

GetHistory

GetId

GetSwClusterChangeInfo

GetSwClusterDescription

GetSwClusterInfo

GetSwPackages

然后,这些信息可以与UCM客户端共享,整个系统的需求可以组合成一个单独的包或“Vehicle Package车辆包”,更多信息可以在第16.6.2节中找到。

16.6.1.2安装软件包Installing a Software Package

该过程在第16.5节中有详细描述。

16.6.2 VehiclePackageManagement车辆包管理

车辆包的结构和内容是特定于项目的,没有标准化;因此UCM Subordinate将不会识别这样的包。

UCM Master必须将车辆包Vehicle Package转换为RTA-VRTE入门套件定义的软件包。

车辆包应在UCM Master和具有VehiclePackageManagement服务的Over-the-air client客户端之间传输。

16.6.3Image Update图像更新

Image Update会修改整个(虚拟)Machine image机器映像。它基本上是在设备或分区上安装image files。它与项目定义紧密结合:

  • Hardware
  • File System configuration (A, A/B)
  • Redundancy definition
  • Bootloader
  • Bootload interaction
  • Safety/Recovery procedures
  • ...

RTA-VRTE入门套件UCM可以配置为支持A/B更新,其中更新可以在后台进行(进入非活动分区)。对于image update,需要进行特定于项目的调整,以实现分区的正确处理。请联系ETAS了解更多详细信息。

在下面的段落中描述了image update配置示例。

存在于设备hd1中的图像swp_image_1是利用SW包package1更新的。

更多信息请参见第16.8.3.1节。软件包1.swp包含:artifact_0(image)的二进制)和清单(如下所述)。

UCM下属配置文件示例:

{
"version": "R20-05",
  "monitor": {
    "loglevel": 6,
    "tmpdir": "/tmp",
    "scratch": "/scratch/",
    "domain_id": 0,
    "domain_name": "HouseKeeping",
    "pipeline": {
      "threads": 2,
      "thread_prio": 1,
      "nelem": 16,
      "esize": 65536
    },

    "swp_tar": true
},

"devices": [
  {

    "devid": 0,
    "type": "POSIX_blkdev",
    "node": "/dev/hd1",
    "ioexcl": false,
    "syncio": false,
    "wrerase": false,
    "octsize": 536870912,
    "blksize": 512,
    "erasesz": 512,
    "ioalign": 512,
    "address": "0x00000000",
    "memslots": [
      {

        "type": "None",
        "sltid": 0,
        "maxsize": 10485760,
        "address": "0x00000000",
        "swcgroup": "swp_image_1"

        }

     ]

  }

],

"images": [ {
        "imgid": 0,
        "mount_ro": true,
        "redundancy": false,
        "swcgroup": "swp_image_1"
     }
  ],

"processing_hw": {},
  "processing_sw": {
    "dlt_loglevel": 6,
    "fc_stm_enable": false

    },

    "communication_uds": {},
    "communication_web": {},
    "project_addon": {}
 }

//UCM Client命令文件示例:
{
    "common": {
        "mutexes": [],
        "barriers": [],
        "files": [
        { "name": "file_1", "path":
            "/opt/vrte/ucm-pkgmanager/data/package1.swp" }
        ]    
    },

"threads": [ {
    "commands": [
        { "command": "GetId"
                        },
        { "command": "_BLOCK_RESET", "block_size":
            4096 },
        { "command": "_FILE_OPEN", "file": "file_1"
            },
        { "command": "TransferStart", "transfer_id": 1
            },
        { "command": "TransferData", "transfer_id": 1
            },
        { "command": "TransferExit", "transfer_id": 1
            },
        { "command": "ProcessSwPackage", "transfer_id": 1
            }
        ]
    }
   ]
}

注意:image update程序未完全实施和测试。有关更多信息,请参阅RTA-VRTE入门套件V3.0.0发行说明[5]部分“已知问题和限制”。

16.7 UCM subordinate

UCM subordinate 是一个守护程序进程(UCM-pkgmanager),负责执行更新。车辆中的每台自适应机器都将有一个UCM subordinate 实例,该实例由一个中央UCM Master实例通过使用PackageManagement服务的通信管理功能集群进行控制。

16.7.1内部状态Internal States

在应用程序更新期间,UCM subordinate将通过内部状态进行转换。

UCM Master用于使用PackageManagement服务启动转换。过渡图见图16.11

 应用程序更新序列的详细说明见第16.5节。

UCM独立监控软件包的状态。这允许在任何时候进行多个并行传输,或者在后台进行传输,而不会影响机器的正常功能。软件包状态的转换图如图16.12所示。

Transferring:软件包的Transfer已经启动,并且该软件包正在转移到UCM的过程中。

Transferred:软件包的全部内容已转移。

Processing:正在通过解析清单文件来处理软件包。

Processed:软件包的处理已完成,可以进行安装。

ProcessingStream:软件包正在与传输并行处理。即ProcessSwPackage方法在TransferExit方法之前被调用。

每个软件集群也由UCM独立监控。流程图见图16.13。

Added–UCM已完成对传输的软件包的首次安装的安装操作(kInstall)的处理。激活后,添加的程序包将移动到“当前”状态。

Updated已更新–UCM已完成处理已转移软件包的更新操作(kUpdate)。处理后的程序包需要先激活,然后才能移动到“当前”状态。

Removed已删除–UCM已完成对软件包的删除操作(kRemove)的处理。激活后,软件包将从UCM中完全删除。

Present存在–已处理的软件包(无论是新安装还是更新的软件包)已成功完成激活。在此生命周期状态下,软件包的软件集群已准备好运行。

16.8 Working With Update and Configuration Management

16.8.1 Overview

自适应应用程序的安装、更新和删除由UCM使用包含UCM清单文件和相关工件(可执行代码、数据文件等)的软件包(第16.4节)执行。UCM清单文件描述了软件包激活的必要信息,即是否安装、更新或删除软件包内的工件,文件的目的地等等。

要添加新的自适应应用程序,需要执行以下主要步骤:

  1. Build a Software Package构建软件包-使用ISOLAR VRTE UCM清单编辑器创建软件包清单,然后与人工制品档案结合形成软件包。
  2. Target Preparat目标准备-确保在目标ECU上配置并运行所需的服务。
  3. Communication通信–使用提供的PackageManagement接口将软件包发送到UCM并启动更新。

16.8.2构建软件包Building a Software Package

生成软件包有三个步骤:

1.使用UCM清单编辑器创建包清单(见第16.8.2.2节)

2.创建包含要修改的可执行文件和配置数据的artefact archives

3.将artefact archives和清单打包在一起,形成软件包

16.8.2.1 Preparing An Adaptive Application

创建软件包时,需要做一些准备工作,以确保状态管理器能够成功安装和启动自适应应用程序

自适应应用程序的配置取决于它应该在更新后还是在机器重新启动后启动。

应用程序在机器重新启动时启动

如果自适应应用程序应在机器重新启动时启动,请在执行编辑器中选择应触发自适应应用程序的功能组状态:

 应用程序在更新时启动:

如果自适应应用程序可以在更新后直接安全启动(即无需重新启动机器),则必须创建一个新的功能组。

要添加功能组,请导航到AR Explorer选项卡,右键单击软件元素,然后单击Create Infrastructure

--> Create Mode Declaration ->Elements |Mode Declaration Group.

 可以通过右键单击新创建的模式声明组并单击来添加每个状态

New Child--> Mode Declaration | Mode Declaration.

如前所述,Verify和Off状态对于任何功能组都是强制性的,因此必须首先将这些状态添加到Mode Declaration Group中。

现在,通过右键单击FunctionGroupSet(whichshould already be defined in the project)并单击

New Child --> Function Groups | Mode Declaration Group Prototype.

功能组也必须在包含自适应应用程序的软件集群中进行配置。

 最后,必须在执行编辑器中配置自适应应用程序应在其中运行的功能组状态。

配置自适应应用程序后,可以生成FlatCFG文件并构建可执行文件,以便在UCM Manifest Editor中使用。

用于自适应应用程序的软件包中最重要的文件是可执行文件和用于执行和状态管理的配置(FlatCFGs)文件,例如:

  • exm__<softwarestername>_flatcfg.bin
  • stm__<softwaretername>_flatecfg.bin。

根据需要还可以包括其他数据文件。

16.8.2.2创建软件包清单

UCM Manifest Editor可作为ISOLAR VRTE的一部分,用于创建UCM清单文件,作为软件包的一部分传输到UCM。

ISOLAR VRTE中的更新清单生成器已过期。它与最后一个UCM字段实现不一致。

例如:在新的GetSwClusterDescription()实现中引入了“类型批准”、“许可证”和“发行版”。

实际上,解决方法是手动创建清单文件。

创建扩展名为.ucm文件的清单,其格式为JSON。

您可以使用generic text editor,也可以使用集成到ISOLAR VRTE中的文本编辑器。

Manifest fields清单字段

section "general" “概述”部分

属性,该属性提供有关清单和可以处理清单的UCM的基本信息。

  • manifest_format

表示清单格式的值Value that represents format of the manifest

Type - string

Example - "json"

  • manifest_version

清单版本的值 Value that represents manifest version

Type - string, Length = 5, pattern = [1-3][0-9]-[0-9][0-9]

Example - "22-11"

  • maximum_supported_ucm_version

此软件包支持的UCM的最大版本 The maximum supported version of the UCM for this SoftwarePackage

Type - string, Length = 5, pattern = [1-3][0-9]-[0-9][0-9]

Example - "22-11"

  • minimum_supported_ucm_version

此软件包支持的UCM的最低版本 The minimum supported version of the UCM for this SoftwarePackage

Type - string, Length = 5, pattern = [1-3][0-9]-[0-9][0-9]

Example - "22-11"

section "security_values" “安全值”部分

该属性包含安全值、签名和证书。

以下字段是可选的:不完全支持验证软件包的加密功能。

请参阅RTA-VRTE入门套件V3.0.0发布说明[5]限制。

crypto_object_reference

Description - Crypto object value (Certificate) in hex format

Type - string

Example - "Crypto Object Reference"

crypto_object_size

Description - Size of crypto object (Certificate) in bytes

Type - integer

Example - 1234

crypto_object_type

Description - Type of crypto object

Type - string

Example - "CryptoObjectType"

hash_algorithm

Description - Hash algorithm applied in singing process

Type - string, SHA-2 256 / SHA-2 512

Example - "SHA-2 256"

sec_operation_type

Description - Security operation type as a string value

Type - string

Example - "verify"

security_config

Description - Security operation type as ID

Type - integer

Example - 123

signature_algorithm

Description - Signing algorithm applied in singing process

Type - string

Example - "Ed25519"

signature_size

Description - Size of signature in bytes

Type - integer

Example - 1234

signature_value

Description - Signature value in hex format

Type - string

Example - "3425sadgfgsdgfsdfgsdfgsd"

section "update_manifest" “更新_清单”部分

携带软件包清单内容的属性。UCM说明。

  • name

AUTOSAR Software Package name; reference to Software

Cluster identifier (AUTOSAR Software Cluster uid).

Type - string, MaxLength = 128

Example - "default"

  • version_name

根据自适应AUTOSAR的软件集群版本 Version of Software Cluster according to Adaptive AUTOSAR.

Type - string

Example - "1.0.1"

  • number_of_artifacts

软件包中的工件数量 Number of artifacts defined by (included in) the Software Package.

Type - integer

Example - 1

  1. packager_id

ID,标识提供生成软件包的组织 ID, identifies of the organization that provides the package generating the SoftwarePackage.

Type - integer

Example - 2387642

action

定义软件包执行的操作 Defines action performed by Software Package.

Type - string, install / remove / update

Example - "install"

time_stamp

time_stamp

ISO 8601/POSIX时间/Unix历元。更新数据包创建的时间戳。UCM不应接受在最新应用的更新数据包之前创建的数据包。

ISO 8601/POSIX time/Unix epoch. Time stamp of update packet creation. UCM shall not accept packets that are created before the latest applied update packet.

Type - integer

Example - 1235

total_received_artifacts_size

软件包中包含的所有工件大小的总和。收到的软件包中所有工件的总大小。artifact_package_size的总和。

 Total sum of all artifacts’ sizes contained in the software package. Total size of all artifact in software package as received. Sum of artifact_package_sizes.

Type - string, Length = 128

Example - "524288"

typeapproval

Description - SW cluster organization approval.

Type – string

Example - "India-1"

license

Description - SW cluster license.

Type - string

Example - "VRTE-1"

releasenotes

Description - SW cluster release notes.

Type - string

Example - "Draft-1"

version_code

Description - Version of Software Cluster as unsigned integer. Optional.

It can represent build ID.

Type - integer

Example - 524288

artifacts - Array of artifacts

artifact_address

Description - Uniform Resource Locator (URL) of the artifact

Type -

Example - "file:///"

artifact_compression

* Description - Artifact binary compression information

* Type - string

* Example - "none"

artifact_deployed_size

* Description - Size of artifact

* Type - integer

* Example - 524288

artifact_format

* Description - Artifact binary format

* Type - string

* Example - "tar"

artifact_id

* Description - Artifact identification and artifact order in the Software

Package

* Type - integer

* Example - 0

artifact_install_configuration

* Description - Additional information required for artifact installation

* Type - object

artifact_package_size

* Description - Size of artifact

* Type - integer

* Example - 524288

artifact_security

* Description - Artifact’s security, authenticity and validity values.

* Type - object

· certificate_size - integer, E.g. 1234

· certificate_value - string, E.g. "1234"

· checksum_type - string, SHA-2 256 / SHA-2 512

· checksum_value - string, E.g. "1234"

· cmac_id, CMAC key ID - integer, E.g.: 2134

· secure_configuration - string, E.g. "1234"

· security_value - string, E.g.

"27fbf99d23a5fa825be8ac8ca24c"

artifact_source

* Description - Source of the artifact

* Type - string

· kStream - the artefact shall be transferred using the Transfer-

Data method.

· kLocalPacket - the artefact is in storage somewhere on the current

machine.

· kRemoteInVehicle - the artefact is in storage somewhere in the

vehicle, potentially in a different machine.

· kRemote - the artefact is in storage somewhere outside of the

vehicle.

* Example - "kLocalPacket"

artifact_target

* Description - Target of update defined as string: domain name, function

group, device, name, path in the file system.

* Type - string

* Example - "/opt/vrte/usr/bin"

artifact_type

* Description - Artifact type.

* Type - string, kRaw / kImage / kApplication / kDevice / kScript

* Example - "kApplication"

dependencies List of dependencies.

A single instance of dependency must be fulfilled so the Software Package

can be activated.

Dependency object:

* type - string, SoftwareCluster / Hardware / File / Image / Device

* name - string; Software Cluster ID

* version_name - string

* version_code - string

Example - "Item": []

preconditions List of preconditions.

A single instance of precondition that must be fulfilled so the update can

take a place (can start).

Precondition object:

* type - string, SoftwareCluster / Hardware / File / Image / Device

* name - string; Software Cluster ID

* version_name - string

* version_code - string

Example - "Item": []

failure_configuration

* Description - Operation that UCM should perform after update process

failure.

* Type - object

· script - Identifier to artifact that contains a script.

Type - integer

· stm_request - State manager function group name interested.

Type - string

Example - "script": 0, "stm_request": "default"

postinstall_configuration

* Description - Operation that UCM should perform after install process.

* Type - object

· script - Identifier to artifact that contains a script.

Type - integer

     stm_request - State manager function group name interested.

    Type - string

Example - "script": 0, "stm_request": "default"

preinstall_configuration

* Description - Operation that UCM should perform before install process.

* Type - object

· script - Identifier to artifact that contains a script.

Type - integer

· stm_request - State manager function group name interested.

Type - string

rollback_configuration

* Description - Operation that UCM should perform with the rollback

process.

* Type - object

· script - Identifier to artifact that contains a script.

Type - integer

· stm_request - State manager function group name interested.

Type - string

pre_activate_configuration

* Description - Function group that should be set in specific state in

preActivate step. Information used with Method PrepareUpdate.

* Type - string array

* Example - ["DefaultFG"]

verification_configuration

* Description - Function group that should be set in specific state in

verification step. Information used with Method VerifyUpdate.

* Type - string array

* Example - ["DefaultFG"]

pre_activate_reboot

* Description - Define if system should reboot after pre-activation.

* Type - boolean

* Example - false

post_verification_reboot

* Description - Define if system should reboot after verification.

* Type - boolean

* Example – false

 通用软件包清单示例:

{

{

    "general": {
        "manifest_format": "json",
        "manifest_version": "20-11",
        "maximum_supported_ucm_version": "20-11",
        "minimum_supported_ucm_version": "20-11"
        },

    "security_values": {
        "crypto_object_reference": "Crypto Object Reference",
        "crypto_object_size": 2134,
        "crypto_object_type": "CryptoObjectType",
        "hash_algorithm": "SHA-2 256",
        "sec_operation_type": "verify",
        "security_config": 123,
        "signature_algorithm": "Ed25519",
        "signature_size": 12344,
        "signature_value": "3425sadgfgsdgfsdfgsdfgsd"
    },

    "update_manifest": {
        "action": "install",
        "artifacts": [
        {
            "artifact_address": "file:///",
            "artifact_compression": "none",
            "artifact_deployed_size": 524288,
            "artifact_format": "tar",
            "artifact_id": 0,
            "artifact_install_configuration": {
            "installer_input_value": "0"
            },
        "artifact_package_size": 524288,
        "artifact_security": {
        "certificate_size": 1234,
        "certificate_value": "1234",
        "checksum_type": "SHA-2 256",
        "checksum_value": "1234",
        "cmac_id": 2134,
        "secure_configuration": "1234",
        "security_value":
        "27fbf99d23a5fa825be8ac8ca24c84a
        6747688f0e868fa5892cc497a840f4e59"
        },

        "artifact_source": "kLocalPacket",
        "artifact_target": "swp_image_1",
        "artifact_type": "kImage"
        }
    ],
        "dependencies": {
            "Item": []
        },
        "failure_configuration": {
            "script": 0,
            "stm_request": "default"
        },

        "name": "default",
        "number_of_artifacts": 1,
        "packager_id": 2387642,
        "postinstall_configuration": {
        "script": 0,
        "stm_request": "default"
        },
        "pre_activate_configuration": [],
        "pre_activate_reboot": false,
        "preconditions": {
            "Item": []
        },
        "preinstall_configuration": {
        "script": 0,
        "stm_request": "default"
            },
        "rollback_configuration": {
        "script": 0,
        "stm_request": "default"
        },
        "time_stamp": 1235,
        "total_received_artifacts_size": 524288,
        "version_code":
        "f91d9eb84e55f4e1c01c9c9361084d2127
        2b84a0f91d9eb84e55f4e1c0
        1c9c9361084d21272b84a0f91d9eb84e55
        f4e1c01c9c9361084d21272b84a0f91d9ebd",
        "typeapproval": "India-1",
        "license": "VRTE-1",
        "releasenotes": "Draft-1",
        "version_name": "1.0.1",
        "post_verification_reboot": false
        }
    }
}

16.8.2.3 Creating Artefact Archives

软件包的核心是包含UCM要更新(或安装)的工件(所需的可执行文件和/或配置文件)的档案。RTA-VRTE入门套件使用标准TAR格式的存档文件;有许多工具可用于在PC上创建这些文档。

预计TAR档案中的人工制品位置是相对于安装文件夹定义的。

例如:要更新文件/opt/vrte/bin/HelloWorld,其中安装文件夹在清单中定义为/opt/vrte,则档案中的文物将具有bin/HelloWorld的相对位置。

清单中包含的artefact每个人工制品都必须归档到TAR文件中,并以以下方式命名:

artefact_<Artefact ID>每个artefact的ID可以在artefact选项卡的UCM清单编辑器中找到。

如果UCM找不到artefact,将返回错误[ProcessSwPackage:GeneralReject]。

UCM清单文件也必须重命名为manifest.。如果UCM找不到manifest文件,将返回错误ProcessSwPackage”retval:InvalidManifest

然后将artefact archives和UCM manifest文件封装在图16.14所示结构中的第二个“外部”档案中,以形成准备传输到目标ECU的软件包。

传输机制没有被AUTOSAR标准化,但通常涉及使用例如OTA协议传输到目标ECU上的UCM客户端。

 一旦软件包被transferred,UCM本身就负责最终处理,包括添加/替换/删除artefacts,并保持UCM软件集群数据库的更新。存在软件群集数据库是为了确保包管理不会替换没有相关跟踪信息的文件。它可以通过各种UCM API访问,包括GetSwPackages。有关软件集群数据库的更多详细信息,请参见第16.8.3.2节。

16.8.3 Target Preparation

一旦软件包完成,它就可以部署在目标ECU上,但是,正如之前所解释的那样,某些服务必须正确配置并在目标ECU中运行,更新程序才能成功。

16.8.3.1 UCM

主要的RTA-VRTE入门套件UCM服务是UCM-pkgmanager,它提供核心自适应平台服务,以安全可靠地更新目标ECU上软件集群中的自适应应用程序。

ucm-pkgmanager的操作由构建时配置、运行时命令行选项和配置文件的组合决定。UCM包管理器具有分层体系结构,可以处理每个项目定义的增量更新。

调用ucm-pkgmanager时,配置文件是必需的,并使用命令行选项指定:

ucm-pkgmanager -x <config_file> [options]

[options]:

-h : help

-l : increase log level (multi)

-q : decrease log level (multi)

-f : become a daemon

-s : write log to syslog

-a : write log to ARA::LOG

-c : write log to console

-t <file> : write log to a file

-k <seconds> : deliver SIGALRM after <seconds>

-b <tmpdir> : the location of the temporary directory

-p <pidfile> : the location of the pidfile

配置文件

ucm-pkgmanager配置文件采用JSON格式,具有以下基本轮廓:

{
/// Version of the configuration file format
"version": "R20-05",
/// Settings for the common UCM behavior and its
interaction with the underlying OS
"monitor": { },
/// The memory devices database - i.e. what are the
allowed image update destinations and the methods
used to access them
"devices": [ ],
/// An images database - i.e. what are the images under
UCM management and how they relate to the memory
devices
"images": [ ],
/// Section specific for the processing-hw layer
"processing_hw": { },
/// Section specific for the processing-sw layer
"processing_sw": { },
/// Additional sections can be defined here, depending
on the project specifics and the modules used to
customize UCM
}

监视器部分描述了用于常见UCM行为的设置,以及UCM与操作系统的交互:

"monitor":
{
/// Sets verbosity of the log output from 0(None) to
6(Verbose)
"loglevel": 6,
/// Location of the OS temporary folder
"tmpdir": "/tmp",
/// Location of UCM scratch folder. It is recommended
that this is a separate partition, so that it is not
affected by image updates.
"scratch": "/scratch",
/// ID of the domain this UCM is responsible for
"domain_id": 0,
/// Name of the domain this UCM is responsible for
"domain_name": "HouseKeeping",
/// Shows if UCM should accept the legacy TAR package
format (when set to true) or the new binary package
(SWP) format (when set yo false)
"swp_tar": false,
/// Configuration of the processing pipeline
"pipeline":
{
/// Number of processing threads, i.e. how many
concurrent update operations UCM can perform
"threads": 2,
/// Scheduling priority of the processing threads.
Note that this setting can be readjusted via ExM
Threads (if used)
"thread_prio": 20,
/// Number of elements in the processing buffer
bucket, allocated at start
"nelem": 16,
/// Size of each element in the processing buffer
bucket, allocated at start
"esize": 65536
}
},

注意:启动UCM之前,目标上必须存在scratch文件夹。

设备部分是一个列表,其中包含UCM要使用的每个内存设备的设置:

"devices":
[
{
/// Unique ID of the device
devid: 0,
/// Type of the device - i.e. how it is accessed
type: "POSIX_blkdev",
/// The device’s OS node
node: "/dev/lo0.qnx6.0",
/// Is the access to the device exclusive
ioexcl: false,
/// Is it required to SYNC the writes to it
syncio: false,
/// Is erasing prior to writing required
wrerase: false,
/// Size of the device in bytes
octsize: 1048576,
/// Size of the I/O block
blksize: 512,
/// Size of the erase block
erasesz: 512,
/// How the I/O should be aligned
ioalign: 512,
/// Starting address of the device
address: "0x00000000",
/// Available memory slots (i.e. partitions) on the
device
memslots:
[
{
/// Type of the memory slot: None, Active, Standby,
Factory
type: "None",
/// Unique ID of the slot
sltid: 0,
/// Size of the slot in bytes
maxsize: 1048576,
/// Relative slot address (within the device)
address: "0x00000000",
/// Which SwCluster the slot can accomodate
swcgroup: "mmc_partition_0",
},
],
},
],

最后,Image Section定义图像的properties:

[
{
/// Unique ID of the image
imgid: 0,
/// Is the image mounted RO
mount_ro: true,
/// Is the image has redundancy
redundancy: true,
/// SwCluster to which the image belongs
swcgroup: "welldefined_data",
},
],

16.8.3.2 Software Cluster Database

UCM Master在软件集群数据库中跟踪有关软件集群的信息。它被设计用于处理多个源(例如本地二进制文件、内存(RAM)数据库;扁平CFG;等等),并且位于UCM配置文件中定义的暂存目录中。

注意:数据库不是用当前的软件集初始化的——只有在更新软件集群时才会记录软件集群。只实现本地二进制文件和内存中的数据库。

软件集群数据库由多个记录结构组成:

IRecord–保存有关已安装软件集群的信息;

FRecord–保存与IRecords集中的软件集群相关联的文件的信息;

HRecord–跟踪有关与IRecords集中的软件集群关联的事件的信息。

In-Memory Backend内存后端(MEM)

MEM无法持久化,并使用C++容器来管理软件集群的信息。它用于外部系统提供有关已安装软件集群的信息的情况,因此可以在启动时填充

Binary Files Backend二进制文件后端(BDB)

BDB文件是transaction-oriented面向事务的,支持故障安全操作。后端实现在启动时将自身恢复到最后一个成功提交的事务。存储的数据按网络字节顺序排列。

16.8.3.3通信

UCM和UCM客户端依赖于通信管理,因此执行管理必须在UCM启动之前启动SOM/IP网关和arapipcd。

16.8.3.4 State Management状态管理

当更新、删除或安装新的自适应应用程序时,UCM将与状态管理通信,以便目标可以在更新的关键阶段执行任务(例如,在更新过程中关闭当前运行的应用程序,然后在更新完成时重新启动它)。

状态管理器必须运行才能执行更新,并且还必须提供UpdateRequest服务(请参阅第16.5.2节)。

对于UpdateRequest,应该创建一个HADL文件,将方法描述为一个接口(见第4.2.4.6节)。这也需要定义第16.11节中描述的错误类型。

举个例子,以下是应该如何在HADL中定义方法RequestUpdateSession:

method RequestUpdateSession(out stmerror of stmStateManagementErrorType) throws kRejected

由此HADL生成ARXML,并由此生成Skeleton代码(请参见第4.10.3节)。

基于生成的框架代码,方法的实现必须在(特定于项目的)状态管理器中编写。这些方法定义了系统在更新的关键阶段的行为。State Manager实现需要提供UpdateRequest服务(有关如何提供服务的更多详细信息,请参阅第9.4节)。

所有方法(除了StopUpdateSession)都需要返回一个成功信号,以便UCM继续更新会话。如果状态管理器决定可以继续更新,方法将返回一个没有任何错误集的输出。

以下是RequestUpdateSession的示例:

using namespace ara::sm;
using namespace ara::core;
// make an empty return
struct update_request::OutputRequestUpdateSession output =
{};
// initialize the Promise type
Promise<update_request::OutputRequestUpdateSession>
l_promise;
// set value of promise
l_promise.set_value(output);
// return the method response
return l_promise.get_future();

UCM将只订阅实例ID为1的UpdateRequest服务

根据自适应应用程序使用的通信机制,可能需要在实例清单编辑器中进行进一步配置(请参阅第4.7节)。

16.8.4部署

软件包如何在目标ECU上结束取决于实现者,然而一个简单的方法是使用命令行工具scp。软件包的目的地由UCM Master的实施来确定。

从UCM Master的角度来看,对应用程序更新的更详细描述可以在第16.5节中看到。

organizing a transaction(即安装、更新或删除软件集群)的第一步是将软件包从UCM Master转移到UCM,这是通过TransferStart方法启动的,该方法应从UCM产生以下消息:

UCM log debug V 1 [TransferStart with size <Software Package Size>]
UCM log debug V 1 [TransferStart API is accepted in this state]
UCM log debug V 1 [Created ObjectStore at <scratch directory>/group_<Group ID>/
<Transfer ID>]
UCM log debug V 1 [Transaction upload proxy created for artifact 0]
UCM log info V 1 [Transaction created. ]
UCM log debug V 1 [Transaction GID: <Group ID>]
UCM log debug V 1 [Transaction TID: <Transfer ID>]
UCM log debug V 1 [Transaction FSROOT <scratch directory>/group_<Group ID>/
<Transfer ID>]
UCM log debug V 1 [Transaction UUID: <Unique ID>]

将在UCM配置中前面定义的暂存目录中创建一个新的子目录。在将软件包内容安装到最终目的地之前,会将其缓存到此目录中。然后将使用TransferData方法来传输软件包的所有内容,然后调用TransferExit方法来完成传输。

UCM log debug V 1 [TransferExit for ’291118a9’]
UCM log debug V 1 [TransferExit API is accepted in this state]

发出ProcessSwPackage方法将导致UCM解析清单文件,以确定将在下一阶段发生的操作。

UCM log debug V 1 [Parsing software package manifest ...]
UCM log debug V 1 [Parsing [general] section...]
UCM log debug V 1 [Parsing [general] section...Done.]
UCM log debug V 1 [Parsing [security] section...]
UCM log debug V 1 [Parsing [security] section...Done.]
UCM log debug V 1 [Parsing [update_manifest] section...]
UCM log debug V 1 [Parsing [update_manifest] section...Done.]
UCM log debug V 1 [Parsing software package manifest...: Success]
UCM log debug V 1 [Install: <Artefact> to <destination>]
... Parses through each artefact ...

现在可以使用Activate方法安装软件包的内容。在此阶段,UCM还将与状态管理器进行通信。

UCM log debug V 1 [PackageManagerAR: broadcasted UCM State : Activating]
UCM log warn V 1 [UCM global state: Activating]
UCM log debug V 1 [Executing activate for transaction group: ’0’...]
UCM log debug V 1 [Sending ’RequestUpdateSession’]
<STM receives RequestUpdateSession>
UCM log debug V 1 [’RequestUpdateSession’ retval : kSuccess]
UCM log debug V 1 [Check dependencies for : SwC_DepUnit(
swname[<Software Cluster Name>],
SwC_Version(<Software Cluster Version>)) ...]
UCM log debug V 1 [Sending ’PrepareUpdate’]
<STM receives PrepareUpdate>
UCM log debug V 1 [’PrepareUpdate’ retval : kSuccess]
UCM log debug V 1 [STM - requesting FG activate...: SUCCESS]
UCM log debug V 1 [Activating: SwC_DepUnit(
swname[<Software Cluster Name>],
SwC_Version(<Software Cluster Version>)) ...]

然后验证更新的完整性:在此阶段,状态管理器将把功能组(在清单文件中指定)转换到验证状态,此时自适应应用程序应执行自检以确定更新是否成功。

UCM log debug V 1 [PackageManagerAR: broadcasted UCM State : Verifying]
EXM log info V 1 [UCM IPC event arrived in callback.]
UCM log warn V 1 [UCM global state: Verifying]
UCM log debug V 1 [Sending IPC request to ExM...]
EXM log warn V 1 [Checking for function groups that have to be removed]
EXM log warn V 1 [Checking for processes that have to be removed]
UCM log debug V 1 [Sending ’VerifyUpdate’]
<STM receives VerifyUpdate>
UCM log debug V 1 [’VerifyUpdate’ retval : kSuccess]

最后,调用Finish方法:所有缓存的文件都被清理干净,事务就完成了。

UCM log debug V 1 [Finish command received.]
UCM log debug V 1 [PackageManagerAR: broadcasted UCM State : CleaningUp]
UCM log warn V 1 [UCM global state: CleaningUp]
UCM log debug V 1 [Destroying transaction]
UCM log debug V 1 [~Transaction items : 1 / 1]
UCM log debug V 1 [~Transaction bytes : 225280 / 225280]
UCM log debug V 1 [~Transaction blocks : 55 / 55]
UCM log debug V 1 [Transaction upload proxy destroyed!]
UCM log debug V 1 [Sending ’StopUpdateSession’]
<STM receives StopUpdateSession>

16.9 AUTOSAR Services

RTA-VRTE入门套件支持bosch::vrte::ucm::ara::api命名空间中的AUTOSAR更新和配置管理API

17.2.10 Update and Configuration Management

更新和配置管理功能集群由守护进程ucm-pkgmanager表示。后台进程必须在平台启动期间由执行管理启动。守护进程的依赖关系如图17.15所示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Adaptive AUTOSAR——Update and Configuration Management(VRTE 3.0 R21-11) 的相关文章

随机推荐

  • QNX实时操作系统

    一个实时操作系统 xff08 RTOS xff09 必须是可靠的 xff1b 它必须是快速和响应的 xff0c 管理有限的资源和安排任务 xff0c 使它们按时完成 xff0c 并确保功能是隔离的 xff0c 不受其他功能的干扰 在本节中
  • Makefile教程(绝对经典)

    Makefile教程 xff08 绝对经典 xff0c 所有问题看这一篇足够了 xff09 GUYUEZHICHENG的博客 CSDN博客 makefile 该篇文章为转载 xff0c 是对原作者系列文章的总汇加上标注 支持原创 xff0c
  • 王道考研操作系统笔记

    https mp weixin qq com mp appmsgalbum biz 61 MzI0OTI2MjY2MQ 61 61 amp action 61 getalbum amp album id 61 227777034051051
  • 《管理的常识》:怎么做一个优秀的管理者?

    关于作者 艾伦 默里是 华尔街日报 的副总编 xff0c 华尔街日报 网和市场观察网的执行主编 xff0c 同时也是三次普利策新闻奖的得主 默里先生自己的新闻作品也获得过多次大奖 xff1a 关于亚洲的报道让他两次摘取了海外新闻出版俱乐部奖
  • VLAN 基础知识

    为什么需要VLAN 1 什么是VLAN VLAN Virtual LAN xff0c 翻译成中文是 虚拟局域网 LAN可以是由少数几台家用计算机构成的网络 xff0c 也可以是数以百计的计算机构成的企业网络 VLAN所指的LAN特指使用路由
  • 目标设定的SMART原则

    目标设定的SMART原则来源于管理大师彼得 德鲁克的 管理的实践 xff0c 有五个基本的原则 xff1a 1 目标必须是具体的 xff08 Specific xff09 2 目标必须是可以衡量的 xff08 Measurable xff0
  • 软件安全开发 - 流程规范

    写一篇软件安全开发流程分享给大家 xff0c 帮助从事软件开发 xff0c 测试 xff0c 管理的人员 xff0c 规范操作 xff0c 重视软件工程安全 现今社会存在各种网络安全事件 xff0c 比如勒索病毒导致许多网络系统瘫痪 xff
  • 读保护_混合ASIL系统中不同安全等级模块间的边界保护

    01 功能安全组件的软件开发 针对ISO 26262对功能安全软件研发的要求 xff0c AUTOSAR将功能安全需求进行了具体拆分 当前的AUTOSAR规范囊括了诸多功能安全组件软件开发的需求概念 在AUTOSAR系统设计的架构中 xff
  • 功能安全的一些好文

    特约专栏 一篇文章带你认识功能安全 本文将结合ISO 26262 xff0c 从什么是功能安全 什么是功能安全工程师以及功能安全工程师主要做什么 xff0c 三个方面展开对功能安全的介绍 https mp weixin qq com s v
  • make和makefile

    第二十六课 xff1a Makefile设计 哔哩哔哩 bilibili 内部资料 课程简介 大连理工大学国家精品课 嵌入式软件设计是计算机 软件工程等学科的专业方向课 xff0c 是一门实践性 技术性很强的重要课程 本课程的主要任务是全面
  • acm算法有用吗?写给自己。

    acm算法有用吗 xff1f 写给自己 xff0c 也希望能帮助那些大一迷茫的人 我是一个普通二本院校即将进入大三的acmer xff0c 一般问这个问题的人都是一个acmer的失败者 xff0c 因为成功的人都去忙着学习该学习的算法了 x
  • 算法题中常用的C++ STL

    一 栈 xff08 stack xff09 stack实现了一种先进后出的数据结构 xff0c 使用时需要包含stack头文件 C 43 43 定义stack语法 xff1a span class hljs stl container sp
  • Boot Loader

    在嵌入式操作系统中 xff0c BootLoader是在操作系统内核运行之前运行 可以初始化硬件设备 建立内存空间映射图 xff0c 从而将系统的软硬件环境带到一个合适状态 xff0c 以便为最终调用操作系统内核准备好正确的环境 在嵌入式系
  • 什么是SecOC 板端加密通讯

    板端加密通讯 Security Onboard Communication 缩写为SecOC SecOC是AUTOSAR标准中提出的针对ECU间通信安全提出的标准 CAN网络是明文传输 xff0c 广播报文 xff0c 无发送合法性校验 为
  • C++11:noexcept关键字

    1 介绍 C 43 43 11新标准引入的noexcept 运算符 xff0c 可以用于指定某个函数不抛出异常 预先知道函数不会抛出异常有助于简化调用该函数的代码 xff0c 而且编译器确认函数不会抛出异常 xff0c 它就能执行某些特殊的
  • 嵌入式应用程序设计流程

    第三十课 xff1a 应用程序设计流程 哔哩哔哩 bilibili arm linux gcc 交叉编译器 通过挂载实现程序调试 xff1a xff08 省去程序下载环节 xff09 第三十二课 xff1a 文件操作 哔哩哔哩 bilibi
  • uboot和bootloader有啥区别

    uboot和bootloader有啥区别 reboot to bootloader有什么用 IT教学网 片内的ram用来存储启动代码 xff0c 在2440初始化sdram之前 xff0c 代码就在片内ram中运行 片内ram装载的是nor
  • 微内核和宏内核以及混合内核

    操作系统内核的几个重要的特点 xff1a 内核是操作系统的核心部分 xff0c 它管理着系统的各种资源内核可以看成连接应用程序和硬件的一座桥梁 xff0c 是直接运行在硬件上的最基础的软件实体在一些简单的硬件设备上可以没有内核或操作系统而直
  • Adaptive AUTOSAR——Time Synchronization(VRTE 3.0 R21-11)

    15 Time Synchronization 15 1 What is Time Synchronization 时间同步是自适应平台基础中的一个功能集群 时间同步通过库向应用程序提供C 43 43 API xff0c 该库作为RTA V
  • Adaptive AUTOSAR——Update and Configuration Management(VRTE 3.0 R21-11)

    16 1 What is Update and Configuration Management 更新和配置管理 xff08 UCM xff09 是自适应平台服务中的一个功能集群 作为一种自适应平台服务 xff0c UCM实现了自适应平台的