axdevice
路径:
virtualization/axdevice类型:库 crate 分层:组件层 / 虚拟化设备分发层 版本:0.2.1文档依据:当前仓库源码、Cargo.toml、README.md、tests/test.rs及其在axvm中的调用关系
axdevice 是 Axvisor 虚拟化栈中的设备聚合与分发层。它不直接负责客户机地址空间映射,也不试图内建完整的模拟设备世界;它的核心职责是把 axvmconfig 描述的设备配置转化为一组 BaseDeviceOps 对象,并在运行期根据 MMIO、系统寄存器或端口访问地址,将 VM exit 精确转发给对应设备。
架构设计
设计定位
axdevice 解决的是虚拟机设备栈中的两个问题:
- 配置侧:如何把“某个 VM 应该挂哪些模拟设备”从配置对象变成运行时设备集合。
- 运行侧:当 vCPU 因 MMIO、系统寄存器或端口访问退出时,如何快速将访问派发给正确的设备对象。
因此它处在一个很清晰的中间层位置:
- 向上承接
axvm的 VM 生命周期和 VM exit 处理。 - 向下依赖
axdevice_base的统一设备 trait,以及arm_vgic、riscv_vplic这类具体设备实现。 - 旁路与
axaddrspace、axvmconfig协同,但不接管它们的职责。
特别要强调的是:axdevice 不负责把 GPA 映射到 HPA,也不负责建立 Stage-2/EPT 映射。 这些工作属于 axvm 和地址空间层。axdevice 只关心“某个地址落在哪个设备对象上,然后调它的 handle_read/handle_write”。