AUTOSAR架构下QM Application如何访问ASIL Application

admin 2023年10月14日14:34:29评论42 views字数 6097阅读20分19秒阅读模式

前言

在实现功能安全需求时一般会划分QM Application(非功能安全Application)ASIL Application(功能安全Application)QM Application下会包含QM相关的Task, ISR e.g., ASIL Application下包含ASIL相关的Task, ISR e.g.QM ApplicationNo Trusted的,ASIL ApplicationTrusted的,QM Application下的Object的数据应该是独立的Data/Code memory RangeASIL Application下的Object的数据也应该是独立的Data/Code memory range,这些memory range分别都配置了MPU权限。因为ASIL ApplicationTrusted的,那么ASIL下的Object(Task, ISR e.g.)可以调用QM下的ObjectAPI(读写数据,执行代码),但是QM下的Object就不能使用ASIL下的Object的服务了(会产生MPU内部保护Error)。但是,在实际工程项目中不可避免的会出现QM Application访问ASIL Application的情况(比如QMSWC需要访问ASILMCAL)那该怎么办了?本文就来介绍AUTOSAR架构下如何在QM Application下调用ASIL Application的接口。

目录

1. 相关概念介绍

    1.1 什么是Partition

    1.2 什么是Application

    1.3 Partition和Application的关系

    1.4 Application和Memory Protection的关系

    1.5 什么是Trusted Application

2. 方案总览

3. 具体示例

4. 总结


缩略词

简写

全称

ASIL

Automotive Safety Integrity Level

QM

Quality Management, QM意味着根据公认的质量原则进行开发足以降低风险。

ISR

Interrupt Service Router

SWC

Software Component

MPU

Memory Protection Unit



注:本公众号文章中使用了一些第三方工具和文档,若有侵权,请联系作者删除!

正文

1.相关概念介绍

1.1 什么是Partition

AUTOSAR 中,分区是包含一组应用 SWC / 或基础软件模块 的Container 分区具有从 QM ASIL D SIL ,并具有专用的内存保护集(Protection Set)

AUTOSAR架构下QM Application如何访问ASIL Application

多个分区可以共享一个内核,从而允许在一个内核上执行混合 ASIL 软件。

 

1.2 什么是Application

AUTOSAR 操作系统必须能够支持组成一个功能单元的操作系统对象 (任务,中断,警报,挂钩等) 集合。此对象集合称为 OS-Application。属于同一个 OS-Application 的所有对象都可以相互访问。访问是指允许在 API 服务中使用这些对象。其他应用程序的访问权限可以单独授予。

AUTOSAR架构下QM Application如何访问ASIL Application

 

1.3 PartitionApplication的关系

AUTOSAR 中,Partition OS 应用程序实现。因此,这两个术语通常是同义使用的。


1.4 ApplicationMemory Protection的关系

Application可以配置App Memory Protection Identifier, 也就是指定该Application和哪个Protection Set绑定,而每个OS Memory Region会指定哪个Protection Set对齐有哪种访问权限(R, W, X),这样Application对每一块Memory Region的访问权限就确定了。

AUTOSAR架构下QM Application如何访问ASIL Application

 

1.5 什么是Trusted Application

ApplicationTrusted配置项可以配置该Application是否是Trusted, Trusted Application下的所有Objects都是Trusted.

AUTOSAR架构下QM Application如何访问ASIL Application

AUTOSAR架构下QM Application如何访问ASIL Application

 

OS在执行TrustedTask或者ISR(属于某个软件Part,也就是Parttion或者OsApplication)时会将PSW.S置位。


问题PSW.S置位对软件执行有啥影响了?


PSW.S置位,也就是OS ApplicationsTrusted,那么其包含的软件运行时将处于Supoervisor mode,如果没有设置OsTrustedApplicationWithProtection,那么软件可以访问整个内存空间(除了stack regions)。


2.方案总览

如下图所示,QM module不能直接调用ASIL moduleFunction_X_Api(),需要通过一个QMToASILSwitcher的中转模块实现。QM module调用QMToASILSwitcher_ToTrusted()QMToASILSwitcher_ToTrusted调用OS的系统调用接口CallTrustedFunction触发OS TrapOS Trap会调用配置好的QMToASILSwitcher_ToTrusted_Callback()QMToASILSwitcher_ToTrusted_Callback中调用ASIL ModuleAPI.


AUTOSAR架构下QM Application如何访问ASIL Application

 

Note 1: CallTrustedFunction函数介绍


typedef P2VAR(void, TYPEDEF, OS_APPL_DATA) TrustedFunctionParameterRefType;
typedef enum{ QMToASILSwitcher_TrustedFunction_Core0 = 0, QMToASILSwitcher_TrustedFunction_Core1 = 1, QMToASILSwitcher_TrustedFunction_Core2 = 2, QMToASILSwitcher_TrustedFunction_Core3 = 3, QMToASILSwitcher_TrustedFunction_Core4 = 4, QMToASILSwitcher_TrustedFunction_Core5 = 5, OS_TRUSTEDFUNCTIONID_COUNT = 6} TrustedFunctionIndexType;
FUNC(StatusType, OS_CODE) CallTrustedFunction(TrustedFunctionIndexType FunctionIndex,TrustedFunctionParameterRefType FunctionParams){ Os_StatusType status; /* #10 If a trap is needed: */ if(Os_TrapIsTrapForWriteAccessRequired() != 0u) { Os_TrapPacketType packet; /* #20 Marshal API data. */ packet.TrapId = OS_TRAPID_CALLTRUSTEDFUNCTION; packet.Parameters[OS_TRAPPARAMINDEX_1].ParamApiType.ParamTrustedFunctionIndexType = FunctionIndex; /* SBSW_OS_PWA_LOCAL */ packet.Parameters[OS_TRAPPARAMINDEX_2].ParamApiType.ParamTrustedFunctionParameterRefType = FunctionParams; /* SBSW_OS_PWA_LOCAL */ /* #30 Trigger trap. */ Os_Hal_Trap(&packet); /* SBSW_OS_FC_POINTER2LOCAL */ /* #40 Unmarshal return value. */ status = packet.ReturnValue.ReturnOs_StatusType; } /* #50 Otherwise: */ else { /* #50 Call the API directly. */ status = Os_TrapCallCallTrustedFunction(FunctionIndex, FunctionParams); /* SBSW_OS_TRAP_API_USERPOINTER_001 */ }
return Os_ErrReportCallTrustedFunction(status, FunctionIndex, FunctionParams); /* SBSW_OS_TRAP_ERRREPORT_001 */}

CallTrustedFunctionFunctionIndex参数是指定哪一个OS Trap后调用的Callback函数,FunctionParams是一个void *类型的数据,可由用户自定义,可传递用户定义的任意数据。


Note 2:  OS进入Trap后调用的Callback函数类型如下,参数和CallTrustedFunction一样,这样QM Module就能传递信息到ASIL Module



/*! Type of user provided trusted functions. */typedef P2FUNC(void, OS_CODE, Os_ServiceTfCbkType)(  TrustedFunctionIndexType,                                                                                             /* PRQA S 1336 */ /* MD_Os_Rule8.2_1336 */  TrustedFunctionParameterRefType                                                                                       /* PRQA S 1336 */ /* MD_Os_Rule8.2_1336 */);

3.具体示例

QM Module: User_SWC


ASIL Module: Mcal Dio


User_SWCUser_SWC_DioWrite()需要调用DioDio_WrieChannel();


1:配置OsApplicationTrustedFunction,也就是上文说的Callback函数。


AUTOSAR架构下QM Application如何访问ASIL Application

 

2:改写User_SWC_DioWrite()

没改写前:

User_SWC_DioWrite(Dio_ChannelType ChannelId, Dio_LevelType Level){  Dio_WriteChannel (ChannelId, Level);};

改写后:

typedef struct{  Dio_ChannelType ChannelId;  Dio_LevelType Level;} Dio_WriteChannel_Param_Type;
User_SWC_DioWrite(Dio_ChannelType ChannelId, Dio_LevelType Level){ Dio_WriteChannel_Param_Type Config; Config. ChannelId = ChannelId; Config. Level = Level;  QMToASILSwitcher_ToTrusted(&Config);};

3:实现QMToASILSwitcher_ToTrusted()

QMToASILSwitcher_ToTrusted(void * Data){  CallTrustedFunction(QMToASILSwitcher_TrustedFunction_Core0, Data);};

4:实现QMToASILSwitcher_TrustedFunction_Core0()函数

QMToASILSwitcher_TrustedFunction_Core0(TrustedFunctionIndexType FunctionIndex, TrustedFunctionParameterRefType FunctionParams){  void(FunctionIndex);  Dio_WriteChannel_Param_Type Data = Dio_WriteChannel_Param_Type(FunctionParams);  Dio_WriteChannel(Data. ChannelId, Data.Level);};

这样,QM Module调用User_SWC_DioWrite() à  QMToASILSwitcher_ToTrusted() à CallTrustedFunction() à 触发OS Trap à OS调用QMToASILSwitcher_TrustedFunction_Core0() à Dio_WriteChannel().完成了QM ModuleASIL Module的访问。


4.总结

本文介绍了QM Application如何访问ASIL Application,关键就是OS提供的CallTrustedFunction()函数的调用,QM调用CallTrustedFunction通过void *参数传递参数信息且同时触发OS TrapOS Trap能够调用预先配置好的Trusted Callback且能拿到QM传递的调用参数,最后Trussted Callback完成真正的功能调用。给出的示例及其简单,仅供了解原理参考,实际的工程应用还得根据项目情况考虑非常多的情况。



End

「汽车电子嵌入式在CSDN上同步推出AUTOSAR精进之路专栏,本专栏每个模块完全按实际项目中开发及维护过程来详细介绍。模块核心概念介绍、实际需求描述、实际工程配置、特殊需求介绍及背后原理、实际工程使用经验总结。目的是让读者看完每一个章节后能理解原理后根据需求完成一个模块的配置或者解决一个问题。」


点击文章最后左下角的阅读原文可以获取更多信息


或者复制如下链接到浏览器获取更多信息

https://blog.csdn.net/qq_36056498/article/details/132125693



注:本公众号文章中使用了一些第三方工具和文档,若有侵权,请联系作者删除!


推荐阅读

汽车电子嵌入式精彩文章汇总第一期:20210530-20230703

AUTOSAR 架构下EcuM唤醒源事件详解

AUTOSAR架构下NVM Block连续写及Default Value问题分析

AUTOSAR架构下NvM模块详细分析

AUTOSAR架构下报文掉线超时不上报问题分析

Classic Autosar下的以太网通讯架构概览

通信中间件Someip服务化通信

AUTOSAR架构下Fee详细分析

TC37x芯片FLASH基本概念介绍

AUTOSAR架构下Fls详细分析

TC3xx芯片DMU介绍

TC3xx芯片MPU介绍

TC3xx芯片的Trap详解

End



欢迎点赞,关注,转发,在看,您的每一次鼓励,都是我最大的动力!

汽车电子嵌入式

微信扫描二维码,关注我的公众号


原文始发于微信公众号(汽车电子嵌入式):AUTOSAR架构下QM Application如何访问ASIL Application

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月14日14:34:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   AUTOSAR架构下QM Application如何访问ASIL Applicationhttp://cn-sec.com/archives/2110851.html

发表评论

匿名网友 填写信息