RK3588 NPU 驱动开发路线图
进度总览
当前状态:电源域管理 (Power Domain) 目标:将添加了npu驱动的starry编译拷贝到开发板验证探测
实际计划
第一阶段:环境验证与基础初始化
1. 理论与环境准备
-
阅读手册与 Demo
- 研读 RK3588 技术参考手册中 NPU 章节。
- 分析 RKNN Toolkit2 的官方 Demo,理解从模型加载到推理的完整数据流
-
实体机环境验证 (基于 StarryOS 比赛版)
- 编译并烧录比赛版本的 StarryOS 代码到 RK3588 实体板。
- 成功运行一个简单的文本生成模型,确保硬件和工具链正常。
-
整理 StarryOS 对 RK3588 NPU 驱动的逆向成果
-
寄存器地图
- 按模块梳理:PC / CORE / CNA / DPU / PPU / SDMA / DDMA / GLOBAL
- 对每个寄存器记录:offset、字段含义、读写属性、默认值/复位值、关联流程
- 标注来源:TRM / Linux rknpu 驱动
-
提交协议与数据结构
-
整理
DRM_IOCTL_RKNPU_*ioctl 列表与语义(Action / MemCreate / MemMap / MemDestroy / MemSync / Submit) -
对齐结构体布局:
rknpu_mem_create/rknpu_mem_map/rknpu_task/rknpu_submit(字段意义与对齐) -
梳理
mmap(offset)规则(handle 与 offset 的编码/解码约定)
-
整理
-
任务提交流程(时序 + 状态机)
- 从“用户态提交”到“硬件执行完成”的完整时序
- 失败路径:超时、异常中断状态、非法参数
-
寄存器地图
第二阶段:异步推理支持
目标:将当前同步阻塞轮询的任务提交改为中断驱动的异步模式,提交任务后 CPU 不再空转等待,NPU 完成后通过中断通知。
实现情况
- 中断处理 — 实现 IRQ 驱动模式,CPU 通过 WFI 指令进入低功耗等待,NPU 完成后触发中断唤醒 CPU
-
异步等待机制 — 实现
wait_all_npucore函数,支持多核心并行等待,每个核心独立触发中断 -
并发安全 — 每个核心维护独立的
irq_status原子变量,避免多核并发访问冲突 - 超时与错误恢复 — 实现中断状态检查和错误传播机制,异常时正确上报错误码
第三阶段:NPU多任务并发运行
目标:支持多个NPU计算任务同时在NPU多核上进行
实现情况
-
硬件资源隔离 — 验证 3 个 NPU 核心的 PC/CORE/CNA 等寄存器 per-core 独立,GLOBAL 寄存器通过
core_idx参数隔离 - GEM 内存隔离 — 实现 per-core 的 regcmd 缓冲区分配,每个核心使用独立的 DMA 地址空间
-
核心分配策略 — 实现
subcore_task机制,支持灵活的核心分配,QKV 三核并行、Wo 单核等混合调度