MPU机制与实现详解.docx
- 文档编号:8746988
- 上传时间:2023-05-14
- 格式:DOCX
- 页数:14
- 大小:1.39MB
MPU机制与实现详解.docx
《MPU机制与实现详解.docx》由会员分享,可在线阅读,更多相关《MPU机制与实现详解.docx(14页珍藏版)》请在冰点文库上搜索。
MPU机制与实现详解
MPU机制与实现详解
所有本文主要介绍基于Davinci工具链的MPC5746R的MPU功能的实现。
概念介绍
1、freedomfrominterference
此概念来自ISO26262-1:
absenceofcascadingfailures(1.13)betweentwoormoreelements(1.32)thatcouldleadtotheviolationofasafetyrequirement
多个元素之间没有可能导致违反安全目标的级联故障,称之为免于干涉.
在左侧的设计中,ASILA的软件模块不可能影响ASILC的模块,因此ASILC模块对ASILA模块免于干涉。
在右侧的设计中,存在从ASILA到ASILC系统的数据/控制流。
结果,至少在没有任何进一步分析的情况下,ASILC系统无法实现对于ASILA软件模块的免于干涉。
ASILC系统可能会受到ASILA系统的影响。
在这种情况下,需要采取进一步的设计或验证措施,以免受到干扰。
例如,ASILC系统可以首先检查ASILA系统数据的正确性。
考虑到这一措施,ASILC组件将实现免于干涉
2、SeparationinMemory
Vector的MICROSAROS将TASKISRIOC等集合成OSApplication,以便将不同的应用划分到不同的内存区间。
针对软件进行的模块化和分区可以提高软件系统的康故障鲁棒性。
同一安全等级的软件或实现同一个安全目标的软件划分到同一个模块或者OSApplication。
当故障发生时,可以很好的防止出现错误级联,从而实现freedomforminterference
SC3SafeContexOS中必须具备整个软件中最高的安全等级,例如软件中最高等级的模块位ASILC,那么OS必须要具备ASILC等级,才能保证软件模块的安全等级。
SC3SafeContexOS会运行在SupervisorMode,保证运行在系统的最高权限。
通过MemoryPartition,将各个模块在内存访问上的操作进行隔离。
如果需要附加模块之间的访问安全机制,可以有效的达到各个不同安全等级模块之间的freedomfrominterference
3、PartitioningOptions
Davinci针对MemoryPartitionning有两种解决方案:
1、BSW运行在Non-Trusted,或者QM-partition,配合SafeWDG的时间监控(deadline)以及OSScalabilityClass3/4。
这种情况适合与ECUSoftware中只有一小部分的软件是功能安全目标实现模块,另外较大一部分是QM。
与底层的BSW交互较多。
这种交互不需要跨越partition,SafeWDG作为有安全等级的模块出现,且由于其功能是监控软件运行,一般作为软件中最高安全等级
2、BSW所有模块选择safety等级模块,与ECU中safety等级的其他功能模块安全等级一致。
可以设置为最高安全等级或者QM的其他安全等级,最好与那些BSW交互较多的软件模块设置成一致的安全等级。
这样可以有效降低跨越partition所带来的OS切换消耗时间。
这种方案适合与有一大部分软件模块都是safe-related模块的ECU。
除此之外,MCAL和外设模块与BSW模块之间的交互也需要评估,与BSW有交互的模块需要划分到BSW同级的模块,并且需要具备该安全等级。
4、MemoryProtection
DavinciSafe提供了针对softwarepartition的memoryprotection,是实现同一个ECU中具备不同安全等级的软件模块时必须要实现的freedomforminterference方法
Partition元素-MPU
1、MPU介绍
MemoryProtection的实现需要配合硬件MPU。
通过MPU配置,各个软件模块将具备对不同memory区域的不同访问权限,主要包括RAMROM,以及外设寄存器的访问权限。
例如,配置低安全等级软件模块无法对高安全等级软件模块的flashRAM段进行访问,(需要配合编译器,将软件模块编译到不同到区域)即可有效防止低安全等级的软件模块在故障产生时对高安全等级模块发生级联醒错误。
MPU的配置是通过设置多个MPUregion来实现的,每个MPUregion的可配置选项包括:
被保护的起始地址,访问权限,所属硬件MPU分类,RegionOwner以及有效ID等。
一般来讲,MPU分为两类,SystemMemoryProtectionUint和CoreMemoryProtectionUint。
SMPU主要存在与多核系统中,用于对各个BUS设定内存访问权限。
一般来讲,SPMU由OS在启动时设定好,在软件运行过程中不会被重新设置,不会在软件中动态的更改BUS对内存的访问权限。
CMPU一般负责多核的内存保护,一般每个内核都具备一定数量的CMPU,可以为运行在该内核上的OSApplicationTASKISR等分别设定不同的内存区域以及外设地址的访问权限,从而实现软件模块的分区。
CMPU的访问权限包括读、写、执行权限,可以根据内存区域存储内容设定,CMPU在OS的运行过程中是可以更改权限的。
当各个OSApplication的权限被设定好之后,OS会在OSApplication切换时对MPU相关寄存器进行重重新初始化,并设置位即将切换到的OSApplication权限。
当出现访问超过MPU权限允许范围时,MCUexception会被出发并进入其相应的OS处理函数,用户可以根据情况ShutdownOS或者选择进入安全模式,从而有效阻止了软件访问故障的发生。
在OSSC3/SC4中OSApplication分为两类,具备最高安全等级的OSApplication设定位TustedApplication,其他不具备Trusted属性的Application属于Non-TrustedApplication,OS和TrustedApplication运行在SupervisorMode下,Non-TrustedApplication则运行在User模式下。
推荐为TruesdApplication设定除Stack区域以外的所有地址方位的读、写、执行权限,包括外设地址。
为Non-TrustedApplication设定属于其私有的CFlash和RAM段的访问权限,以及共享数据区域的读写权限。
用户可以根据ECU软件各个模块的安全等级情况,将软件划分的到多个OSApplication中,依据MCU资源设定MPU,进而实现不同安全等级的软件模块的协同工作,并把故障级联的概率降到允许范围内的需求。
2、SMPU和CMPU
2.1、SMPU特性
用于核之间的安全隔离,实现免于干涉
SMPU限制核对某些内存空间或者MCU上通过总线访问的外部资源,一般只限制写权限
在OS初始化时被初始化,运行过程不会改变
配置步骤
2.2、CMPU特性
同一核上OSApplicationTaskISR之间的安全隔离
在启动代码或者运行中设置,限制权限包括读、写、执行权限
配置步骤:
2.3、StaticMPURegions特性
对MPURegions不指定具体的Owner,对所有软件模块都生效
系统启动时设定好,可以是SMPU或者CMPU,运行过程中不会改变
2.4、DynamicMPURegions特性
对MPURegions指定Owner,Owner可以是OSApplicationTASKISRS
根据Owner运行与否,代码运行过程中进行enable/disable,
2.5、Optimized/FastCoreMPUHanding
利用MemoryProtectionIdentifiers值的变化,选择性使用MPURegions,在不重新初始化MPU寄存器的情况下,OS切换到某线程,同时具备PIDMPURegion,实现DynamicMPU切换
3、MPU的配置
在常见的软件设计中,由于将软件整体开发到相同的ASIL等级会耗费大量的资源。
一般情况下只有一部分软件会开发生ASIL等级,其他模块开发成相对较低的安全等级,为了达到freedomfrominerference,需要限制低等级模块对高等级模块的访问。
下面举例说明MPU配置的常见思路。
1.从Safety方面,高等级的软件模块可以访问其Memroy以及安全等级较低的软件模块Memory。
2.从工具方面,MPU可以被配置为各个OSApplicationTASKISR分别独立具备访问范围,工具并不会因为软件模块安全等级的高低而对OSRTE有区别配置,而只是采用模块间的隔离策略。
隔离机制不会生成在RTE中
3.从系统角度,整体软件至少需要一个Trusted部分(以OSApplication为单位划分),并且Trusted部分是安全等级最高的模块,可以访问其他模块的Memory
4.总结,使用MemMap机制,将各个OSApplication所占用CodeData资源进行良好整齐的存放基础上,MICROSAR的推荐MPU配置为:
5.设置软件中等级最高的软件模块为TrustedOsApplication,同时设置位privilege。
并设置MemoryRegion,允许该Application访问呢所有Memory段和外设。
6.其他每个安全等级模块各设定至少一个OSApplcaiton,并设置为Non-Trusted,针对其设定允许对整个Memory的读权限,和模块代码的执行权限,以及Stack的写权限,共享数据区域的读或者读写权限
7.关于Stack,不需要用户自己设定,OS会占用一个MemoryRegion进行Stack设置,因此需要留一个MemoryRegion给到OS
8.共同使用StaticMPU和DynamicMPU,配合OsAppMemoryProtectionIdentifier的作用,尽量减少MPU在代码运行过程中的重新初始化,这样可以降低OScontex切换的时间
配置思路:
3.1、MPCMPU硬件特性及配置
以MPC5744单核为例介绍,硬件资源如下:
1.16个SMPU,24个CMPU,12个data6个instruction6个shared
2.2个supervisor,3种访问权限
3.6个可以选择的SMPU访问对象,即6个masterID,分别对应MCU总线上的外设单元
在配置工具中查看硬件资源
针对OSApplication/TASK/ISR设定MemoryRegion,依次设置其参数并关联到需要生效的OSApplicationTASKISR。
根据需要对SMPU进行配置,如果所有MPU都没有使用SMPU,OS会在初始化时禁止GloablSMPUControlBit,SMPU将不会生效。
同理CMPU,即使OS设定为SC3,不设置任何MPURegion,那么MPU会被disable.
MPU配置如下图所示,其中被标注蓝色框的选项是必须设置的选项:
MPC系列的特殊配置:
MemoryRegionBusMaster:
设置允许访问MPU设置地址的Master,仅针对SMPU有效
MemoryRegionFlag:
访问行为的属性,可以参数硬件手册
当出现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会运行在PrivilegeMode,具有最高的访问权限,可以访问所有寄存器。
在采用不同的功能安全等级的软件模块协调工作的的系统软件中,需要利用MPU单元防止低安全等级的模块对硬件寄存器进行访问,同时限制除最高安全等级模块之外的其他软件模块的Memory访问。
3.1.1、OS/OsApplication权限
OS具备最高权限PrivilegeModeTrusted
TrustedOSApplication-PrivilegedModeTrusted,一般将软件按照安全等级划分,并分别归属到不同的OsApplication中,其中安全等级最高的部分设置为Trusted,属于可信度最高的模块。
目前建议TrustedOsApplication具备其他ApplicationStack的所有区域访问权限。
3.1.2MCAL模块ProtectedRegisters访问
系统初始化时,进行MPU初始化,在此之前MPU处于Disable状态,一般在OS启动初始化MCAL模块,此时可以访问ProtectedRegister。
在OS初始化以后,如果MCAL模块需要在PrivilegeMode运行时,基本可以分为以下几类:
1、VectorModules,例如CAN/LINETH等通讯模块,一般CAN需要勾选CanUserPeripheralAccessApi,并根据PROTEDAREA中的定义相应的OsApplication,CAN将会调用OS接口进行privilege权限的获取
2、MCAL模块一般需要开启UserMode,例如FlsEnableUserModeSupport,勾选以后,MCAL会采用privilegeMode进行访问。
3.1.3OsShutdown的实现
AUTOSAR要求只有在TrustedOsApplication才可以进行OsShutdown,否则将无法shutdown成功。
可以通过Event的方式通知TrustedTask调用OsShutdownApi。
但是需要设置一个高优先级/不可抢占/拓展类的TASK,代码示例如下:
在向FBL跳转以及系统最后的Reset务必使用Mcu_PrefromReset,这样才可以disableMPU,否则可以使用代码disableMPU之后,在调用对应的API进行Reset操作
3.2、Trusted/Non-Trusted配置举例
不同等级的OsApplication之间互相调用时涉及到安全问题,需要做安全访问的权限转换。
1.TrustedFuntion
TrustedOSApplication供给其他Application调用的函数,应在PrivilegeMode下执行。
用于Non-TrustedOsApplication调用TrustedOsApplication内部函数,举例如下:
2.Non-TrustedFuntion
Non-TrustedOsApplication供给其他Application调用的函数,应在UserMode下执行,用于其他OsApplication调用Non-TrustedOsApplication内部函数。
配置方式与上面类似
3.3、MemMap机制与OS数据的存放
MPU需要限制各个OsApplicationTaskISR对各个地址的访问权限,所以明确并整理好各个软件模块的代码数据存放位置是关键。
通过MemMap机制,和Link文件。
可以将各个模块的代码和数据存放到指定的区域,从而实现MPU保护。
如下图,MemMap的作用
当发生MPU错误时,OS会进入ProtectionHook,并返回E_OS_PROTECTION_MEMORY或者E_OS_PROTECTION_EXCEPTION
Partition元素-RTE
RTE作为动态配置的虚拟总线模块,负责OSapplication之间的数据交互和访问,在具备Memory
partition的系统中,OSapplication之间的访问会存在跨越安全等级的情况,RET具备一定的免于干扰的
机制,分别针对各OSapplication产生代码和变量,在后续的软件分区过程中分别将RET生成的对应各
OSapplication的memory内容分别归其所属。
由于大部分的机制由RTE自动完成,需要用户设置的主要
有以下几点:
∙为OSapplication分别关联ECUCpartition
∙生成代码,按照RTE段的内容分别归属到相应的OSapplication,并各自设置访问权限的允许,
∙公共的RTEcode(如RTE_START_SEC_CODE)需要对所有的OSapplication开放访问权限。
∙尤其针对跨越OSapplication的访问,分别做好runnable的taskmapping,确保调用端和被调用端
∙分别mapping到对应task。
∙RTE端口尽量不要出现悬空状态,或链接不处理数据的状态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MPU 机制 实现 详解