ax-riscv-plic 技术文档
路径:
components/riscv_plic类型:库 crate 分层:组件层 / RISC-V 物理中断控制器封装层 版本:0.4.0文档依据:当前仓库源码、Cargo.toml、README.md、src/lib.rs以及ax-plat-riscv64-qemu-virt的集成代码
ax-riscv-plic 是针对 RISC-V PLIC 的 typed MMIO 封装库。它把平台级中断控制器的寄存器布局、优先级、使能位图、threshold 和 claim/complete 等操作建模成一套安全边界明确的 Rust API。它不是完整的中断子系统,也不是虚拟 PLIC;它只负责“给定一个物理 PLIC MMIO 基址,如何按规范读写它”。
1. 架构设计分析
1.1 设计定位
这个 crate 的边界非常明确:
- 它负责物理 PLIC 寄存器布局与基本操作
- 它不负责中断分发策略
- 它不负责 handler 表
- 它不负责虚拟化 guest 侧 PLIC 行为
因此它应被理解为“物理控制器寄存器封装层”。
1.2 模块结构
ax-riscv-plic 只有一个 src/lib.rs,没有进一步拆分子模块。这说明作者将其定位为:
- 结构简单
- 接口集中
- 直接映射硬件规范
对外最核心的几个对象是:
PlicPLICRegsContextLocal
1.3 寄存器布局建模
该 crate 使用 tock-registers 的 register_structs! 与寄存器字段访问器来描述完整 PLIC 内存布局。核心区域包括:
- interrupt priority
- interrupt pending
- interrupt enable
- context local 区域
其中 context local 再包含:
priority_thresholdinterrupt_claim_complete
这与 RISC-V PLIC 规范的分区完全一致。