點擊上方藍字談思實驗室
獲取更多汽車網絡安全資訊

01
概述
ETAS RTA-CAR(Classic AUTOSAR)包括用于ECU軟件開發的基礎軟件模塊和工具,主要內容如下:
ISOLAR:工具包含ISOLAR-A和ISOLAR-B兩個部分,用于配置Classic AUTOSAR產品。
ISOLAR-A:用于AUTOSAR架構配置與應用集成工具。
ISOLAR-B:用于配置滿足AUTOSAR標準的基礎軟件,以及用于生成和集成ECU軟件的工具。
RTA-RTE:ETAS RTA-RTE (runtime environment) 為符合AUTOSAR的ECU軟件提供運行時環境。它支持相關AUTOSAR, OSEK/VDX, ISO 26262, 和MISRA C標準的最新版本。
RTA-BSW:RTA-BSW提供全套AUTOSAR基礎軟件模塊,與RTA-OS和RTA-RTE相結合,即可構建用于ECU應用開發的整套AUTOSAR平臺軟件。它提供了完整的基礎軟件協議棧,例如CAN、LIN、J1939、診斷、XCP、以太網SOMEIP等。
RTA-OS:RTA-OS 以汽車工業建立多年的RTA-OSEK 實時操作系統的經驗為基礎。RTA-OS 支持單片和多片微控制器的使用,在最小運行時系統開銷的條件下結合一整套AUTOSAR 功能。由于其ASIL-D 的ISO 26262 認證的優點,RTA-OS 也可以被用于進行嚴格安全要求下的功能開發。

02
開發框架與流程
下面的腦圖包含了使用ETAS CP工具鏈進行開發的一個基本框架,其中把整個ECU的軟件開發設計分為了軟件組件開發、系統級設計與配置、ECU設計、以及RTE集成與配置。其中應用軟件組件開發主要著眼于控制邏輯以及算法的開發,系統級設計與配置主要著眼于組件(包含應用以及基礎軟件組件)之間的關系設計,ECU設計主要著眼于基礎軟件組件,OS,以及底層驅動的設計與實現,RTE的集成與開發則著眼于根據系統級設計完成組件間通信以及任務調度。

下圖是一個自頂而下的開發流程,其中第一步采用的工具是Matlab/Simulink與Embedded Coder,第二步到第四步采用的是ISOLAR(內部集成了RTA-BSW,RTA-RTE),第五步采用的是RTA-OS,第六步采用的是EB,第七步則為HighTec或者是Tasking等。

03
系統及設計與配置
創建部件與系統
部件(Composition)是軟件組件的集合,它包含一組相關甚至整車的所有ECU的軟件組件,下圖是部件的建立方法。

系統(System) 建立的方法如下。

系統建立完成之后,需要為其添加一個Compositon,通過下圖新建一個Root SW Comppsition Prototype。?

建立完成之后建立對剛才部件的引用。

04
定義數據類型(Data Types)與接口(Interface)
AUTOSAR定義了三種數據類型,即應用數據類型(ADT),實現數據數據類型(IDT)以及基本數據類型(Base Type)。下面主要說明一下建立應用數據類型(ADT)中的數組類型。

配置類型屬性。

AUTOSAR常見定義了兩種接口(Interface),一種是發送者-接收者接口(Sender-Receiver Interface,S/R),一種是客戶端與服務器接口(Client-Server Interface,C/S)。S/R接口是一組數據類型的集合,連接的兩個組件通過類似全局變量的方式傳遞數據,C/S接口則是一組函數原型集合,定義了IN(輸入參數),OUT(輸出參數,傳入的是地址)等函數的參數以及返回值。
下圖為一個包含了一組數據集合的S/R接口。增加接口點Add SR Interface即可。

下圖包含了一組函數原型集合的C/S接口,并打開了一個函數的參數,包含BufSize等。增加C/S接口則點擊Add CS Interface即可。

05
系統約束描述文件(DBC)導入
DBC文件主要包含以下幾個部分的內容。
Networks(網絡)
ECUs(電控單元)
Network nodes(網絡節點)
Messages(報文)
Signals(信號)
每個DBC描述的是一個網絡上的通信信息,所以首先要定義一個Networks(網絡),這個是在新建database時自動創建出來的。之后就是定義Network nodes(網絡節點),右鍵單擊Network nodes新建即可,同時將在ECUs(電控單元)菜單中自動創建出相關ECU信息。

定義了網絡節點后,就需要根據項目需求完成Signals(信號)和Messages(報文)的設計。右鍵點擊Signals新建,按照項目的信號矩陣,完成信號的設計。下圖是一個信號的配置界面。

定義了所有的信號之后,即可進行報文設計。右鍵單擊Message新建即可,主要需要定義的屬性如下,并將之前定義好的信號包含進來。? ? ? ??


在完成了所有的信號以及報文設計之后,就需要將他們在各個節點的收發關系定義出來。若報文是發送,則將該報文添加到相應CAN節點的Tx Messages即可;若報文時接收的,則需要拖動該報文的信號,將他們逐一添加到Mapped Rx Signals列表中,下圖是兩個Tx報文和一個Rx報文。

之后,就可以將系統配置所需要的輸入文件導入到ISOLAR中。點擊下圖紅框。

然后進入如下界面,選擇要導入的dbc文件,和導入的CAN網絡與對應的CAN控制器。

然后選擇DBC中要導入的ECU。

最后選擇對應的報文。

最后在對應的ECU中可以看到導入的信號信息。

DBC導入之后會根據DBC中定義的Offset和Factor完成原始值(總線上的值)到物理值(信號的物理值是物理量(如速度、轉速、溫度等)的值)的計算方法,具體的公式為:[Physical value] = ( [Raw value] * [Factor] ) + [Offset]。
06
設計軟件組件?
首先,新建一個應用組件如下圖。

然后,建立軟件組件內部行為,只有建立了之后才能Runnables(可運行項)等功能函數實體。

為軟件添加端口(Port),端口按照方向分為PPort和RPort。
針對S/R接口,PPort“寫入”接口包含的數據,RPort“讀取”接口包含的數據,注意只有在Port引用了接口之后,才會建立數據的定義,不同PPort引用同一個接口會建立不同名稱的數據定義,一個PPort可以對應多個RPort。
針對C/S接口,PPort“實現”接口包含的函數原型,RPort“調用”接口包含的函數,不同PPort引用同一個接口會對應不同的函數實現,一個PPort可以對應多個RPort。
下圖建立了三個Port口,一個是C/S類型的RPort,一個是S/R類型的PPort,一個S/R類型的RPort。

然后我們建立一個Runnables,建立完之后,增加針對S/R類型PPort口的數據訪問如下,我們選擇DataSendPoints顯式(Explicit,應用于實時性較高的數據傳輸,可以通過排布任務調度在一個調度周期內將數據傳輸到另一個組件)。然后增加針對S/R類型RPort口的數據訪問,選擇DataReceivePointByArguments顯示訪問。

然后增加針對C/S類型Port的訪問,訪問類型為Synchronous。因為接口包含了5個函數原型,所以選擇對應的Port口之后,會顯示Port口引用接口下的所有函數原型。

最后,我們添加運行實體的RTE事件,我們選擇周期性事件,并將周期設置成0.01s。

至此,組件相關的設計已經完成,但是要想正確的生成RTE,我們還需要以下幾個步驟將組件跟之前建立的部件,系統,ECU等建立關系。
首先,我們將軟件組件加入部件,雙擊之前建立的部件,然后點擊加號,選擇Component Prototype。

然后選擇之前創建的應用組件Test,點擊OK即可。

然后右鍵之間建立的系統,打開方式選擇SWC To ECU,然后拖拽到ECU之下。


這里還需要把之前定義的Runnables加入到Os_Task,這部分我們到RTT配置部分再介紹。
最后生成組件內函數對應的.C文件,用戶可以再接入/出的信號基礎上添加邏輯。

選擇為每個函數單獨建立一個.c文件。?

下面是生成的.C文件,我們可以在注釋寫了Protect包含的地方寫入代碼,這樣每次生成不會更改此部分代碼。
/* ****************************************************************************** BEGIN: Banner*-----------------------------------------------------------------------------* ETAS GmbH* D-70469 Stuttgart, Borsigstr. 14*-----------------------------------------------------------------------------* Administrative Information (automatically filled in by ISOLAR)*-----------------------------------------------------------------------------* Name:* Description:* Version: 1.0*-----------------------------------------------------------------------------* END: Banner******************************************************************************* Project : CSDNTest* Component: /ARPackage_0/Test* Runnable : RunnableEntity_0****************************************************************************** Tool Version: ISOLAR-AB 4.0.2* Author: geekl* Date : ?????? ???? 21 18:14:36 2024****************************************************************************/#include "Rte_Test.h"/*PROTECTED REGION ID(FileHeaderUserDefinedIncludes :RunnableEntity_0_func) ENABLED START *//* Start of user defined includes - Do not remove this comment *//* End of user defined includes - Do not remove this comment *//*PROTECTED REGION END *//*PROTECTED REGION ID(FileHeaderUserDefinedConstants :RunnableEntity_0_func) ENABLED START *//* Start of user defined constant definitions - Do not remove this comment *//* End of user defined constant definitions - Do not remove this comment *//*PROTECTED REGION END *//*PROTECTED REGION ID(FileHeaderUserDefinedVariables :RunnableEntity_0_func) ENABLED START *//* Start of user variable defintions - Do not remove this comment *//* End of user variable defintions - Do not remove this comment *//*PROTECTED REGION END */#define Test_START_SEC_CODE#include "Test_MemMap.h"FUNC (void, Test_CODE) RunnableEntity_0_func/* return value & FctID */(void){uint32 read1;Std_ReturnType retRead1;EcuM_ShutdownTargetType shutdownTarget1;EcuM_ShutdownModeType shutdownMode2;Std_ReturnType syncCall2;EcuM_ShutdownTargetType shutdownTarget3;EcuM_ShutdownModeType shutdownMode4;Std_ReturnType syncCall3;EcuM_ShutdownTargetType shutdownTarget5;EcuM_ShutdownModeType shutdownMode6;Std_ReturnType syncCall4;EcuM_ShutdownCauseType shutdownCause7;Std_ReturnType syncCall5;EcuM_ShutdownCauseType shutdownCause8;Std_ReturnType syncCall6;uint16 write7;Std_ReturnType retWrite7;/* Local Data Declaration *//*PROTECTED REGION ID(UserVariables :RunnableEntity_0_func) ENABLED START *//* Start of user variable defintions - Do not remove this comment *//* End of user variable defintions - Do not remove this comment *//*PROTECTED REGION END */Std_ReturnType retValue = RTE_E_OK;/* -------------------------------------- Data Read ----------------------------------------- */retRead1 = Rte_Read_RPortPrototype_1_VDP_uint32(&read1);/* -------------------------------------- Server Call Point -------------------------------- */syncCall2 = Rte_Call_RPortPrototype_0_GetLastShutdownTarget(&shutdownTarget1,&shutdownMode2);syncCall3 = Rte_Call_RPortPrototype_0_SelectShutdownTarget(shutdownTarget3,shutdownMode4);syncCall4 = Rte_Call_RPortPrototype_0_GetShutdownTarget(&shutdownTarget5,&shutdownMode6);syncCall5 = Rte_Call_RPortPrototype_0_SelectShutdownCause(shutdownCause7);syncCall6 = Rte_Call_RPortPrototype_0_GetShutdownCause(&shutdownCause8);/* -------------------------------------- CDATA --------------------------------------------- *//* -------------------------------------- Data Write ---------------------------------------- */retWrite7 = Rte_Write_PPortPrototype_0_VDP_uint16(write7);/* -------------------------------------- Trigger Interface --------------------------------- *//* -------------------------------------- Mode Management ----------------------------------- *//* -------------------------------------- Port Handling ------------------------------------- *//* -------------------------------------- Exclusive Area ------------------------------------ *//* -------------------------------------- Multiple Instantiation ---------------------------- *//*PROTECTED REGION ID(User Logic :RunnableEntity_0_func) ENABLED START *//* Start of user code - Do not remove this comment *//* End of user code - Do not remove this comment *//*PROTECTED REGION END */}#define Test_STOP_SEC_CODE#include "Test_MemMap.h"
07
連接系統/內部信號?
通過之前建立的系統,打開系統數據映射編輯界面。

然后選擇通過DBC導入的系統信號與之前建立的RPort與接收的系統信號進行連接。

內部的信號連接首先還是通過之前建立的系統打開部件編輯界面。

然后選擇下面的內部信號連接摁扭。

選擇需要進行的連接,勾選對應連接然后點擊Finish完成連接。

下圖為最后完成的連接。

08
ECU抽取
在生成RTE之前,需要做ECU抽取來把BSW和ASW的改動跟RTE相關的部分抽取出來。選擇對應的ECU,右鍵選擇建立ECU抽取。

選擇如下選項點擊Finish完成ECU抽取。?

來源:汽車ECU開發
?end?

?專業社群?

?精品活動推薦?



更多文章
關于涉嫌仿冒AutoSec會議品牌的律師聲明
一文帶你了解智能汽車車載網絡通信安全架構
網絡安全:TARA方法、工具與案例
汽車數據安全合規重點分析
淺析汽車芯片信息安全之安全啟動
域集中式架構的汽車車載通信安全方案探究
系統安全架構之車輛網絡安全架構
車聯網中的隱私保護問題
智能網聯汽車網絡安全技術研究
AUTOSAR 信息安全框架和關鍵技術分析
AUTOSAR 信息安全機制有哪些?
信息安全的底層機制
汽車網絡安全
Autosar硬件安全模塊HSM的使用
首發!小米雷軍兩會上就汽車數據安全問題建言:關于構建完善汽車數據安全管理體系的建議