汽车ECU的虚拟化技术初探(一)

目录

1.为什么要提汽车ECU的虚拟化?

2.虚拟化技术分类

2.1 硬件虚拟化

2.2 操作系统虚拟化


问题引入:

  1. Hypervisor是如何来管理和隔离硬件资源,保证各个不同功能的应用程序的资源使用安全和资源调度?
  2. 没有MMU就做不了虚拟化?

1.为什么要提汽车ECU的虚拟化?

        要讲汽车ECU的虚拟化,首先要从汽车电子电气架构的演进roadmap开始说起。汽车行业领头羊博世将整车电子电气架构定义成了六个主要发展阶段,如下:

  • 模块化阶段:汽车上每个 ECU 负责特定的功能,比如车灯控制器,制动控制器等,这些控制器像叶子一样挂在CAN总线上,随着汽车功能增多这种架构日益复杂,无法持续。
  • 集成化阶段,单个 ECU 负责多个功能,ECU 数量较上一阶段减少。在这两个阶段,汽车电子电气架构仍处于分布式阶段,ECU 功能集成度较低。  
  • 集中化阶段,即现在比较主流的功能域控阶段。功能域即根据功能划分的域控制器,最常见的是如博世划分的五个功能域(动力域、底盘域、车身域、 座舱域、自动驾驶域)。域控制器间通过以太网和 CANFD(CAN with Flexible Data-Rate)相连,其中座舱域和自动驾 驶域由于要处理大量数据,算力需求逐步增长。动力总成域、底盘域、车身域主要涉及控制指令计算及通讯资源,算力要求较低。
  • 域融合阶段。在功能域基础上,为进一步降低成本和增强协同,出现了跨域融合,即将多个域融合到一起,由跨域控制单元进行控制。比如将动力域、底盘域、车身域合并为整车控制域,从而将五个功能域(自动驾驶域、动力域、 底盘域、座舱域、车身域)过渡到三个功能域(自动驾驶域、智能座舱域、车控域)。
  • 车载电脑阶段,随着功能域的深度融合,功能域逐步升级为更加通用的计算平台,从功能域跨入位置域(如特斯拉的前域、左域、右域)。区域控制器平台(Zonal Control Unit,ZCU)是整车计算系统中某个局部的感知、数据处理、控制与执行单元。它负责连接车上某一个区域内的传感器、执行器以及 ECU等,并负责该位置域内的传感器数据的初步计算和处理,还负责本区域内的网络协议转换。
  • 车云阶段,将汽车部分功能转移至云端,车内架构进一步简化。车的各种传感器和执行器可被软件定义和控制, 汽车的零部件逐步变成标准件,彻底实现软件定义汽车功能。

       可以看到,随着电子电气架构的更新,整车所需的ECU数量更少,但每个ECU功能更加丰富,例如将制动、转向、动力控制的功能全部集中到一个ECU。这种功能的集中对控制器所采用芯片的资源保护提出了巨大的挑战。      

       因此,借鉴座舱域控将QNX、Android集中到一块SOC的经验,在MCU上实现虚拟化技术,将不同功能安全等级的系统部署到同一个硬件平台上。如下图:

2.虚拟化技术分类

        虚拟化技术按照虚拟化层次通常可以分为硬件虚拟化和操作系统虚拟化两类。

2.1 硬件虚拟化

        进一步的,硬件虚拟化可细分为 Type1 和 Type2 两类;

  • Type1类型的虚拟化

        虚拟化管理程序直接运行在裸硬件上,因此也叫作裸机虚拟化;如下图,Hypervisor一般是一个嵌入在Host OS内核里面的一部分,能够直接操作控制硬件并管理多个虚拟机(Guest VM)。每个虚拟机都有自己的操作系统和应用程序(下图的APP+Guest OS),可以完全独立运行。 

  • Tpye2类型的虚拟化。

        与Type1类型的虚拟机不一样,Type2类型虚拟化是指在已经装载好OS的的硬件上运行一个Hypervisor软件,这个软件作为应用程序管理多个Guest VM。

        可以看到,Type 1 和 Type2的虚拟化最大区别在于Type 1的Hypervisor可以直接操作硬件,没有多余的开销,性能相对比较高;Type2的Hyperviosr访问硬件资源,还必须经过Host OS。可以看到座舱域仪表和中控使用的就是Type1类型的虚拟化技术。

        因此在汽车领域,由于对功能安全等级、实时性有较高要求,一般均使用 Type1的Hypervisor,Hypervisor 之上直接运行多个客户操作系统 (GuestOS);那么这里就出现了今天的首个问题,Hypervisor是如何来管理和隔离硬件资源,保证各个不同功能的应用程序的资源使用安全和资源调度?这个我们稍后再谈。

2.2 操作系统虚拟化

        操作系统虚拟化一般就是指容器技术,由操作系统内核提供的资源隔离和控制功能,创建出多个相互隔离但共享系统内核的用户空间实例,从而实现对多系统运行能力的支持。

       进一步讲,容器技术就是将操作系统所管理的计算机资源,包括进程、文件、设备、网络等分组,然后交给不同的容器使用。容器中运行的进程只能看到分配给该容器的资源。从而达到隔离与虚拟化的目的。 实现容器技术需要用到Namespace及cgroups技术。

        典型代表就是Docker公司在2013推出的轻量级虚拟化技术--Docker。结构如下图:

        在这种虚拟化机制下,操作系统内核被每个容器共享,每个容器使用相同的OS,由OS来分配资源,不过正是因为这种多个App共享内核的机制,可能存在漏洞或攻击风险。因此目前容器化场景在汽车中还没看到实际应用。

2.3 硬件虚拟化的资源安全

        回到我们的问题一,Hypervisor是如何来管理和隔离硬件资源,保证各个不同功能的应用程序的资源使用安全和资源调度

        以常见的Type 1 的Hypervisor安全架构为例,资源安全需要从vCPU调度隔离、内存隔离、存储隔离以及网络隔离四个方面来保证安全,如下图:

         在vCPU的调度中,常见的ARM-v8架构提供了EL0-EL3的等级,每个等级可运行的指令不一样,通常EL0运行APP,EL1运行Guest OS,EL2运行Hypervisor(负责vCPU的上下文切换),实现Guest OS和Hypervisor的隔离;

        在内存隔离中,一般要用到我经常谈到但是没有深入研究的MMU--内存管理单元。MMU主要是包含以下几个功能:

  • 虚拟地址和物理地址的翻译
  • 访问权限控制
  • 对硬件资源物理内存进行管理

         GuestOS 虚拟地址到物理地址的映射由 Hypervisor 来实现,Hypervisor 可以使GuestOS的虚拟地址映射到不同的物理内存段上,保证了 GuestOS 间的内存隔离。如下:

        这就引出第二个问题:没有MMU的芯片是不是就不能做虚拟化了呢?答案是否定的,请看下一篇文章,汽车ECU的虚拟化技术初探(二)。 

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

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

相关文章

扭矩传感器信号模拟地、数据地与电源地

在电子电路中,电源地、信号地、数字地和模拟地都是不同的地(ground)节点,它们在电路中有不同的作用。 电源地(Power Ground)是指用于连接电源电源回路的地节点。在大多数电子设备中,电源地通常是…

Git Commit 之道:规范化 Commit Message 写作指南

1 commit message 规范 commit message格式都包括三部分&#xff1a;Header&#xff0c;Body和Footer <type>(<scope>): <subject><body><footer>Header是必需的&#xff0c;Body和Footer则可以省略 1.1 Header Type&#xff08;必需&#xf…

高级项目管理总结

目录 一、背景介绍二、思路&方案三、过程1.升维思考2.结构化3.心理、知识阶段检验4.微观 四、总结 一、背景介绍 天性对学习对考试充满敌意的我&#xff0c;转变为依赖学习谋生&#xff0c;再到后来书中自有黄金屋&#xff0c;到现在学习对我而言就如同一日三餐&#xff1…

Three.js——基于原生WebGL封装运行的三维引擎

文章目录 前言一、什么是WebGL&#xff1f;二、Three.js 特性 前言 Three.js中文官网 Three.js是基于原生WebGL封装运行的三维引擎&#xff0c;在所有WebGL引擎中&#xff0c;Three.js是国内文资料最多、使用最广泛的三维引擎。既然Threejs是一款WebGL三维引擎&#xff0c;那么…

【操作系统】考研真题攻克与重点知识点剖析 - 第 3 篇:内存管理

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…

JPA Buddy快速创建update、find、count、delete、exists方法

JPA Buddy快速创建update、find、count、delete、exists方法&#xff0c;JPA默认提供的CrudRepository\JpaRepository提供的方法比较少&#xff0c;一般我们会手写一些方法&#xff0c;这里我们选择通过JPA Buddy快速生成&#xff0c;之前文章中讲到了JPA Buddy原本是IDEA收费插…

Spark Job优化

1 Map端优化 1.1 Map端聚合 map-side预聚合&#xff0c;就是在每个节点本地对相同的key进行一次聚合操作&#xff0c;类似于MapReduce中的本地combiner。map-side预聚合之后&#xff0c;每个节点本地就只会有一条相同的key&#xff0c;因为多条相同的key都被聚合起来了。其他节…

前端面试题 计算机网络

文章目录 ios 7层协议tcp协议和udp协议的区别tcp协议如何确保数据的可靠http和tcp的关系url输入地址到呈现网页有哪些步骤post和get本质区别&#xff0c;什么时候会触发二次预检GET请求&#xff1a;POST请求&#xff1a;触发二次预检&#xff08;CORS中的预检请求&#xff09;&…

SolidWorks绘制花瓶教程

这个花瓶是我学习solidworks画图以来用时最长的一个图形了&#xff0c;特此记录一下&#xff0c;用了我足足两个早晨才把他给画出来&#xff0c;我这是跟着哔站里的隔壁老王学习的&#xff0c;下面是视频地址&#xff1a;点击我一下看视频教程 下面是我的绘图过程&#xff0c;…

美国材料与试验协会ASTM发布新版玩具安全标准 ASTM F963-23

美国材料与试验协会ASTM发布新版玩具安全标准 ASTM F963-23 2023年10月13日&#xff0c;美国材料与试验协会&#xff08;ASTM&#xff09;发布了新版玩具安全标准ASTM F963-23 ​根据CPSIA的规定&#xff0c;当ASTM将ASTM F963的拟定修订意见通知CPSC时&#xff0c;若CPSC认为…

如何配置Apple推送证书 push证书

转载&#xff1a;如何配置Apple推送证书 push证书 想要制作push证书&#xff0c;就需要使用快捷工具appuploader工具制 作证书&#xff0c;然后使用Apple的推送功能配置push证书&#xff0c;就可以得到了。PS&#xff1a;push没有描述文件&#xff0c;所以不 要问推送选择哪…

【c++随笔12】继承

【c随笔12】继承 一、继承1、继承的概念2、3种继承方式3、父类和子类对象赋值转换4、继承中的作用域——隐藏5、继承与友元6、继承与静态成员 二、继承和子类默认成员函数1、子类构造函数 二、子类拷贝构造函数3、子类的赋值重载4、子类析构函数 三、单继承、多继承、菱形继承1…

视觉大模型DINOv2:自我监督学习的新领域

1 DINOv2 1.1 DINOv2特点 前段时间&#xff0c;Meta AI 高调发布了 Segment Anything&#xff08;SAM&#xff09;&#xff0c;SAM 以交互式方式快速生成 Mask&#xff0c;并可以对从未训练过的图片进行精准分割&#xff0c;可以根据文字提示或使用者点击进而圈出图像中的特定…

Flink SQL 表值聚合函数(Table Aggregate Function)详解

使用场景&#xff1a; 表值聚合函数即 UDTAF&#xff0c;这个函数⽬前只能在 Table API 中使⽤&#xff0c;不能在 SQL API 中使⽤。 函数功能&#xff1a; 在 SQL 表达式中&#xff0c;如果想对数据先分组再进⾏聚合取值&#xff1a; select max(xxx) from source_table gr…

第24章_mysql性能分析工具的使用

文章目录 1. 数据库服务器的优化步骤2.查看系统性能参数3. 统计SQL的查询成本&#xff1a;last_query_cost4. 定位执行慢的 SQL&#xff1a;慢查询日志4.1 开启慢查询日志参数4.2 查看慢查询数目4.3 测试慢sql语句&#xff0c;查看慢日志4.4 系统变量 log_output&#xff0c; l…

用excel计算一个矩阵的转置矩阵

假设我们的原矩阵是一个3*3的矩阵&#xff1a; 125346789 现在求它的转置矩阵&#xff1a; 鼠标点到一个空白的地方&#xff0c;用来存放结果&#xff1a; 插入-》函数&#xff1a; 选择TRANSPOSE&#xff0c;这个就是求转置矩阵的函数&#xff1a; 点击“继续”&#xff1a…

Windows查看端口占用情况

Windows如何查看端口占用情况 方法1. cmd命令行执行netstat命令&#xff0c;查看端口占用情况 netstat -ano 以上命令输出太多信息&#xff0c;不方便查看&#xff0c;通过如下命令搜索具体端口占用情况&#xff0c;例如&#xff1a;8080端口 netstat -ano | findstr "…

初阶JavaEE(17)Linux 基本使用和 web 程序部署

接上次博客&#xff1a;初阶JavaEE&#xff08;16&#xff09;博客系统&#xff08;Markdown编辑器介绍、博客系统功能、博客系统编写&#xff1a;博客列表页 、博客详情页、实现登录、实现强制登录、显示用户信息、退出登录、发布博客&#xff09;-CSDN博客 目录 Linux 基本…

std::any

一、简介 std::any 可以储存任何可拷贝构造和可销毁的类型的对象。 struct test {test(int a,int b){} };int main(int argc, char *argv[]) {std::any a 1;qDebug() << a.type().name();a 3.14;qDebug() << a.type().name();a true;qDebug() << a.type…

从0到0.01入门React | 010.精选 React 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…