# QNX-Hypervisor-vdev-虚拟化设备详解.md
> 平台:高通 SA8775P 车载域控
> 架构:QNX Hypervisor(EL2)+ QNX Host + qvm 用户态VMM + Android Guest
> 说明:本文基于对话内容完整梳理,以 vdev 虚拟设备框架为主线;包含 vdev 机制、vgic 虚拟中断底座、virtio-net 桥接网络、链路框图、业务场景、时序、工程踩坑;兼顾大白话通俗解释与专业技术描述
## 目录
1. 文档概述
2. QVM vdev 核心概念(大白话拆解)
3. 通用虚拟化链路模型(硬件 → QNX Host → qvm vdev → Guest)
4. vgic vdev:虚拟化中断底座
5. virtio-net vdev:虚拟网卡(Android eth0 / vnet0)Bridge 桥接方案
6. 汇总总图(中断链路 + virtio-net 桥接链路)
7. virtio-net eth0 / vnet0 业务应用场景(SA8775P 车载)
8. virtio-net 收发数据流 + 中断联动时序
9. 网络模式对比:Bridge / Host-Only / NAT
10. 术语对照表
11. 工程备注 & 车载项目踩坑点
---
## 1. 文档概述
SA8775P 车载方案采用 QNX Hypervisor 虚拟化架构:
- QNX 作为 Host(宿主系统)运行在 EL2;
- `qvm` 是 QNX 用户态虚拟机管理器 VMM,对标 QEMU;
- qvm 内部依靠 **vdev(virtual device)虚拟设备框架** 模拟所有暴露给 Guest 的外设;
- Android 作为 Guest,只能看到 qvm vdev 模拟出来的虚拟硬件,无法直接访问物理硬件;
- 本文重点两个核心 vdev:
- `vgic vdev`:虚拟 GICv3,整套虚拟化的中断底座;
- `virtio-net vdev`:virtio 网卡后端 BE,Guest 侧 virtio-net FE 驱动识别为 `eth0 / vnet0`;
- 当前项目网络部署模式:**Bridge 桥接(二层直通)**。
主线链路:
> Host 物理 GIC → QNX Host → qvm 进程(virtio BE + vgic vdev)→ Android Guest(GICv3 驱动 + FE virtio 驱动)
---
## 2. QVM vdev 核心概念(大白话拆解)
`vdev = virtual device`,是 qvm 内部统一的虚拟设备开发框架。
> 大白话理解:
> Android Guest 看不到真实板上硬件。Android 识别到的所有虚拟外设,全部是 qvm 进程内部创建、注册、模拟出来的一个个 vdev 实例。
> 每一类外设,对应一个独立 vdev 模块:vgic vdev、virtio-net vdev、virtio-blk vdev、virtio-console vdev 等。
关键特性:
1. vdev **运行在 qvm 用户态进程上下文**,不是 QNX 内核驱动;
2. qvm 启动时读取配置脚本,按需实例化多个 vdev;
3. vdev 对外向 Guest 暴露 MMIO 寄存器、虚拟中断资源;
4. vdev 负责和 QNX Host / 底层真实硬件交互;Guest 只能和 vdev 交互;
5. 依赖关系:所有需要通知 Guest 的 virtio vdev,都要调用 `vgic vdev` 的接口,向 vCPU 注入虚拟中断;
> ? vgic vdev 是所有带中断的 vdev 的公共中断底座。
一句话总结:
> vdev 就是 qvm 里面的一批硬件模拟器;每个模拟器伪装一个外设给 Android;vgic vdev 专门统一处理虚拟中断注入。
```mermaid
flowchart TD
H[物理硬件<br/>GICv3 / ETH PHY / 存储 / I2C / GPIO] --> QNX[QNX Host 内核 + io-pkt 网络栈]
QNX --> QVM[qvm 用户态进程<br/>vdev框架总容器]
subgraph qvm 内部:多个独立vdev
VDEV_VGIC[vgic vdev<br/>虚拟GICv3,中断管理器]
VDEV_NET[virtio-net vdev<br/>virtio BE 网卡后端]
VDEV_BLK[virtio-blk vdev<br/>virtio 块设备后端]
VDEV_CONSOLE[virtio-console vdev<br/>串口控制台后端]
VDEV_OTHER[其他vdev:gpio、i2c等]
end
QVM --> GUEST[Android Guest]
subgraph Android Guest
G_DRV_GIC[GICv3 虚拟中断驱动]
G_DRV_NET[virtio-net FE驱动<br/>网卡:eth0 / vnet0]
G_DRV_BLK[virtio-blk FE驱动]
G_DRV_CONSOLE[virtio-console FE驱动]
end
%% virtio设备依赖vgic注入虚拟中断
VDEV_NET -.-> VDEV_VGIC
VDEV_BLK -.-> VDEV_VGIC
VDEV_CONSOLE -.-> VDEV_VGIC
VDEV_OTHER -.-> VDEV_VGIC
VDEV_VGIC --> G_DRV_GIC
VDEV_NET --> G_DRV_NET
VDEV_BLK --> G_DRV_BLK
VDEV_CONSOLE --> G_DRV_CONSOLE
各位客官,能否打赏呢,感谢