arm_vgic 技术文档
路径:
components/arm_vgic类型:库 crate 分层:组件层 / 可复用基础组件 版本:0.2.1文档依据:Cargo.toml、README.md、src/lib.rs、src/vgic.rs、src/vgicd.rs、src/interrupt.rs、src/devops_impl.rs、src/consts.rs、src/registers.rs、src/vtimer/*、src/v3/*
arm_vgic 是 ARM 虚拟中断控制器相关组件集合。它既包含面向 guest 的 GIC MMIO 设备实现,也包含虚拟定时器系统寄存器设备,以及可选的 GICv3 透传/窗口模型。它不是完整的“所有中断虚拟化逻辑都在这里”的单体,而是与 arm_vcpu、axvm、axdevice、axvisor_api 明确分工的组件。
1. 架构设计分析
1.1 设计定位
arm_vgic 的职责可以概括为“两类虚拟设备 + 一层状态建模”:
- 一类是 guest 可见的 GIC MMIO 设备窗口,如
Vgic、VGicD、VGicR、Gits。 - 一类是 guest 可见的系统寄存器设备,如虚拟物理定时器
CNTP_*设备。 - 中间层则是软件维护的中断元数据、寄存器解码和若干宿主 GIC 访问/屏蔽逻辑。
但它 不 完整负责:
- vCPU 进入/退出生命周期,这属于
arm_vcpu。 - 虚拟中断最终注入执行,这一动作已由
arm_vcpu/axvisor_api承担。 - 全量 GIC 寄存器行为建模,当前实现范围明显小于 README 中较强的宣传语。
1.2 内部模块划分
src/lib.rs:crate 入口与按 feature 导出,统一api_reexp的宿主 GIC / 注入接口。src/vgic.rs:精简 GICv2 风格 MMIO 设备主对象Vgic。src/vgicd.rs:GIC distributor 软件状态,维护Vgicd、VgicInt与若干寄存器读写行为。src/interrupt.rs:中断元数据定义,包括中断类型、状态与 enable/trigger 属性。src/registers.rs:大量 GICD 偏移到GicRegister的地址解码表。src/devops_impl.rs