asp.net网站很快吗,书画工作室网站模板网站建设,百度app制作网站,成都网站建设推目录 MPU机制与实现详解
Partition元素-MPU
Partition实现元素OSApplication
Partition元素-RTE MPU机制与实现详解
1、freedom from interference
此概念来自ISO26262-1#xff1a;多个元素之间没有可能导致违反安全目标的级联故障#xff0c;称之为免于干涉。 在左侧的…目录 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交互较多。这种交互不需要跨越partitionSafeWDG作为有安全等级的模块出现且由于其功能是监控软件运行一般作为软件中最高安全等级。
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 UintSMPU
SMPU主要存在于多核系统中用于对各个BUS设定内存访问权限。一般来讲SMPU由OS在启动时设定好在软件运行过程中不会被重新设置不会在软件中动态的更改BUS对内存的访问权限。
Core Memory Protection UintCMPU
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 ApplicationOS和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配置的常见思路。 从Safety方面高等级的软件模块可以访问其Memroy以及安全等级较低的软件模块Memory。 从工具方面MPU可以被配置为各个OS Application TASK ISR 分别独立具备访问范围工具并不会因为软件模块安全等级的高低而对OS RTE有区别配置而只是采用模块间的隔离策略。隔离机制不会生成在RTE中。 从系统角度整体软件至少需要一个Trusted部分以OS Application为单位划分并且Trusted部分是安全等级最高的模块可以访问其他模块的Memory。 总结使用MemMap机制将各个OS Application所占用Code Data资源进行良好整齐的存放基础上MICROSAR 的推荐MPU配置为: 设置软件中等级最高的软件模块为Trusted Os Application同时设置位privilege。并设置Memory Region允许该Application访问呢所有Memory段和外设。 其他每个安全等级模块各设定至少一个OS Applcaiton并设置为Non-Trusted针对其设定允许对整个Memory的读权限和模块代码的执行权限以及Stack的写权限共享数据区域的读或者读写权限。 关于Stack,不需要用户自己设定OS会占用一个Memory Region进行Stack设置因此需要留一个Memory Region给到OS。 共同使用Static MPU 和Dynamic MPU,配合OsAppMemoryProtectionIdentifier的作用尽量减少MPU在代码运行过程中的重新初始化这样可以降低OS contex切换的时间。 配置思路 3.1、MPC MPU硬件特性及配置
以MPC5744 单核为例介绍硬件资源如下 16个SMPU,24个CMPU,12个data 6个instruction 6个 shared 2个supervisor ,3种访问权限 6个可以选择的SMPU访问对象即6个master ID,分别对应MCU总线上的外设单元 在配置工具中查看硬件资源: 针对OS Application /TASK /ISR设定Memory Region依次设置其参数并关联到需要生效的OS Application TASK ISR。根据需要对SMPU进行配置如果所有MPU都没有使用SMPU,OS会在初始化时禁止 Gloabl SMPU Control BitSMPU将不会生效。同理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中的定义相应的OsApplicationCAN将会调用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 端口尽量不要出现悬空状态或链接不处理数据的状态