01-SA8155 QNX 虚拟机Hypervisor
Hypervisor运行在Host OS操作系统上,其他操作系统均在Hypervisor上运行。:Hypervisor直接运行在硬件上,操作系统在Hypervisor之上运行。终止(关闭):echo control 0dev/vmm。路径:qnx_ap/AMSS/platform/vm/resources/关闭/终止 qvm(GVM):slay -s SIGQUIT qvm。",//host PV
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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)