• 01-SA8155 QNX 虚拟机Hypervisor


    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 dev/vmm

    终止(关闭):echo control 0  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

  • 相关阅读:
    SAP SD模块前台操作
    最新研究综述——探索基础模型中的“幻觉”现象
    Jmeter--简单的快捷键设置
    Qt 5.15集成Crypto++ 8.8.0(MSVC 2019)笔记
    前端进击笔记第二节 重识 HTML,掌握页面基本结构和加载过程
    client-go实战之八:更新资源时的冲突错误处理
    【附源码】Python计算机毕业设计天润律师事务所管理系统
    当 xxl-job 遇上 docker → 它晕了,我也乱了!
    京东获取商品历史价格信息 API接口
    python django病人跟踪治疗信息管理系统-项目源码Vue
  • 原文地址:https://blog.csdn.net/liaochaoyun/article/details/127427719