自R21-11版本,AUTOSAR Classic引入了一个新模块——Memory Access,以提供基于地址作为参数的接口方式,向上层提供能够访问不同存储设备(例如FLASH,EEPROM,RAM等)的能力。Memory Access模块和Memory驱动在AUTOSAR架构中和过去的Fls/Eep属于同一层,但是区分为了硬件无关部分(也即MemAcc)和硬件相关部分(Mem)。这样的设计可以满足不同的使用需求,例如:使用NvM/Fee(Ea)访问基于块的非易失型存储数据OTA软件升级一般的基于地址的存储访问基于此设计,过往的Fls/Eep的功能已经被包括,在未来的设计中将不再包括(笔者注:此为规范文档中说明...
上次写了TC3XX MCAL CAN模块的配置(回送门:),今天来梳理一下ETH模块的配置。首先简要的说明一下ETH模块的特性:1.支持10/100/1000M以太网;2.支持MII/RMII/RGMII接口;3.支持全/半双工工作模式;4.以太网帧最大的长度为1522bytes;5.MCAL中仅使用了Tx DMA0和Rx DMA0。ETH的硬件硬件结构图如下图所示。MCAL中关键的API接口:Eth_17_GEthMac_Init,用于使能、复位Eth模块以及MIDO接口初始化;Eth_17_GEthMac_ProvideTxBuffer,用于建立指定发送的buffer,输入参数包括Controller,BufferID,Buffer内容,以及长度。Eth_17_GEthMac_SetControllerMode,...
关于NvM作为ServiceSwComponent的案例介绍,请阅读:本文将关注于NvM作为NvBlockSwComponent是如何工作的。当NvM作为NvBlockSwComponent时,在RTE这一层会创建RAM块,可以被一个或多个SWC通过NVData接口进行读取或者写入。同时,NvMBlockUseSyncMechanism需要设置为TRUE,使用显性同步。这些RAM块通过NvM的RAM镜像进行访问。如果用户仍旧希望使用一个临时的RAM地址,可以继续使用NvM_ReadBlock/NvM_WriteBlock接口。使用这种方案,最大的好处就是一个RAM块可以共享给多个SWC或BSW使用,降低资源的消耗。也不需要消耗额外的buffer。同时,也可以基于N...
前文介绍了通过RTE调用NvM服务两种不同实现方式的介绍,以及NvM作为ServiceSwComponent使用的其中一个案例:本文将介绍NvM作为ServiceSwComponent使用,且没有设置过NvMRamBlockDataAddress的另外一种场景:也即使用显性同步机制。当使用显性同步机制时,需要将NvMBlockUseSyncMechanism配置选择设置为TRUE。在这个场景中,数据仍由应用SWC本地维护,调用NvM_WriteBlock接口会触发写入操作的开始,但此时SWC仍旧可以修改这个数据,直到NvMWriteRamBlockToNvCallback回调函数被调用。这个时候,SWC需要将数据提供给这个回调函数,其会将数据复制到Ram...
在本案例中,NvM配置为ServiceSwComponent,应用程序访问NVRAM数据需要通过C/S接口使用标准NvM服务。根据NvM Block同步方式的不同,进而还有两种场景,本文将介绍第一种:应用提供了其RAM数据区的地址,也即选择的隐性同步机制,同时,NvMRamBlockDataAddress也并未设置。选择隐性同步机制,需要将NvMBlockUseSyncMechanism设置为FALSE。在这种场景下,应用需要提供RAM数据的地址作为NvM_ReadBlock / NvM_WriteBlock接口的参数,因此,用户需要保证RAM数据的一致性。上图展示了此案例中,NvM配置与使用到的block的关系。以write block为例,SWC首先...
在ECU启动过程执行NvM_ReadAll时,根据NvMDynamicConfiguration和NvMResistantToChangedSw选项的设置,会表现出不同的行为。某些项目中,NVRAM块配置的变更不需要去进行其他操作,那么NvMDynamicConfiguration需要设置为FALSE。如果NVRAM的NvMCalcRamBlockCrc选项使能,那么对应的RAM块会被用来计算一致性。如果RAM块的内容被监测到不一致,或者NvMCalcRamBlockCrc未使能,那么NV块被用来计算一致性;如果NV块验证通过,那么数据会被赋给RAM块。如果NV块也不正确,那么将会从ROM中载入默认数据(NvMRomBlockDataAddress开启或者使用了NvMInitBlockCa...
很多项目都开始使用SecOC来完成对消息的加密传输,其基本概念可以阅读:今天,我们来看看应用如何监控SecOC对于消息接收时的验证结果。在AUTOSAR规范中,定义了两类服务,可供开发人员选择,将消息的验证结果进行上传:也即S/R接口以及C/S接口。其中,20-11版本规范以前,仅定义了S/R接口,20-11版本开始,加入了C/S接口,需要开发人员在设计阶段决定好,集成时选择正确的使用版本,保证其类型定义保持一致。类型定义不一样的在于其上报状态时使用的数据类型SecOC_VerificationStatusType,ASR4.3版本的verificationStatus定义只有三个值:分别代表...
两家行业前沿的开源和汽车软件公司结合互补优势,共同构建下一代汽车操作系统。基于Ubuntu的EB corbos Linux是一款开源ECU软件解决方案,它符合汽车行业标准,旨在促进快速创新和简化车辆开发。这个解决方案满足了汽车制造商对操作系统的要求,它具备当前的尖端云计算或企业软件开发所实现的“同类功能和灵活性”。德国埃尔朗根和曼岛道格拉斯,2023年2月21日 – Elektrobit和Canonical日前宣布推出基于Ubuntu的EB corbos Linux,这是业界首次将开源Linux社区引入汽车软件领域的创举。Elektrobit提供的新解决方案可助力OEM和一级供应商利用开源操作...
在上一篇文章中,介绍同步机制时提到了一个接口,也即NvM_SetRamBlockStatus,它的作用是什么呢?启动阶段对于某些NVRAM块,如果存储在NV块的数据比对应RAM块的数据要“旧”(例如热重启场景下,RAM中的数据并未写入到NV存储中),需要保证在NvM_ReadAll的过程中,RAM块的数据不会被覆写。对于这种需求,RAM块需要被分配到reset-safe(不会被初始化的)RAM区域,同时需要在配置工具中将CalcRamBlockCrc勾上,把NvMSetRamBlockStatusApi选项也够上。每当RAM块的数据有修改时,都需要调用NvM_SetRamBlockStatus接口,参数为TRUE。NvM模块将会为RAM块数...
在上文中,我们了解到了NvData处理的时候有两种同步机制,分别是隐性同步和显性同步。本文集中研究两种同步机制的区别。配置工具中的选项以EB Tresos为例,我们在NV Block的配置选项中,能找到开启/关闭显性同步机制的开关,默认情况下未开启,为隐隐性同步模式。隐性同步NvM默认使用的就是隐性同步,如果有多个应用使用同一块RAM区域,那么这些应用之间需要自行保证进行Nvm操作过程中还有对RAM区域的访问。以demo为例,我们为SWC配置了一个NV Block,并且对应的Ram为Demo_CyclicCounter_Ram_Block。由于通过设计软件设计了此Nvm service及访问连接...
AUTOSAR中的Mem Stack可变性和耐久性是ECU内部数据的两种属性,如果期望某个数据既保持可变性,又能让数据在不同的上电周期能够被读取到(也即掉电时数据不丢失),那么数据需要被存储在非易失型数据存储当中(Nvm)。在AUTOSAR架构当中,应用只能通过NvM模块访问非易失型数据数据,NvM模块提供了数据管理与维护的同步/异步服务。Memory Stack参考架构图如下:由于R21-11版本中引入了MemAcc模块,本文参考的最新规范文档当中,并未在上图体现,MemAcc工作在FEE/EA模块之下:本文主要分析AUTOSAR工程对于NvData的处理,不涉及MemAcc细节,之后有空单...
错误类型调试车载嵌入式软件,我们可能会遇到这些类型的错误:硬件错误、故障:软件监测到的错误,故障,或者超出范围的值。例如EEPROM不再可写,或是传感器电压输出超出特定范围软件错误:错误的软件或系统设计。例如给入错误API参数,或者没有初始化数据系统错误:例如CAN接收缓存溢出,或者消息接收超时等错误等级对于可能发生的错误,分为如下几种错误等级:开发错误开发错误是软件错误。这些错误可以通过assertion的方式检查到,并在开发阶段就修复掉。错误监测应当只发生在开发阶段,量产时通过配置或者宏定义等方式关闭此检查。运行时错误运...
模式间的关系一个系统在不同级别的颗粒度上包含众多模式,如下图所示,包含车辆模式,应用模式,ECU本地BSW模式。这些模式会互相作用/影响。他们之间可以有这些相互作用:在不同的车辆模式下,应用可能处于不同的应用模式(比如是否处于激活状态)反过来,某些应用的操作状态可能会触发车辆模式的改变在不同的车辆和应用模式下,BSW模式也可能会变化。比如应用对于通信的需求,可能触发某一路通信网络BSW模式的变化与此同时,BSW模式变化同样可能影响应用模式或者车辆模式,例如通信网络不可用时,依赖于此通信网络工作的应用可能需要进入limp-home...
如不做特别说明,本文基于AUTOSAR 19-11规范进行解读。简介总体上来说,操作系统可以分类为静态配置的或者动态管理的,对于AUTOSAR架构中的操作系统,需要提供的基础功能有:静态配置的能够保证实时性能的提供基于优先级的调度表提供运行时保护功能(内存,时间等)能够在没有外部资源的情况下支持低端控制器这些功能广泛运用于当前的汽车ECU当中(远程终端通信/车载娱乐系统除外)。对于远程终端通信或者车载娱乐系统,目前看来它们仍旧会采用VxWorks, QNX,Windows CE等操作系统,只是,需要在这些操作系统上运行AUTOSAR组件的时候,应当提供一个...
相关背景请阅读:我们知道,在仅考虑面向设备模式下,通信双方拥有预先配置好的CAK密钥,根据这个CAK密钥,MKA key生成过程如下:[1]首先,需要根据KDF(Key Derivation Function, 密钥派生函数)生成ICK(Integrity Check Key,用作完整性校验)和Key Encrypting Key(加密密钥的密钥)。MACsec通信双方的MACsec服务端,还需要先基于随机数算法生成一个随机数,然后再利用KDF基于这个随机数生成出SAK(Secure Association Key,用来通信的密钥)。其后,还需要利用AES算法,用上述提到的派生出的KEK密钥来将SAK密钥进行加密。最后,服务端将加密后...
MACsec基本介绍,请阅读:本文主要描述密钥协商(MACsec Key Agreement)协议。典型组网模式使用MACsec,主要有两种组网模式:面向主机模式和面向设备模式。面向主机模式,https://res.h3c.com/cn/201706/11/20170611_2951682_image002_1000389_30003_0.png面向设备模式,https://res.h3c.com/cn/201706/11/20170611_2951684_image004_1000389_30003_0.png他们的主要区别是,面向主机模式当中,需要由主机进行客户端和接入设备的认证,认证通过后服务器才会将CAK分发给客户端和接入设备。[1]而在面向设备模式当中,则不进行身份认证过程,直接开始会...
概述本篇文章主要讲Linux的实时包PREEMPT_RT是如何实现的。PREEMPT_RT的原理PREEMPT_RT包的关键点是要使非抢占式的内核代码量尽可能的少,同时为了提供抢占性而必须修改的代码量也要尽可能的少。特别是临界区,中断处理程序和中断禁用的代码序列通常是可抢占式的。PREEMPT_RT包充分利用Linux内核的SMP能力来增加额外的抢占能力,而不是重写Linux内核。某种程度上,可以大致认为抢占是给系统新加了一个CPU,然后使用常规锁定原语与抢占任务采取的操作进行同步。注意:这里说的一些原理不要从字面意思上去理解。...
简介通信管理模块(COM Manager, 下称ComM),是AUTOSAR BSW中的一个模块。作为资源管理者,ComM封装了下层的通信服务。ComM控制通信相关的BSW模块,但不会去控制SWC或Runnable。ComM收集来自通信请求方(AUTOSAR中称之为User,后文会解释)的总线通信访问请求,然后来协调这些请求。ComM模块的目的主要有:简化用户对于总线通信协议栈的使用方式,包括简化后的网络管理处理。用户(即User,后文默认这两种说法代表同一个含义)不需要知道任何硬件细节,例如应当使用哪个channel。对于用户来说,只需要请求“通信模式”,ComM模块会切换对应的通信chan...
在车载以太网信息安全的相关文章当中,第四级安全的概念为:在第4级“检测与防御”,检查通信模式异常,根据需要确定防御措施。假定恶意攻击改变了已知通信模式。突然收到异常的定期消息,或者消息的MAC认证反复失败。有一种极端情况是拒绝服务攻击,反复发送消息,其目标是导致信息过载。这会极大影响系统的正常通信。其中,反向路径过滤(Reverse Path Filtering,后称rp filter)是车载以太网信息安全措施当中不可少的一个功能。我们以网关为例,无论是在实时核还是性能核,都需要处理大量的以太网消息,造成很高的负载。同时,考虑到安全,我们...
如不做特别说明,本文介绍的内容都是基于规范的4.3版本。什么是DataType在AUTOSAR的概念当中,对于data type和prototype的定义,根据参考的角度不同,区分了三个不同级别的抽象。Application Data Level是ApplicationSwComponentType普遍指定的一个data type或原型,在这一层定义从应用角度所有需要用到的数据,用来不同应用之间,或者应用和标定工具之间做数据交换。仅仅借助这一层的数据定义,就能指定整个VFB的数据通信。Implementation Data Level则更接近于C语言的代码实现,当然,这一层的Data Type仍然是代码的抽象。Base Type Level用来描述...
我们在hello包中引入并使用zlib,对于hello的test package来说,它是通过间接方式引入了zlib:进入到'require'练习,我们在conanfile.py中看到hello通过requires字段引入了zlib/1.2.11,并在hello.cpp中使用了defstream功能。然后,执行以下命令:conan create . user/testingconan create . user/testing -pr=rpi_armv7你会发现,第二条命令是执行失败的:conan create会去远程仓库搜索zlib包,但是由于远程仓库并没有针对于rpi_armv7(树莓派)已经构建好的二进制包,所以这里就会报错。如果想解决这个问题,可以使用--build选项:conan create . ...
上一节讲到,每一个recipe都可以对应设置一套options,并且可以用conan inspect查看,对于settings来说,它只有一个对应的配置文件,默认为~/.conan/settings.yml。当然, 你也可以自定义settings:profile可是,这么多的settings和options,岂不是意味着每次构建的时候需要输入一大堆参数?No。conan还有一个概念叫做profile,例如默认的default profile是这样的:每次运行conan create . user/testing,等同于conan create . user/testing -pr=default.交叉编译你也可以创建一个新的profile,并将profile放在别的目录,在cross_build练习当中,我...
NvM block model一个block就是以字节为单位的连续的序列,他可以被细分为Data block和CRC block,Data block用于存放user data, CRC block则存放根据userdata算出的对应的checksum。根据block存放的位置不同,我们可以将block分为以下三种:ROM blockPermanent RAM blockTemporary RAM block如果一个block位于rom,那么他就叫ROM data block。NvMRomBlockDataAddress定义了rom block 的地址,rom block中的数据必须是连续的, ROM block中没有CRC。如果block位于ram中,那么就可以称为RAM data block。一般有两种RAM data block, thepermanent RAM d...
现在的很多电子设备都使用的USB,替代了早期的线束和连接器,其中也包括UART。不过UART仍旧在很多场合发挥着作用,比如目前车载嵌入式的工作当中,也常用UART进行状态信息/日志信息输出等操作。[1]什么是UART?UART全称Universal Asynchronous Receiver/Transmitter(通用异步收发传输器),允许两个不同的设备在不需要时钟的情况下,互相进行串口通信。UART可以作为微控制器的一部分,或者独立的组件存在,使用UART通信的两个节点只需要一对连接即可。[2]UART的发送方将来自于控制设备的数据转换为串行数据,通过Tx口发送至接收方的Rx口,接收方再...
SwcInternalBehavior被用来给AtomicSwComponentType定义行为,也即可以进行哪些操作,以何种方式进行操作等等。从设计角度来说,在VFB阶段不用引入SwcInternalBehavior,相关开发人员可以在整个系统的应用层设计结束之后再来为每个SWC创建SwcInternalBehavior。Runnable Entity可运行实体(后文也称作RE),是SWC能提供的最小代码块,往往代表某一项具体功能,同时RE也是OS操作系统调度时使用的主体(实际代码中往往是OS和RTE共同完成调度,在RTE代码中调用相应的RE)。但是呢,CompositionSwCType自身是不能定义Internal Behavior的。最上面的框代...
在文章当中,我们了解到对于安全车载通信,主要涉及到的是MACsec,IPsec,TLS以及SecOC,SecOC针对于PDU,独立于通信协议。关于AUTOSAR SecOC的介绍可阅读本文将介绍MACsec,IPsec,TLS的基本概念,对以太网协议栈能够提供的信息安全相关功能有一个大致概念。基本概念[1]MACSec,IPsec,TLS(SSL)协议从概念上来说都有相似之处,包含两部分处理,一部分是控制处理,用来描述/管理协议本身(认证,密钥等到),另外一部分是数据处理,以安全的方式对上层协议数据进行保护。这三种协议都提供了这些安全服务:双向认证(可选)完整性保密性(可选)不...
SWC之间交换信息的抽象描述,是靠PortInterface来完成的,详细可阅读之前的文章:但是呢,PortInterface仅仅描述了交换信息的结构,并不保证通信是否可靠,或者数据不可用时是否有(默认)初始值可以用。什么是Communication Specification如果想添加可靠通信或者默认初始值等信息,需要在PortPrototype上应用,换个方式说就是,和通讯最相关的属性应当关联在SWC的PortPrototype上。这样的属性,在AUTOSAR中被称作为communication specification,简称为ComSpec。ComSpec是可选的,不是设计PortPrototype时的必选项。几种基本类型以上两张图是ComSpe...
AUTOSAR规定了几种加密服务,我们在配置Primitive的时候会涉及到它,如果不记得Primitive是什么概念了,可以先回顾下:服务有以下几种(以ASR4.3为例),我们分别来看看是每种服务用来做什么:它们对应接口的输入输出参数要求如下(注:Secure Counter的内容在后续ASR版本中已删除,不在讨论范围之内)Csm_Hash哈希算法可以接收一组任意长度的输入数据,经过算法后返回固定长度的字符串输出。哈希是单向的,只有“加密过程”,不可逆,即使输入数据只有一个字母不同,计算得出的哈希值也会完全不一样。所以使用哈希可以比较方便的比较传送数据的发送...
VFB的概念解释了不同SWC之间的通信范式:基于操作通信的client/server,以及基于数据通信的sender/receiver。由此需要定义不同的PortInterface,例如SenderReceiverInterface和ClientServerInterface。什么是Port Interface如果你对面向对象的编程语言有了解,Interface在PHP,JAVA等中都有类似的概念。在AUTOSAR中,PortInterface描述了交换信息的静态结构,当然,你看到静态这两个字,可能会问还有动态数据可以交换吗?你说的没错,只是这个动态数据并不由PortInterface来定义,而是需要定义在PortPrototype当中。当isService属性设置为false时,P...
之前研究了下crypto stack以及初步了解了下配置,不过在crypto模块(这里以EB crypto software为例)里,AUTOSAR定义的Key/KeyType/KeyElement的关系以及Element是如何在加密过程中被使用的,没法一下子理解。今天抽空再次阅读了下AUTOSAR规范,理了下思路。规范中的解释我们先来看下规范中对于这几个术语是如何解释的:Key: 可以被Csm的job关联;在Crypto驱动模块中,Key会关联到一个Key Type。Key Type: 包含Key Element的关联信息;一般由Crypto驱动提供商做好预配置。Key Element: 用来存储数据,这个数据既可以是Key Material,也可以是AES加密...