MPU机制与实现详解

目录

MPU机制与实现详解

Partition元素-MPU

Partition实现元素OSApplication

Partition元素-RTE


MPU机制与实现详解

1、freedom from interference

此概念来自ISO26262-1:多个元素之间没有可能导致违反安全目标的级联故障,称之为免于干涉。

在左侧的设计中,ASIL A的软件模块不可能影响ASIL C的模块,因此ASIL C模块对ASIL A模块免于干涉。

在右侧的设计中,存在从ASIL A到ASIL C系统的数据/控制流 。结果,至少在没有任何进一步分析的情况下,ASIL C系统无法实现对于ASIL A软件模块的免于干涉。ASIL C系统可能会受到ASIL A系统的影响。在这种情况下,需要采取进一步的设计或验证措施,以免受到干扰。例如,ASIL C系统可以首先检查ASIL A系统数据的正确性。考虑到这一措施,ASIL C组件将实现免于干涉。

2、Separation in Memory

Vector 的MICROSAR OS将TASK ISR IOC等集合成OS Application,以便将不同的应用划分到不同的内存区间。针对软件进行的模块化和分区可以提高软件系统的康故障鲁棒性。

同一安全等级的软件或实现同一个安全目标的软件划分到同一个模块或者OS Application。当故障发生时,可以很好的防止出现错误级联,从而实现freedom form interference.

 

SC3 SafeContex OS中必须具备整个软件中最高的 安全等级,例如软件中最高等级的模块位ASIL C,那么OS必须要具备ASIL C等级,才能保证软件模块的安全等级。

SC3 SafeContex OS会运行在Supervisor Mode,保证运行在系统的最高权限。通过Memory Partition,将各个模块在内存访问上的操作进行隔离。如果需要附加模块之间的访问安全机制,可以有效的达到各个不同安全等级模块之间的freedom from interference.

3、Partitioning Options

Davinci 针对Memory Partitionning 有两种解决方案:

1、 BSW运行在Non-Trusted,或者QM-partition,配合Safe WDG的时间监控(deadline)以及OS Scalability Class 3/4。这种情况适合与ECU Software中只有一小部分的软件是功能安全目标实现模块,另外较大一部分是QM。与底层的BSW交互较多。这种交互不需要跨越partition,SafeWDG作为有安全等级的模块出现,且由于其功能是监控软件运行,一般作为软件中最高安全等级。

2、BSW所有模块选择safety 等级模块,与ECU中safety等级的其他功能模块安全等级一致。可以设置为最高安全等级或者QM的其他安全等级,最好与那些BSW交互较多的软件模块设置成一致的安全等级。这样可以有效降低跨越partition所带来的OS切换消耗时间。这种方案适合与有一大部分软件模块都是safe-related模块的ECU。

除此之外,MCAL和外设模块与BSW模块之间的交互也需要评估,与BSW有交互的模块需要划分到BSW同级的模块,并且需要具备该安全等级。

4、Memory Protection

Davinci Safe提供了针对software partition的memory protection,是实现同一个ECU中具备不同安全等级的软件模块时必须要实现的freedom form interference 方法。

Partition元素-MPU

1、MPU介绍

Memory Protection 的实现需要配合硬件MPU。通过MPU配置,各个软件模块将具备对不同memory区域的不同访问权限,主要包括RAM ROM,以及外设寄存器的访问权限。例如,配置低安全等级软件模块无法对高安全等级软件模块的flash RAM段进行访问,(需要配合编译器,将软件模块编译到不同到区域)即可有效防止低安全等级的软件模块在故障产生时对高安全等级模块发生级联醒错误。

MPU的配置是通过设置多个MPU region来实现的,每个MPU region的可配置选项包括: 被保护的起始地址,访问权限,所属硬件MPU分类,Region Owner 以及有效ID等。

一般来讲,MPU分为两类:

System Memory Protection Uint:SMPU

SMPU主要存在于多核系统中,用于对各个BUS设定内存访问权限。一般来讲,SMPU由OS在启动时设定好,在软件运行过程中不会被重新设置,不会在软件中动态的更改BUS对内存的访问权限。

Core Memory Protection Uint:CMPU

CMPU一般负责多核的内存保护,一般每个内核都具备一定数量的CMPU,可以为运行在该内核上的OS Application TASK ISR等分别设定不同的内存区域以及外设地址的访问权限,从而实现软件模块的分区。

CMPU的访问权限包括读、写、执行权限,可以根据内存区域存储内容设定,CMPU在OS的运行过程中是可以更改权限的。当各个OS Application的权限被设定好之后,OS会在OS Application切换时对MPU相关寄存器进行重重新初始化,并设置位即将切换到的OS Application权限。当出现访问超过MPU权限允许范围时,MCU exception会被出发并进入其相应的OS 处理函数,用户可以根据情况 Shutdown OS或者选择进入安全模式,从而有效阻止了软件访问故障的发生。

在OS SC3/SC4中OS Application分为两类,具备最高安全等级的OS Application设定位Tusted Application, 其他不具备Trusted属性的Application 属于Non-Trusted Application,OS和Trusted Application 运行在Supervisor Mode下,Non-Trusted Application则运行在User模式下。推荐为Truesd Application 设定除Stack区域以外的所有地址方位的读、写、执行权限,包括外设地址。

为Non-Trusted Application设定属于其私有的CFlash 和RAM段的访问权限,以及共享数据区域的读写权限。

用户可以根据ECU软件各个模块的安全等级情况,将软件划分的到多个OS Application 中,依据MCU资源设定MPU,进而实现不同安全等级的软件模块的协同工作,并把故障级联的概率降到允许范围内的需求。

2、SMPU和CMPU

2.1、SMPU特性

用于核之间的安全隔离,实现免于干涉SMPU限制核对某些内存空间或者MCU上通过总线访问的外部资源,一般只限制写权限在OS初始化时被初始化,运行过程不会改变。

配置步骤

2.2、CMPU特性

同一核上OS Application Task ISR之间的安全隔离

在启动代码或者运行中设置,限制权限包括读、写、执行权限

配置步骤:

2.3、Static MPU Regions特性

对MPU Regions不指定具体的Owner,对所有软件模块都生效

系统启动时设定好,可以是SMPU 或者CMPU,运行过程中不会改变

2.4、Dynamic MPU Regions特性

对MPU Regions 指定Owner,Owner可以是OS Application TASK ISRS

根据Owner 运行与否,代码运行过程中进行enable/disable

2.5、Optimized /Fast Core MPU Handing

利用Memory Protection Identifiers值的变化,选择性使用MPU Regions,在不重新初始化MPU寄存器的情况下,OS切换到某线程,同时具备PID MPU Region ,实现Dynamic MPU切换。

3、MPU的配置

在常见的软件设计中,由于将软件整体开发到相同的ASIL等级会耗费大量的资源。一般情况下只有一部分软件会开发生ASIL等级,其他模块开发成相对较低的安全等级,为了达到freedom from inerference,需要限制低等级模块对高等级模块的访问。下面举例说明MPU配置的常见思路。

  1. 从Safety方面,高等级的软件模块可以访问其Memroy以及安全等级较低的软件模块Memory。

  2. 从工具方面,MPU可以被配置为各个OS Application TASK ISR 分别独立具备访问范围,工具并不会因为软件模块安全等级的高低而对OS RTE有区别配置,而只是采用模块间的隔离策略。隔离机制不会生成在RTE中。

  3. 从系统角度,整体软件至少需要一个Trusted部分(以OS Application为单位划分),并且Trusted部分是安全等级最高的模块,可以访问其他模块的Memory。

  4. 总结,使用MemMap机制,将各个OS Application所占用Code Data资源进行良好整齐的存放基础上,MICROSAR 的推荐MPU配置为:

  5. 设置软件中等级最高的软件模块为Trusted Os Application,同时设置位privilege。并设置Memory Region,允许该Application访问呢所有Memory段和外设。

  6. 其他每个安全等级模块各设定至少一个OS Applcaiton,并设置为Non-Trusted,针对其设定允许对整个Memory的读权限,和模块代码的执行权限,以及Stack的写权限,共享数据区域的读或者读写权限。

  7. 关于Stack,不需要用户自己设定,OS会占用一个Memory Region进行Stack设置,因此需要留一个Memory Region给到OS。

  8. 共同使用Static MPU 和Dynamic MPU,配合OsAppMemoryProtectionIdentifier的作用,尽量减少MPU在代码运行过程中的重新初始化,这样可以降低OS contex切换的时间。

 配置思路:

3.1、MPC MPU硬件特性及配置

以MPC5744 单核为例介绍,硬件资源如下:

  1. 16个SMPU,24个CMPU,12个data 6个instruction 6个 shared

  2. 2个supervisor ,3种访问权限

  3. 6个可以选择的SMPU访问对象,即6个master ID,分别对应MCU总线上的外设单元

在配置工具中查看硬件资源:

针对OS Application /TASK /ISR设定Memory Region,依次设置其参数并关联到需要生效的OS Application TASK ISR。根据需要对SMPU进行配置,如果所有MPU都没有使用SMPU,OS会在初始化时禁止 Gloabl SMPU Control Bit,SMPU将不会生效。同理CMPU,即使OS 设定为SC3,不设置任何MPU Region,那么MPU会被disable。

MPU配置如下图所示,其中被标注蓝色框的选项是必须设置的选项:

MPC系列的特殊配置:

Memory Region Bus Master:设置允许访问MPU设置地址的Master,仅针对SMPU有效

Memory Region Flag :访问行为的属性,可以参数硬件手册

当出现MPU错误时,代码会进入

Os_Hal_Exception_Machine_MCSRR

Os_Hal_Exception_Data

Os_Hal_Exception_Instrcution

Partition实现元素OSApplication

3.1、OS/OsApplication权限以及访问的权限切换

硬件MCU支持两种访问模式,Privileded 和Non-privileded。其中前者具有比较高的权限,有一部分寄存器需要在前者模式下才能被访问,详细可以参考RM手册。OS会运行在Privilege Mode,具有最高的访问权限,可以访问所有寄存器。

在采用不同的功能安全等级的软件模块协调工作的的系统软件中,需要利用MPU单元防止低安全等级的模块对硬件寄存器进行访问,同时限制除最高安全等级模块之外的其他软件模块的Memory访问。

3.1.1、 OS/OsApplication权限

OS 具备最高权限 Privilege Mode Trusted

Trusted OS Application - Privileged Mode Trusted,一般将软件按照安全等级划分,并分别归属到不同的OsApplication中,其中安全等级最高的部分设置为Trusted,属于可信度最高的模块。目前建议Trusted OsApplication具备其他Application Stack的所有区域访问权限。

3.1.2 MCAL模块Protected Registers 访问

系统初始化时,进行MPU初始化,在此之前MPU处于Disable状态,一般在OS启动初始化MCAL模块,此时可以访问Protected Register。在OS初始化以后,如果MCAL模块需要在Privilege Mode运行时,基本可以分为以下几类:

1、Vector Modules,例如CAN/LIN ETH等通讯模块,一般CAN需要勾选CanUserPeripheralAccessApi,并根据PROTED AREA中的定义相应的OsApplication,CAN将会调用OS接口进行privilege权限的获取。

2、MCAL模块一般需要开启User Mode,例如FlsEnableUserModeSupport,勾选以后,MCAL会采用privilege Mode进行访问。

3.1.3 OsShutdown的实现

AUTOSAR要求只有在Trusted OsApplication才可以进行OsShutdown,否则将无法shutdown成功。可以通过Event的方式通知Trusted Task调用OsShutdown Api。但是需要设置一个高优先级/不可抢占/拓展类的TASK,代码示例如下:

在向FBL跳转以及系统最后的Reset务必使用Mcu_PrefromReset,这样才可以disable MPU,否则可以使用代码disable MPU之后,在调用对应的API进行Reset操作。

3.2 、Trusted/Non-Trusted 配置举例

不同等级的OsApplication之间互相调用时涉及到安全问题,需要做安全访问的权限转换。

1.Trusted Funtion

Trusted OS Application供给其他Application调用的函数,应在Privilege Mode下执行。用于Non-Trusted OsApplication调用Trusted OsApplication内部函数,举例如下:

2.Non-Trusted Funtion

Non-Trusted OsApplication供给其他Application调用的函数,应在User Mode下执行,用于其他OsApplication调用Non-Trusted OsApplication 内部函数。配置方式与上面类似。

3.3、MemMap机制与OS数据的存放

MPU需要限制各个OsApplication Task ISR对各个地址的访问权限,所以明确并整理好各个软件模块的代码数据存放位置是关键。通过MemMap机制,和Link文件。可以将各个模块的代码和数据存放到指定的区域,从而实现MPU保护。如下图,MemMap的作用。

当发生MPU错误时,OS会进入ProtectionHook,并返回E_OS_PROTECTION_MEMORY或者E_OS_PROTECTION_EXCEPTION。

Partition元素-RTE

RTE 作为动态配置的虚拟总线模块,负责 OS application 之间的数据交互和访问,在具备 Memory。

partition 的系统中, OS application 之间的访问会存在跨越安全等级的情况, RET 具备一定的免于干扰的。

机制,分别针对各 OS application 产生代码和变量,在后续的软件分区过程中分别将 RET 生成的对应各。

OS application 的 memory 内容分别归其所属。由于大部分的机制由 RTE 自动完成,需要用户设置的主要。

有以下几点:

  • 为 OS application 分别关联 ECUC partition

  • 生成代码,按照 RTE 段的内容分别归属到相应的 OS application,并各自设置访问权限的允许,

  • 公共的 RTE code(如 RTE_START_SEC_CODE) 需要对所有的 OS application 开放访问权限。

  • 尤其针对跨越 OS application 的访问,分别做好 runnable 的 task mapping,确保调用端和被调用端

  • 分别 mapping 到对应 task。

  • RTE 端口尽量不要出现悬空状态,或链接不处理数据的状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/624686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

案例129:基于微信小程序的外卖商城平台设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

pybind11实现numpy和OpenCV Mat的数据交互

1、编译安装pybind11 下载源代码:https://github.com/pybind/pybind11, 文档:https://pybind11.readthedocs.io/en/stable/compiling.html 解压后进入到命令行,如果有conda环境,就先进入想要的conda环境&#xff0c…

Poi实现根据word模板导出-文本段落篇

最近在做word模板导出的需求,本来意为是很简单,做起来才发现细节上有很多东西处理起来还是比较麻烦的(客户要求太多!!!) 因此我把涉及到基于word模板导出的这部分整理了一下,大家直…

2024年,前端开发者,不妨看看鸿蒙开发

从大环境也好,行业发展也好,过去10年的前端技术晋级路径已经彻底失效。我在去年看了一眼考公的职位,没有任何一个岗位可以由前端胜任,而如果在后端领域比较资深的话,进可以做技术咨询,退可以考架构公务编。…

【基于 InternLM 和 LangChain 搭建你的知识库】学习笔记

学习参考文档【基于 InternLM 和 LangChain 搭建你的知识库】 学习参考链接【书生・浦语大模型实战营第三课作业(基础进阶)】 理论 实战 收集原始数据 收集2018年-2020年几年间的优秀数学建模论文 修改脚本文件,测试文件 作业 复现课程知识库助手搭建过程 La…

PDF文件的创建时间可以修改吗?分享你一个简单的小技巧

PDF文件的创建时间能修改吗? PDF文件的创建时间是指该文件首次被创建或生成的日期和时间。这个时间被存储在PDF文件的元数据中,可以通过某些软件查看和修改。 在某些情况下,我们需要将PDF文件的创建时间修改为特定的日期和时间。例如&#…

如何使用Java采集汽车之家车辆配置参数信息

目录 一、引言 二、采集工具选择 三、采集流程设计 1、确定采集目标 2、确定采集URL 3、发送HTTP请求 4、解析HTML页面 5、CSS选择器或jQuery选择器。 6、异常处理和日志记录 四、代码实现示例 五、结果与分析 六、结论 随着互联网的普及和信息技术的不断发展&…

人人都在用的PDF软件,也要接入ChatGPT了

随着人工智能技术的不断进步和发展,Chatbot技术的应用已经逐渐从娱乐和社交领域扩展到了更多的实际场景中。在办公软件领域,聊天机器人已经成为了提升工作效率、减少人力投入的重要工具,多家头部企业都在探讨将AI接入到软件及应用中的使用方案…

ctfshow元旦水友赛 misc 以假换真wp

记录一下根据官方wp的复现过程 目录 1.解压2.得到新的压缩包3.明文攻击4.上传baidu.jpg至百度网盘得到flag 1.解压 1)下载题目,得到一个名为6.zip的文件 2)尝试直接用360解压,发现需要密码 3)那就常规思路用010打…

便携式VCI汽车售后诊断仪的优点

汽车诊断工具的优点主要包括以下几个方面: 故障检测智能化:汽车诊断I具通过与车辆的紧密连接,能够实时获取车辆的数据流Q参数和诊断信息,实现故障检测的智能化和精确化。快速诊断:汽车诊断I具能够在短时间内完成对车辆的全面检测,提供准确的故障诊断Q结果,帮助维修…

后端杂七杂八系列篇三

后端杂七杂八系列篇三 ① Spring Event用法① 同步代码的用法① 自定义事件② 定义监听器③ 定义发布者④ 发布消息后,接口收到消息 ② 异步代码的用法① 开启异步② 自定义事件③ 自定义监听器(推荐使用 EventListener 注解),使用Async注解④ 定义发布者…

存储卷(数据卷)—主要是nfs方式挂载

1、定义 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的,一旦容器被删除,数据会丢失。k8s基于控制器创建的pod,delete相当于重启,容器的状态会恢复到原始状态。一旦回到原始状态,后天编辑的文件…

写一个判断鼠标进入方向切换图片的效果

直接看代码&#xff1a; <template><div class"mainrouter centerWindi"><div ref"mouse" class"mouse" mouseenter"handleMouse"></div></div> </template> <script setup> import { onMo…

erlang/OTP 平台(学习笔记)(四)

Erlang语言精要 Erlang shell 相较于日常惯用的系统&#xff0c;Erlang系统是一套更富交互性的环境。使用大部分编程语言时&#xff0c;要么把程序编译成OS可执行文件后运行&#xff0c;要么用解释器来执行一堆脚本文件或编译后的字节码文件。无论哪种情况&#xff0c;都是让…

LeetCode:82. 删除排序链表中的重复元素 II(C++、Java)

目录 82. 删除排序链表中的重复元素 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 链表遍历&#xff1a; 实现代码与解析&#xff1a; 82. 删除排序链表中的重复元素 II 题目描述&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复…

美颜技术对比:如何根据项目选择不同的美颜SDK?

各位开发者应该非常清楚&#xff0c;为了在项目中取得最佳效果&#xff0c;选择合适的美颜SDK至关重要。本篇文章&#xff0c;笔者将通过对比不同美颜SDK的关键特性&#xff0c;帮助开发者根据项目需求做出明智的选择。 一、技术原理对比 不同的美颜SDK可能采用不同的技术原理…

汽车线束的汽配企业MES管理系统解决方案

随着科技的飞速发展和环保需求的日益提升&#xff0c;新能源汽车在全球范围内崭露头角&#xff0c;成为未来出行的主导力量。在这股浪潮中&#xff0c;中国凭借其强大的研发实力和市场敏锐度&#xff0c;迅速崛起为新能源汽车领域的佼佼者。而作为汽车数字化控制与智能化应用的…

Unity中URP下的SimpleLit顶点着色器

文章目录 前言顶点着色器1、GPU Instance 相关2、顶点输入数据相关3、雾效混合因子4、对 uv 进行 Tilling 和 Offset 的应用 及 把顶点的坐标信息传给输出结构体5、把法线相关的结果&#xff0c;传给输出结构体6、光照贴图相关7、额外灯相关计算8、阴影相关 前言 在上一篇文章…

elementui-树形控件实现子节点右侧添加图标和数据,鼠标放上去显示文字

1、代码 <el-treev-loading"nameLoding":data"data"node-key"id":highlight-current"true"empty-text"暂无数据":props"defaultPropsIndex"default-expand-all:filter-node-method"filterNodeIndex"…

LeetCode 226. 翻转二叉树

226. 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,…