汽车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了,我再详细描述。

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

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

相关文章

文件操作(二)

͟͟͞͞🏀前言上一篇我们加们讲了什么是文件,为什么使用文件,以及流的概念。我们继续接上一篇来继续讲解我们的文件操作,这一篇将会详细的讲如何对文件进行读写。 目录 🚀一.文件的顺序读写 1.fgetc和fputc 2.fget…

【OJ】环形链表

目录 1. 环形链表||(142)1.1 题目描述1.2 题目分析1.3 代码 2. 环形链表(141)2.1 题目描述2.2 题目分析2.3 代码 1. 环形链表||(142) 1.1 题目描述 1.2 题目分析 带环链表:尾节点的next指向链…

Python异步网络编程库之twisted 详解

概要 Python twisted 是一个强大的异步网络编程框架,它允许开发者轻松构建高性能的网络应用和协议。无论是构建网络服务器、客户端、聊天应用还是实时通信工具,twisted 都提供了丰富的工具和组件。本文将深入探讨 twisted 的基本概念、安装方法以及详细…

sql | 学生参加各科考试次数

学生表: Students------------------------ | Column Name | Type | ------------------------ | student_id | int | | student_name | varchar | ------------------------ 在 SQL 中,主键为 student_id(学生ID)。 该表内的每…

多机TCP通讯之hello world(C++)

文章目录 TCP是什么准备工作CMakeLists.txt服务端代码客户端代码参考 TCP是什么 TCP(传输控制协议)是一种在计算机网络中广泛使用的协议,它提供了可靠的、面向连接的数据传输服务。TCP 是 OSI 模型中的传输层协议,它确保了数据的…

[NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< ​全文 6000 字 内容摘要 NAND Flash 引脚功能 读操作步骤 NAND Flash中的特殊硬件结构 NAND Flash 读写时的数据流向 Read 操作时序 读时序操作过…

第 11 章 树结构实际应用

文章目录 11.1 堆排序11.1.1 堆排序基本介绍11.1.2 堆排序基本思想11.1.3 堆排序步骤图解说明11.1.4 堆排序代码实现 11.2 赫夫曼树11.2.1 基本介绍11.2.2 赫夫曼树几个重要概念和举例说明11.2.3 赫夫曼树创建思路图解11.2.4 赫夫曼树的代码实现 11.3 赫夫曼编码11.3.1 基本介绍…

【NI国产替代】USB‑7846 Kintex-7 160T FPGA,500 kS/s多功能可重配置I/O设备

Kintex-7 160T FPGA&#xff0c;500 kS/s多功能可重配置I/O设备 USB‑7846具有用户可编程FPGA&#xff0c;可用于高性能板载处理和对I/O信号进行直接控制&#xff0c;以确保系统定时和同步的完全灵活性。 您可以使用LabVIEW FPGA模块自定义这些设备&#xff0c;开发需要精确定时…

【GitHub项目推荐--13 个 Python 学习资源】【转载】

近些年&#xff0c;人工智能应用铺天盖地。人脸识别、老照片复活、换脸等应用都得益于人工智能算法。 许多人工智能算法封装的框架基于 Python 语言&#xff0c;这也导致了 Python 的热度只增不减。 Python 简单易学&#xff0c;根据 2020 年 StackOverflow 开发者调查报告显…

智能路由器中的 dns.he.net可使用自定义域名的免费 DDNS 服务配置方法

今天介绍的这个是可以使用自定义域名同时支持使用二级域名的免费DDNS服务 dns.he.net的动态DDNS服务的配置方法, 这个服务相对还是比较稳定的, 其配置也和其他的DDNS服务有些不太一样, 首先他的主机名: 这里需要设置为登录后分配的区域域名: ipv6.he.net 然后就是 DDNS 用户…

让一个元素水平居中的方式有哪些

今天总结一下我所遇到过的 让一个元素水平居中的方式 <!--* Author: HuKang* Date: 2023-09-19 11:07:44* LastEditTime: 2023-12-22 22:52:38* LastEditors: HuKang* Description: * FilePath: \route-planning\tempDemo.html --> <!DOCTYPE html> <html>…

案例:新闻数据加载

文章目录 介绍相关概念相关权限约束与限制完整示例 代码结构解读构建主界面数据请求下拉刷新总结 介绍 本篇Codelab是基于ArkTS的声明式开发范式实现的样例&#xff0c;主要介绍了数据请求和touch事件的使用。包含以下功能&#xff1a; 数据请求。列表下拉刷新。列表上拉加载…

Express 应用生成器(脚手架)的安装与使用

1、简介 自动生成一个express搭建的项目结构 官网&#xff1a;Express 应用生成器 2&#xff0c;使用 2.1全局安装&#xff0c;使用管理员打开命令窗口 2.2、安装express # 全局安装express npm install -g express # 全局安装express脚手架 npm install -g express-gene…

Socket编程-IO模型

1、首先IO模型的内容。 感觉可以简单理解为&#xff1a;我们写代码时&#xff0c;在基础的 IO 操作上做了一些其他的策略&#xff0c;根据策略的不同&#xff0c;一般有阻塞IO和非阻塞IO 1、阻塞IO 就是在操作的时候&#xff0c;比如网络通信中&#xff0c;某一线程使用下面这…

最大公约数和最小公倍数

1. 最大公约数 给定两个整数&#xff0c;求这两个数的最大公约数 暴力求解&#xff1a; 从较小的那个数开始&#xff0c;依次递减&#xff0c;直到某个数能够同时被整除 //暴力求解 int main() {int a 0;int b 0;scanf("%d %d", &a, &b);int i 0;int min …

代码随想录 Leetcode142. 环形链表 II

题目&#xff1a; 代码(首刷看解析 2024年1月13日&#xff09;&#xff1a; class Solution { public:ListNode *detectCycle(ListNode *head) {if (head nullptr) return nullptr;ListNode* fast head;ListNode* slow head;while (true) {if(fast->next nullptr || fa…

git-生成证书、公钥、私钥、error setting certificate verify locations解决方法

解决方法 方法1-配置证书、公钥、私钥打开Git Bash设置名称和邮箱执行&#xff0c;~/.ssh执行&#xff0c;ssh-keygen -t rsa -C "这是你的邮箱"&#xff0c;如图&#xff1a;进入文件夹可以看到用记事本之类的软件打开id_rsa.pub文件&#xff0c;并且复制全部内容。…

社区团购配送超市与小程序的共赢之路

对于社区服务来说&#xff0c;搭建一个小程序可以提供更加便捷、高效的服务&#xff0c;提升用户体验。下面我们将详细介绍如何通过乔拓云第三方平台搭建一个社区团购小程序。 首先&#xff0c;你需要打开乔拓云第三方平台&#xff0c;这是一个专门为小程序开发提供的平台。在浏…

哪些代码是 Code Review 中的大忌?—— 以 Python 为例

Code Review 首要达成的结果是更好的可读性。 在此基础上才是进一步发现项目的 Bug、处理性能优化上的问题。 因为&#xff0c;编码是给人看的&#xff0c;不是给计算机&#xff08;Coding for human, NOT computer&#xff09;。 一. 滥用缩写命名 Overusing abbreviation …

【LV12 DAY17-18 中断处理】

GPX1_1是外部中断9 EINT9 查询可知其中断ID是57 所以需要进行人为修正lr的地址 sub lr&#xff0c;lr&#xff0c;#4 //iqr异常处理程序 irq_handler: //IRQ异常后LR保存的地址是被IRQ打断指令的下一条再下一条指令的地址&#xff0c;所以我们需要人为进行修正一下sub LR,L…