汽车ECU的虚拟化技术初探(四)--U2A内存管理

2024-01-14 18:36

本文主要是介绍汽车ECU的虚拟化技术初探(四)--U2A内存管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.内存管理概述

2. 内存保护功能

2.1 SPID

2.2 Slave Guard

3.小结


1.内存管理概述

为了讲清楚U2A 在各种运行模式、特权模式下的区别,其实首先应该搞清楚不同模式下可以操作的寄存器有哪些。

但是看到这个寄存器模型就头大。

再加上之前没有研究过G4MH的内核,所以这里暂且留个坑。

我们还是来看看继续往下看,先来看看内存管理。

U2A是没有MMU的,那么它是如何实现虚拟化所需要的MMU机制的呢?

MPU,大家见得多了,memory protection unit,用于防止未授信程序、突发异常事件等访问系统资源,来保证整个MCU的正常运行。

在U2A的虚拟化模式中,MPU还被细分成了三个块内容,如下:

  • Layered Memory Protection
  • Memory Protection Setting Bank Function
  • Memory Protection Setting High Speed Save and Return Function

2. 内存保护功能

我们这里先来看看功能安全,44章节功能安全 44.5 memory protection,了解常规模式下面memory protection的功能。 

  • Memory访问控制

        通过设置保护区域的上下边界进行访问控制

  • CPU运行模式的访问管理

        通过CPU中的几个状态位用于控制对资源的访问,并且根据每个程序的可靠性级别,将这些位组合使用以执行适当的保护

  • 通过SPID进行保护

        使用SPID (system protection identifier)来检查区域是否匹配。

根据芯片手册介绍,Memory Protection整体架构如下:

该内存保护架构由几部分组成:SPID模块、每个核里的MPU、外设的Slave Guard以及memory的Slave Guard。

  • MPU:所有CPU均通过MPU进行访问权限控制,它们不会发起访问MPU禁止的地址的相关请求;
  • Slave Guard:在总线层面上保护指定的memory或者外设,防止未授权访问;可以看到针对不同外设、memory有不同的guard。例如PE Guard(针对CPU内部RAM的保护)、CRG(针对Cluaster RAM保护)、针对外设的PG。
  • SPID:System Protection identifier,是一种软件任务的标识符,它分两种情况:一种主机内部自带SPID寄存器,可以直接配置,例如DMA、CPU(也叫PE,proces element);另一种是在SPID模块里配置。

2.1 SPID

我们首先来看SPID,有如下功能:

  • 每个总线主机的SPID可以软件灵活配置;
  • 一个SPID可以分配给一个主机或者多个主机
  • 通过SPIDMASK来限制主机的使用
  • SPID的配置可以上锁,冷复位或系统复位解锁,就和英飞凌SMU一样,配好了就锁住。

那么具体应该怎么使用呢?先看框图:

SPID寄存器用于配置bus master,比较分散的是,CPU、DTS/DMAC和MAU等主机的SPID寄存器配置是在自己模块内部配置,如Gb Ether等SPID值的配置就是在在SPID模块内部,如上图所示。

首先我们来看总共有多少个寄存器可以用于配置SPID。我们继续来看示例:

在默认情况下,每一个Bus Master的SPID值如下:

注意,最左侧这一列就相当于给主机分配一个ID值,这个与英飞凌TC3xx固定Master Tag ID还是有所区别。从上图我们可以看到,在U2A中作为master看待的外设、内核总计15个,总计32个寄存器可以配置ID值,默认状态下Reserved的是4-16、18、20、21、30共计17个寄存器,

但是可不可以把这些reserved分配给其他同一个主机呢,答案是肯定的,如下:

进一步,可不可以把一个SPID分配给多个外设呢,当然也是可以的,如下图:

上图中,RHSIF0\FlexRay\Ether均使用了24这个SPID,CPU2占据了FlexRay1 22这个SPID。

 那么要给Bus Master分配 SPID,需要按照如下步骤:

  1. 设置SPIDKCPROT寄存器使能SPID寄存器配置功能;
  2. 设置SPID掩码寄存器(BMnSPIDMSK)定义每个bus master可以定义的SPID值
  3. 设置SPID掩码锁存寄存器保证SPID掩码寄存器不被修改;
  4. 根据SPID掩码寄存器设置SPID寄存器的值;
  5. 设置SPIDKCPROT寄存器关闭SPID寄存器配置功能;
  6. 配置内存保护/保护设置,以防止由SPID和其他标识符识别的错误访问。

那么配置了SPID,是不是就可以保证访问限制。不然,还需要Slave Guard的配置。

2.2 Slave Guard

从系统架构图,我们可以看到不同种类的Guard Type。

  • PEG

PE Guard,用于每个PE(Process Element)控制Local RAM和INTC1是否可以被其他bus master访问

  • CRG

Cluster RAM Guard,用于 Inter-VM 通信或者Cluster RAM的访问

  • PG

Peripheral Guard,用于保护外设访问保护

那么需要slave guard属性配置如下:

优先级保护属性内容
HighSEC使能后,禁止non-secure主机访问
...DBG使能后,允许debug主机访问目标slave
UM该属性关闭后,user mode下所有主机都不能访问slave
SPID[m]使能后,与该slave定义的SPID相等的master SPID就可访问该slave
WG使能后,master就可以写目标slave
LowRG使能后,master就可以读目标slave

 具体每个Slave Guard我们后面再讲。

3.小结

可以看到,U2A的内存保护设计还是很灵活的,目前在用法上仅仅使用了MPU。

后续如果有用到SPID了,我再详细描述。

这篇关于汽车ECU的虚拟化技术初探(四)--U2A内存管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/606129

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

Linux之UDP和TCP报头管理方式

《Linux之UDP和TCP报头管理方式》文章系统讲解了传输层协议UDP与TCP的核心区别:UDP无连接、不可靠,适合实时传输(如视频),通过端口号标识应用;TCP有连接、可靠,通过确认应答、序号、窗... 目录一、关于端口号1.1 端口号的理解1.2 端口号范围的划分1.3 认识知名端口号1.4 一个进程

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底