bosch对车载系统的划分,通常分为5大域:动力域,底盘域,车身域,智能座舱域和adas自动驾驶域。随着ECU集成中央化的发展趋势,大众,华为等巨头将动力域,底盘域和车身域合并为整车控制域,划分为3大域。下图是某车企的2域架构图,省去了整车控制域。本篇主要涉及智能座舱域的hypervisior,qnx,android系统之间是什么关系。
两域划分的汽车架构图
一 虚拟化简介
资源隔离技术有多种,从硬件底层逐层向上包括硬件隔离、虚拟化隔离、容器隔离、进程隔离等。硬件隔离域的性能、安全可靠性最好,但灵活性、可配置性差,不能实现硬件共享,导致整个系统的资源利用率差,不能充分达到软件定义汽车的目标。
容器隔离、进程隔离可以更轻量级地实现业务隔离,但还是在同一个操作系统内,存在着资源干扰、相互安全攻击的隐患,并且无法支持异构操作系统业务域融合,影响传统业务继承,不利于生态发展。
虚拟化是安全可靠、弹性灵活的优选方案,是软件定义汽车的重要支撑技术。本篇主要涉及hypervisior裸机虚拟化技术,hypervisior直接在soc上运行,之间没有宿主操作系统Host OS中转。如下图Type1所示:
在汽车领域,Hypervisior 主要完成以下任务:
-
CPU 虚拟化:为虚拟机提供 VCPU 资源和运行环境;
-
内存虚拟化:负责为其自身和虚拟机分配和管理硬件内存资源;
-
中断虚拟化:发生中断和异常时,按需将中断和异常路由到虚拟机进行处理;
-
虚拟机设备模拟:根据需求创建虚拟机可以访问的虚拟硬件组件;
-
硬件支持 BSP:提供 Hypervisor 在 SoC 上运行的板级支持包,如串口驱动;
-
虚拟机资源配置:对虚拟机的 CPU,内存,IO 外设等资源进行配置和管理;
-
虚拟机通信:为虚拟机提供 IPC,共享内存等通信机制。
-
虚拟机调度:为虚拟机提供优先级和时间片等调度算法;
-
虚拟机生命周期管理:创建,启动和停止虚拟机;
-
虚拟机调测服务:提供控制台,日志等调试功能;
二 半虚拟化
在硬件辅助虚拟化技术不完善、不强大的发展阶段,或者对于某些复杂外设的共享复用,为避免全虚拟化的性能问题,可以采用 GuestOS 与 Hypervisor 协作的半虚拟化技术。这种技术一般应用于 IO 设备虚拟化,采用前后端的方式来实现 IO 设备虚拟化,在 Guest OS(VM2标示android系统) 中实现前端驱动,在 Hypervisor 或 Host OS(VM1标示qnx系统) 中实现后端驱动,前后端一般按照 VirtIO 标准来实现,后端驱动作为硬件的实际访问方。Guest OS 中前端驱动通过 Virt Queue 等通信机制与后端驱动进行通信,android侧前端驱动将 Guest OS 的请求传递给qnx侧后端驱动,后端驱动将请求发送给硬件驱动,处理完后将结果再传回给前端驱动。半虚拟化相对全虚拟化实现的硬件性能较好,且可实现相对比较复杂的硬件,比如 : 块设备,网卡,显示设备等,如下图所示:
半虚拟化Pass-through资源分配
Hypervisor 支持将硬件资源直接分配给其上虚拟机中 Guest OS 使用,无需通过 Hypervisor 进行地址和指令翻译。例如 : 串口资源、USB 资源等接口比较丰富的资源可以通过 Pass-through 直接分配给某虚拟机使用。设备控制器一般都是以 MMIO 方式来访问的,所以只需要将控制器地址区域映射到 VM 就可实现设备控制器的分配,同时还需要分配一个设备硬件中断对应的虚拟中断到该 VM,直接透传的方式就是 VM 独占访问该硬件,所以在性能上是最好的。
三 qnx hypervisior
此图由高通官网提供,虚拟机管理程序hypervisior包括一个虚拟机管理程序微内核和一个或多个 qvm 进程实例。在 QNX 虚拟机管理程序环境中,虚拟机体现为qvm进程。qvm 进程是在内核外部的Hypervisor中运行的操作系统进程。
需要注意的是:
1 Guest OS实际上并不在 VM 中运行。虚拟机管理程序不会转换Guest 在物理CPU 的指令。VM 将定义的虚拟硬件和直通硬件呈现给Guest OS,当Guest 在物理 CPU 上执行指令是,就像没有虚拟机管理程序一样。只有Guest执行不被允许的指令,或访问被Hypervisor监控的客户机内存和虚拟化硬件是,Hypervisor才会捕获异常并强制Guest退出。个人理解:hypervisior类似于一个监控的角色。