1. VirtIO与VirtualDevice概念
1.1 VirtIO
virtio 是一种 I/O 半虚拟化解决方案,是一套通用 I/O 设备虚拟化的程序,是对半虚拟化Hypervisor 中的一组通用 I/O 设备的抽象。提供了一套上层应用与各 Hypervisor 虚拟化设备(KVM,Xen,VMware等)之间的通信框架和编程接口,减少跨平台所带来的兼容性问题,大大提高驱动程序开发效率。
在完全虚拟化的解决方案中,guest VM 要使用底层 host 资源,需要 Hypervisor 来截获所有的请求指令,然后模拟出这些指令的行为,这样势必会带来很多性能上的开销。半虚拟化通过底层硬件辅助的方式,将部分没必要虚拟化的指令通过硬件来完成,Hypervisor 只负责完成部分指令的虚拟化,要做到这点,需要 guest 来配合,guest 完成不同设备的前端驱动程序,Hypervisor 配合 guest 完成相应的后端驱动程序,这样两者之间通过某种交互机制就可以实现高效的虚拟化过程。

图:ACRN Kernel Land Virtio Framework
参考:
virtio 简介 - bakari - 博客园 (cnblogs.com)
1.2 Qnx Virtual Device

上图,QNX 虚拟机管理程序 2.0 概述,介绍虚拟机以及Guest访问虚拟或者物理设备的一些方式。
虚拟设备可以模拟物理设备,也可以是半虚拟化设备(不存在完全对应的物理设备的虚拟设备)。虚拟设备(vdev)仅存在于虚拟化环境中。它们是在虚拟机管理程序层运行的软件代码,可以模拟物理设备,也可以提供物理设备提供的功能,而无需模拟任何特定的物理设备。若要使用 vdev,Guest OS需要驱动程序,就像需要驱动程序在非虚拟化环境中使用物理设备一样。
VM(虚拟机) 定义虚拟硬件(Virtual devices),并将其和直通硬件(Pass-through devices)呈现给Guest OS,Guest OS不需要知道它是在VM 中运行还是在硬件直接定义的环境中运行。
2. QNX Vdev-VirtIO
代码路径:qnx_ap/AMSS/platform/vm/vdev
目录结构:
.├── Makefile
├── vdev-glink-ssr
│ ├── aarch64
│ ├── common.mk
│ ├── Makefile
│ ├── pinfo.mk
│ ├── protected
│ ├── vdev.c
│ └── vdev.use
├── vdev-io
│ ├── 8155
│ ├── common.mk
│ ├── inc
│ ├── main.c
│ ├── Makefile
│ └── protected
├── vdev-minidump
│ ├── aarch64
│ ├── common.mk
│ ├── Makefile
│ ├── vdev-minidump.c
│ └── vdev-minidump.use
├── vdev-mmu-s2
│

本文深入探讨了VirtIO作为I/O半虚拟化解决方案的角色,以及在QNX系统中的虚拟设备(Vdev)概念。QNX的虚拟设备可以模拟或半虚拟化物理设备,允许GuestOS像使用真实设备一样使用它们。特别地,VirtIO-i2c在QNX和Android中的实现被详细解析,解释了如何通过VirtIO框架实现主机和GuestOS之间的I2C通信。文章还提供了配置和使用VirtIO-i2c进行实际设备操作的步骤,并强调了GuestOS无需关心设备是否虚拟化的事实。
最低0.47元/天 解锁文章
9480





