1. 概念

  • GVM: Guest Virtual Machine
  • QVM: hypervisor的一个process
  • PVM: Physical virtual machine
  • LA: Linux Android
  • LV: Linux Vehicle/Auto Grade Linux
  • VMM:Virtual machine manager
  • HAB:Hypervisor Abstract Communication driver

学习网址: QNX Hypervisor

2.背景

2.1 Hypervisor Type1 与 Type2

Type1(裸机型):Hypervisor直接运行在硬件上,操作系统在Hypervisor之上运行。

Type2(托管型):Hypervisor运行在Host OS操作系统上,其他操作系统均在Hypervisor上运行。

类似Windows 跑virtualbox,VMWare之类。

2.2  QNX Hypervisor

QNX Hypervisor 2.0 

 QNX 智能座舱Hypervisor

 依据Hyper分类特点,QNX 智能座舱Hypervisor属于Type1 L型 Hyervisor。

3.VMM (虚拟机管理器)

VMM负责任务如下:

  • 使用设备树中的配置启动qvm进程。
  • 监听qvm运行状况事件,并向在主机(HOST)上运行的相关客户端提供通知。
  • 当qvm、startupmgr或其他需要时,处理qvm的启动/重启/终止任务。
  • 监视qvm进程,以防发生崩溃,并采取适当的措施。
  • 根据运行状况事件/控制指令维护每个虚拟机的状态。
  • 每当虚拟机的状态发生变化时,就向已注册的客户端通知事件。 

常用用例:

  • 启动/重启/终止qvm进程。
  • 监视qvm进程的运行状况并将其发送给主机客户端。
  • 在qvm崩溃的情况下采取必要的措施。

各GVM通讯IP地址:

static char* vm_ip_address[] = {
    [1] = "192.168.1.1",    //host PVM  --- 主机
    [2] = "
192.168.1.3",    //LA GVM ---Android IVI
    [3] = "
192.168.1.2",    //LV GVM
    [4] = "
192.168.1.4",    //QNX GVM

}; 

3.1 目录框架:

资源管理路径及框架:

路径:qnx_ap/AMSS/platform/vm/resources/

.
├── Makefile
├── vclock_drv
│   ├── aarch64
│   │   ├── Makefile
│   │   └── so-le-qvmguest
│   ├── common.mk
│   ├── inc
│   │   └── clock_utils.h
│   ├── Makefile
│   └── src
│       └── vclock.c
├── vmm_drv
│   ├── aarch64
│   │   ├── Makefile
│   │   ├── o-le
│   │   └── o-le-g
│   ├── common.mk
│   ├── inc
│   │   ├── list.h
│   │   ├── vmm_drv.h
│   │   ├── vmm_fsm.h
│   │   └── vmm_log.h
│   ├── Makefile
│   ├── protected
│   │   └── vdev_events.h
│   └── src
│       ├── vmm_drv.c
│       └── vmm_fsm.c
└── vqcore
    ├── aarch64
    │   ├── Makefile
    │   └── o-le-qvmguest
    ├── arm
    │   ├── Makefile
    │   └── o-le-v7
    ├── common.mk
    ├── Makefile
    └── src
        └── vqcore_main.c 

3.2  生命周期管理器:

code: qnx_ap/AMSS/platform/services/applications/vmm_lifecycle/vmm_lifecycle.c

功能:

  • 启动/关闭 VM(qvm)
  • 事件监听/通知 

3.2.1 内部操作

交互接口: /dev/vmm

操作指令:

启动:echo control 1 <VM ID > dev/vmm

终止(关闭):echo control 0 <VM ID > dev/vmm

操作:

触发看门狗重启qvm 

3.2.2 外部操作 

不直接操作/dev/vmm 实现关闭,启动vm

发送信号关闭/终止QVM进程:

关闭/终止 qvm(GVM):slay -s SIGQUIT qvm

信号详解:

SIGQUIT : 程序终止(interrupt)信号,用于通知前台进程组终止进程。

触发看门狗重启qvm 

3.2.3 WatchDog()

如下图,qvm每隔10S喂狗一次。

4. Hypervisor扩展

TODO

4.1 virtio

VirtIO架构图:

TODO

4.1.1 virtio-input

TouchScreen

Keyboard

TODO

4.1.2 virtio_blk

TODO

4.1.3 virtio-spmi

TODO

4.2 HAB

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐