feat(starryos): add K230 KPU QEMU support#994
Conversation
|
riscv64 平台和 快设备驱动正在重构,可稍等1天再继续这部分 |
There was a problem hiding this comment.
PR #994 Review: feat(starryos): add K230 KPU QEMU support
变更概述
本 PR 新增 K230 KPU QEMU 支持,包括:
drivers/npu/k230-kpuno_std 驱动 crate(KPU 寄存器、命令流编程、ioctl/mmap 接口)platforms/ax-plat-riscv64-k230静态平台 crate(直接启动、页表、PLIC、SDHCI1 块设备)- StarryOS
/dev/kpu设备节点 - K230 board/qemu 配置文件
- axbuild SD drive patch 逻辑
阻塞问题:与已合并 PR #961 及进行中 PR #976 存在根本性冲突
1. PR #961 已合并进 dev,riscv64 平台架构方向已改变
PR #961(feat(riscv64): support dynamic platform on QEMU and SG2002,26 commits,169 files)已于 2026-05-27T14:09:19Z 合并入 dev。该 PR 引入了 plat-dyn/plat-static 平台选择模型:
- riscv64 QEMU 默认和测试配置已切换到
plat-dyn(FDT 动态探测) ax-driver收敛为plat-static/plat-dyn两种模式- PLIC 注册、IRQ 处理、块设备初始化均已重构
本 PR 使用旧的静态平台方式(plat_dyn = false),新建 ax-plat-riscv64-k230 crate 遵循的模式已被 dev 替换。K230 在 plat-dyn 体系下应考虑通过 FDT 探测设备(KPU、SDHCI 等),而不是新增一个完全静态的平台 crate。
当前 PR 与 dev 存在合并冲突(Cargo.lock、os/StarryOS/starryos/Cargo.toml),且 mergeable_state: dirty。
2. PR #976 仍在进行中,块设备驱动架构即将重构
PR #976(refactor(rdif-block): switch block drivers to submit poll,36 commits,103 files)正在进行中。该 PR:
- 移除
rd-block/rd-block-volume - 将 SD/MMC 块设备适配到新的
rdif-blocksubmit/poll 模型 - 修复 SDHCI DMA 同步顺序和 IRQ status 缓存 bug
本 PR 的 SDHCI 块设备实现(drivers.rs)直接依赖 rd_block::Interface、rd_block::IQueue、rd_block::Request 等接口,这些接口将在 PR #976 合并后被移除。如果本 PR 先合并,PR #976 合并时将产生大量冲突。
3. 项目成员已明确提醒
ZR233(MEMBER)已在本 PR 评论区指出:"riscv64 平台和快设备驱动正在重构,可稍等1天再继续这部分",并链接了 PR #961 和 PR #976。
代码质量观察(非阻塞,供后续重写参考)
k230-kpu驱动 crate 本身质量良好:no_std、有单元测试、命令流范围校验清晰- axbuild SD drive patch 逻辑(
replace_sd_drive_arg)设计合理,有对应单测 - KPU 设备节点 ioctl/mmap 设计合理
- boot.rs 页表映射、irq.rs PLIC 处理逻辑在旧架构下是正确的
本地验证结果(在 PR 分支上)
cargo fmt --check:通过cargo test -p k230-kpu:3/3 通过cargo test -p axbuild:408/408 通过- 合并冲突确认:
Cargo.lock、os/StarryOS/starryos/Cargo.toml - 无 GitHub Actions CI 运行记录
建议
- 等待 PR #976 合并后再继续,避免块设备驱动冲突
- 基于最新 dev(含 PR #961)重新适配,考虑 K230 是否应使用
plat-dyn+ FDT 探测,而不是新建静态平台 crate - 将 SDHCI 块设备实现适配到 PR #976 引入的新
rdif-blocksubmit/poll 模型 k230-kpu驱动 crate 和 KPU 设备节点代码可以在重写时保留,它们与平台架构和块设备驱动解耦
Powered by mimo-v2.5-pro
There was a problem hiding this comment.
PR #994 Review: feat(starryos): add K230 KPU QEMU support
变更概述
本 PR 新增 K230 KPU QEMU 第一阶段适配,包括:
drivers/npu/k230-kpuno_std 驱动 crate(KPU 寄存器、命令流编程、ioctl/mmap 接口)platforms/ax-plat-riscv64-k230静态平台 crate(direct boot、页表、PLIC、SDHCI1 块设备)- StarryOS
/dev/kpu设备节点 - K230 board/qemu 配置文件
- axbuild SD drive patch 逻辑
- K230 QEMU smoke test-suit 用例
PR 质量整体较高:k230-kpu 驱动设计清晰、有单元测试、命令流范围校验合理;KPU 设备节点 ABI 设计规范;axbuild SD drive patch 有单测覆盖。但存在阻塞性架构冲突。
🔴 阻塞问题
1. riscv64 平台架构已变更,本 PR 使用旧模式
PR #961(feat(riscv64): support dynamic platform on QEMU and SG2002)已于 2026-05-27 合并入 dev。该 PR 引入了 plat-dyn/plat-static 平台选择模型,riscv64 QEMU 默认已切换到 plat-dyn(FDT 动态探测)。本 PR 新建 ax-plat-riscv64-k230 使用 plat_dyn = false 的静态方式,与 dev 当前架构方向不一致。建议基于最新 dev 重新适配,评估 K230 是否应采用 plat-dyn + FDT 探测。
2. 块设备驱动架构即将重构
PR #976(refactor(rdif-block): switch block drivers to submit poll)正在进行中,将移除 rd-block/rd-block-volume,切换到新的 rdif-block submit/poll 模型。本 PR 的 SDHCI 块设备实现直接依赖 rd_block::Interface、rd_block::IQueue 等即将被移除的接口。如果本 PR 先合并,PR #976 合并时将产生大量冲突。
3. 合并冲突
当前 mergeable_state: dirty,Cargo.lock 和 os/StarryOS/starryos/Cargo.toml 存在冲突,需要 rebase。
🟢 质量亮点
k230-kpucrate:no_std、有单元测试(3/3 通过)、命令流范围校验清晰- KPU 设备节点 ioctl/mmap ABI 设计规范
- axbuild
replace_sd_drive_arg逻辑合理,有对应单测(408/408 通过) - 阶段报告文档详尽(845 行)
📋 建议
- 等待 PR #976 合并后再继续适配 SDHCI 块设备
- 基于最新 dev(含 PR #961)重新适配,评估 K230 使用
plat-dyn+ FDT 探测的可行性 - SDHCI 块设备适配到 PR #976 引入的新
rdif-blocksubmit/poll 模型 k230-kpu驱动 crate 和 KPU 设备节点代码可以在重写时保留,它们与平台架构和块设备驱动解耦
本地验证
cargo test -p k230-kpu:3/3 通过cargo test -p axbuild:408/408 通过- 合并冲突已确认
Powered by mimo-v2.5-pro
|
请迁移至 riscv64 动态平台 |
问题背景
当前
dev分支缺少面向 QEMU K230 的 StarryOS 启动与 KPU/NPU 暴露路径。QEMU 侧zevorn/qemu的chao-k230-dev分支已经提供 K230 机器和 KPU 模型,Kunos 仓库也给出了可参考的 K230 direct boot、DTB 和 SD rootfs 参数;但 StarryOS 侧还没有对应的平台 crate、K230 board/qemu 配置、SDHCI rootfs 注册路径,以及用户态访问 KPU 的/dev接口。本 PR 是第一阶段适配,目标是先打通 QEMU K230 上 StarryOS 的启动、rootfs 挂载和 KPU 基础设备访问,并补充可由 Starry test-suit 运行的
/dev/kpu用户态 smoke 回归用例。当前范围不包含真实 KPU command stream 的端到端推理验证。主要变更
新增
drivers/npu/k230-kpuno_std 驱动 crateCommandRange、命令流地址拆分、program_command、run_command、clear_done、start、status、wait_done等基础接口。COMMAND_HI表达。新增
platforms/ax-plat-riscv64-k230-drive if=sd,...挂载的 rootfs 能被 StarryOS 识别。sdhci-host+sdmmc-protocol初始化 SD card,并通过rd-block接入 block device;第一阶段使用 FIFO transfer,先保证 QEMU rootfs 基础读写路径稳定。StarryOS 新增 KPU 设备节点
/dev/kpu和/dev/kpu0,设备号为240:1。新增 K230 board/qemu 配置
os/StarryOS/configs/board/k230-canmv.toml。k230-canmv.dts与生成后的k230-canmv.dtb,补充 KPU 节点和timebase-frequency = 27000000。os/StarryOS/configs/qemu/qemu-k230.toml,使用-machine k230、direct boot、DTB 和-drive if=sd,...。接入构建与平台选择
starryos新增k230feature,联动ax-hal/riscv64-k230与starry-kernel/k230-kpu。axhal新增riscv64-k230平台 feature 和build.rs平台 crate 选择。axbuild识别riscv64-k230平台。修正 axbuild rootfs QEMU patch 策略
-drive if=sd,...时,只替换该 SD drive 的file=。新增 K230 专用 Starry test-suit smoke
test-suit/starryos/k230-qemu/qemu-k230/kpu-smoke。normal,因为它依赖带-machine k230和 KPU model 的 QEMU binary。/usr/bin/k230-kpu-smoke。/dev/kpu和/dev/kpu0open、KPU CFGpread()、status/clear ioctl、CFG mmap status 读取、L2 mmap 32-bit 写入/读回,并以KPU_SMOKE_PASS作为稳定成功 marker。新增详细阶段报告
docs/k230-kpu-qemu-adaptation.md记录任务背景、QEMU/KPU 事实、总体架构、实现细节、设备 ABI、SDHCI/rootfs 适配、用户态 smoke、问题定位过程、验证矩阵和后续计划。关键设计理由
if=sddrive。[0x8040_0000, 0x2000]。normal,避免默认 CI 在没有 K230 QEMU 的环境里误跑;需要验证 K230 时显式选择--test-group k230-qemu。验证
默认实验环境为 Docker/Linux,镜像为
starryos-dev:ubuntu-qemu10.2.1。已通过:
已按 K230 实际 target 参数通过
starryostarget clippy:已使用
/Users/joshua/tmp/qemu中chao-k230-dev分支构建出的 QEMU K230 binary 做手动 smoke 验证,确认:k230-sdhci1成功注册为 block device。ax-fs-ng能从 SD raw ext4 rootfs 挂载根文件系统。/dev/kpu与/dev/kpu0均存在,设备号为240:1。od -An -tx4 -N4 /dev/kpu可读取 KPU CFG 寄存器,当前读数为00000000。已通过新增 test-suit 用例:
结果:
当前限制与后续计划
/dev/kpuABI 仍是第一阶段低层 ABI,后续需要补充用户态头文件或 Rust 绑定。k230-qemutest group 覆盖 run/wait done 与推理结果读取。