当前位置: 首页 > news >正文

Autosar-Os是怎么运行的?(内存保护)

写在前面:
入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!!


1.功能概述

以TC397芯片为例,英飞凌芯片集成了MPU模块, MPU模块采用了硬件机制,可实现用户指定的内存范围免受未经授权地数据读取、数据写入和指令访问;在配置MPU的过程,就是赋予一些对象对一些内存区域一定的数据和代码访问权限,当一些对象访问了一些未经授权的代码和数据时,就会产生MPU Trap。 

2.硬件实现 

对于MPU都有哪些元素?

2.1Protection Ranges

MPU保护的内存范围有两种,一个是数据,一个是指令,每个内存范围有低地址和高地址,从而实现特定范围。

以TC397芯片为例,TC397芯片有六个Core,每个Core有18个DataMemoryProtectionRanges,10个CodeProctectionRanges。

  • 每个CPU内核可设置的数据和代码的保护范围有多个,数量从4到32个不等,不同的系列芯片有所不同;
  • 数据内存保护范围的起始地址和结束地址是8字节对齐的,所以可以看到相应寄存器的低3位是Reserve的。
  • 指令内存保护范围的起始地址和结束地址是32字节对齐的,所以可以看到相应寄存器的低五位是Reserve的。
2.2Access Permission

MPU针对每个设定的内存范围,数据有读和写的权限设置,指令有执行的权限设置。

  • DPRE和DPWE的各位控制了对应的数据内存范围的读和写的权限,(DATA)
  • CPXE的各位控制了对应的指令内存范围的执行权限。(Code)
2.3Protection Sets
  • 每个CPU内核有保护集的概念,保护集的数量从1-8个不等,不同系列的芯片有所不同,TC397有6个;
  • 每个保护集都有DPRE/DPWE/CPXE这三个寄存器,可以实现特定的内存保护策略;
  • 保护集允许了不同保护策略的快速切换,当更换权限模式和用户任务时。
  • 可以视为一个任务集合,在Application配置界面可以选择当前Application执行哪个等级的ProtectionSet。实现不同保护策略的快速切换。
2.4PSW.PRS
  • 程序运行状态字寄存器PSW的位域PRS控制了此时有效的保护集;

2.5SYSCON.PROTEN
  • 系统配置寄存器SYSCON的PROTEN位用来使能当前核的内存保护功能。

3.功能实现

3.1Protection Sets

Protections Sets和Code/Data Protection Type在Davinci Configurator的SIP包中根据定制的芯片类型以及预定义好的,只要使用的在配置Protection Range的时候引用就行。

3.2MemoryRegions

相关配置在OS-MemoryProtection-MemoryRegions路径下

3.2.1CodeMemoryRegions

Code-MPU只能添加PSx_X权限。

3.2.2DataMemoryRegions

添加PSx_R权限(read读权限)。若尝试在该memory区写flash会触发MPU hook。

在当前界面配置内存保护区域的起始地址和结束地址,以及其他核通过MemoryRegionProtectionUnit以及哪种ProtectionSets访问当前空间的资源。

MemoryRegionProtectionUnit配置该Protection Range属于哪一个Core的Data/Code MPU Protection Ranges。

举个例子:如果这块区域想要实现只有Core1有Write权限,其他Core只有Read权限。那么6个核都需要分别创建一个DataMemoryRegions,对应MemoryRegionProtectionUnit依次选择0-6。

MemoryRegionAccessRights配置这块区域不同Protection Set的R/W权限。

3.3App Memory Protection identifier

在Application界面可以通过App Memory Protection identifier配置当前Application执行的规则。

举个例子,我在DataMemoryRegions中MemoryRegionAccessRights配置了PS2_R,由于上图中Application配置App Memory Protection identifier = 2,那么当程序运行时,MPU会判断该Application是否执行W的操作,如果是,会触发MPU Hook。

3.4Scalability Class

Os-OS配置项中的Scalability Class选择SC3。

Autosar OS可分为四个等级:SC1~SC4)(SC: Scalability Class,可伸缩的类型 )。各等级支持的功能如下:

http://www.lryc.cn/news/529176.html

相关文章:

  • 题单:冒泡排序1
  • 多目标优化策略之一:非支配排序
  • Go学习:字符、字符串需注意的点
  • Linux文件原生操作
  • 解决Oracle SQL语句性能问题(10.5)——常用Hint及语法(7)(其他Hint)
  • JavaScript系列(50)--编译器实现详解
  • 大数据相关职位 职业进阶路径
  • 基础项目实战——学生管理系统(c++)
  • C++,STL,【目录篇】
  • 【Rust自学】15.3. Deref trait Pt.2:隐式解引用转化与可变性
  • 密码强度验证代码解析:C语言实现与细节剖析
  • arkts bridge使用示例
  • LINUX部署微服务项目步骤
  • zsh安装插件
  • 网站如何正式上线(运维详解)
  • SQL server 数据库使用整理
  • 【Rust自学】17.2. 使用trait对象来存储不同值的类型
  • 初始化mysql报错cannot open shared object file: No such file or directory
  • 2025年1月22日(网络编程)
  • Jason配置环境变量
  • 蓝桥杯python语言基础(7)——自定义排序和二分查找
  • (开源)基于Django+Yolov8+Tensorflow的智能鸟类识别平台
  • 后盾人JS--闭包明明白白
  • redis的分片集群模式
  • Kiwi 安卓浏览器本月停止维护,扩展功能迁移至 Edge Canary
  • 我的AI工具箱Tauri+Django内容生产介绍和使用
  • 四.4 Redis 五大数据类型/结构的详细说明/详细使用( zset 有序集合数据类型详解和使用)
  • Java---猜数字游戏
  • 网站快速收录:利用RSS订阅提升效率
  • vue3第三部分--组件通信