首先,先放一张CSM CryIf, Crypto Driver的Autosar架构图,这张图是精华,后面我们会详细讲解。
由浅入深,这篇文章中,我会讲到:
-
为什么会存在 CSM, CryIf,Crpto Driver (Why)
-
CSM, CryIf,Crpto Driver每层都做了什么(What)
-
Vector DaVinci configuration(达芬奇)工具怎么实现这三层的配置(How)
一. 为什么会存在 CSM, CryIf,Crpto Driver (Why)
涉及到这个话题就不得不简单的讲一下我们Autosar的架构啦:
Autosar :Automotive open system Architecture的简称
简单解释就是:将汽车电子控制单元 (ECU) 的软件底层做了一个标准的封装。使得大家都能共用一套底层软件,只需要修改其中的一些参数,就可以匹配不同的应用层软件。
再直白一点就是,软硬隔离
Autosar主要分为3个层级:
应用软件(APPL):主要就是用来存放我们自己的代码的地方
实时运行环境(RTE):提供应用层所需的资源,同时将应用层和底层隔离
基础软件层(BSW):将硬件做封装,一直封装到一个标准的操作系统的状态,以便上层可以标准化调用系统服务
我们今天要提及到的CSM, CryIf,Crpto Driver就是位于Autosar的基础软件层。
基础软件层包括:
- 硬件抽象层(MCAL):将芯片的寄存器操作都封装成一个Autosar规定的统一的库API.软件工具EB可以通过界面配置MCAL功能(Crpto Driver位于这一层)
- ECU抽象层:如果说MCAL只是封装了芯片,那么ECU抽象层就是将所有的硬件都进行了封装。(CryIf位于这一层)
- 服务层:包含操作系统(OS)。OS将使用ECU抽象层的API,再对上层暴露出服务接口,其实就是嵌入式实时操作系统(RTOS)所做的工作(CSM位于这一层)
- 复杂驱动:CDD(complex device driver)主要是将Autosar未定义的一些功能封装起来,给应用层提供接口来调用这些功能
讲到这里,我们已经可以非常清晰的了解到,为什么会存在 CSM, CryIf,Crpto Driver了,是为了将硬件HSM的接口做一个封装,以便上层服务可以标准化调用,而不受HSM的不同的影响。
二. CSM, CryIf,Crpto Driver每层都做了什么(What)
举个栗子来讲解会比较通俗易懂,用我放的第一张图:
在这个例子中,
HSM有两个加密驱动对象Crypto Driver Objec:HW-AES和HW-RSA
它们每个都有自己的通道。每个通道连接到一个CSM队列和一个Crypto Driver Object队列。
在这种情况下,两个Crypto Driver Object都在分别处理一个加密作业:AES-high和RSA
而其中一个Crypto Driver Object的队列包含另一个作业(AES-low)。如果HSM的HW-AES已经完成了AES-high的任务,则将AES-low的任务作为下一个任务处理。
假设应用程序的新作业调用RSA:
如果RSA的Crypto Driver Object不繁忙,则立即处理该任务。
如果RSA的Crypto Driver Object很忙,但是Crypto Driver Object的队列未满,则该作业将按优先级顺序列在该队列中。一旦Crypto Driver Object空闲,将执行Crypto Driver Object队列中具有最高优先级的作业。
如果RSA的Crypto Driver Object很忙,并且Crypto Driver Object的队列已满,则该作业将按照优先级顺序存储在CSM队列中。·
如果RSA的Crypto Driver Object忙,且Crypto Driver Object队列和CSM队列都已满,CSM会拒绝请求。
如果RSA的Crypto Driver Object是活动的,则作业已经在加密驱动程序中启动,正在等待更多的数据来处理或完成命令。
三. Vector DaVinci configuration(达芬奇)工具怎么实现这三层的配置(How)
先简单讲一下Autosar实现的工具链:
Matlab:主要是用Simulink做代码生成的,就是我们的应用层软件需要Matlab来开发
Davinci Developer:主要用来设计APPL的程序架构
Davinci Configurator pro:主要用来配置BSW和自动生成RTE的
EB Tresos:主要用来配置MCAL的,可以兼容英飞凌和恩智浦的芯片
我们这边配置的CSM, CryIf,Crpto Driver都在BSW里面,所以只要用到Davinci Configurator工具
Crypto模块配置
Crypto模块需要如下container,如果不存在就需要右键Crypto添加这些Container.
1、CryptoPrimitives配置用到的算法
我这边举了一个CAMC Verify的例子
2、配置CryptoDriverObjects
我这边只添加一个Object: HSM_Crypto
3、配置CryptoGeneral
4、配置CryptoKeyElements
5、配置CryptoKeyTypes
6、配置CryptoKeys
CryIf模块配置
CryIf模块需要如下container: CryIfChannels, CryIfCryptoModules, CryIfKeys, CryIfGeneral.
1、配置CryIfChannels
Driver Objects Ref就是Crypto模块配置中配置好的
2、配置CryIfCryptoModules
3、 CryIfKeys配置
4、CryIfGeneral配置
Csm模块配置
Csm模块需要如下Container: CsmPrimitives, CsmCallbacks, CsmGeneral, CsmJobs, CsmKeys, CsmQueues.
1、CsmPrimitives配置
2、CsmCallbacks配置
根据需要配置,这边只是举个例子
3、CsmGeneral配置
4、CsmJobs配置
5、CsmKeys配置
6、CsmQueues配置