Skip to content

test(starryos): add K230 NNCase runtime demo#1058

Merged
ZR233 merged 12 commits into
rcore-os:devfrom
Joshua912815:codex/k230-nncase-demo
Jun 5, 2026
Merged

test(starryos): add K230 NNCase runtime demo#1058
ZR233 merged 12 commits into
rcore-os:devfrom
Joshua912815:codex/k230-nncase-demo

Conversation

@Joshua912815

@Joshua912815 Joshua912815 commented May 31, 2026

Copy link
Copy Markdown
Contributor

依赖关系

这是 K230 KPU/NPU 拆分提交系列的 NNCase runtime demo PR。#1046#1054 已合入 dev#1053 已按 reviewer 意见关闭并并入 #1054

本 PR 基于最新 upstream/dev,只包含 apps/starry/k230-kpu-nncase 应用、kpu-nncase-runtime 测试 wrapper、展示脚本、资产准备文档和必要的 RISC-V 用户态修正;不重复携带 #1054/dev/kpu 底层设备适配提交。

背景/问题

前置 PR 已完成 K230 QEMU 启动、SD rootfs、KPU driver core 和 StarryOS /dev/kpu UAPI。本 PR 把验证层从“手写/复放 command”推进到“真实 .kmodel 由 K230 SDK/NNCase runtime 在 StarryOS guest 内加载并生成 KPU command”。

目标是证明 StarryOS 的 KPU 支持覆盖真实 runtime 调用路径:模型加载、tensor 分配、runtime command 生成、通过 /dev/kpu 提交、等待 KPU done/IRQ、读取 output tensor。

主要修改

  • 新增 apps/starry/k230-kpu-nncase,作为面向使用者和课堂展示的 K230 KPU/NNCase app。
  • 将 NNCase demo C++ 源码、compat shim、构建工具、trace 工具和教师展示脚本归档到该 app 目录。
  • 新增 app runner 配置:build-riscv64gc-unknown-none-elf.tomlqemu-riscv64.tomlprebuild.shinit.sh
  • 保留 test-suit/starryos/k230-qemu/qemu-k230/kpu-nncase-runtime 作为 CI/test wrapper,其 CMake 入口复用 apps/starry/k230-kpu-nncase/c
  • 新增最小 K230 SDK/NNCase compat shim:MMZ 分配与虚实地址查询、/dev/gnne_device//dev/ai_2d_device//dev/mem 受限兼容、gnne_enable wrapper。
  • 新增两个 guest demo:kpu-nncase-minimalk230-yolov8n-demo
  • 新增 apps/starry/k230-kpu-nncase/demo-teacher.sh;旧的 test-suit/.../demo-teacher.sh 仅保留为 wrapper。
  • 修正 Xuantie C9xx/RVV 用户态 vector 状态初始化,同时保留旧 C9xx legacy VS bit。
  • 新增中英文文档:docs/k230-kpu-nncase-runtime.mddocs/k230-kpu-nncase-runtime.zh.md
  • 文档说明如何获取/准备未提交的大型资产:官方 K230 SDK、make prepare_sourcecodeyolov8n_320.kmodelbus.jpg、NNCase 静态库、SDK toolchain、guest demo 预构建二进制。

资产准备说明

本 PR 不提交真实 .kmodel、图片、官方 SDK 静态库或预构建 demo 二进制。完整准备流程见 apps/starry/k230-kpu-nncase/README.mddocs/k230-kpu-nncase-runtime.mddocs/k230-kpu-nncase-runtime.zh.md

核心目录结构:

target/official-k230/k230-sdk-src/
  toolchain/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/riscv64-unknown-linux-musl-g++
  src/big/nncase/riscv64/nncase/lib/libNncase.Runtime.Native.a
  src/big/nncase/riscv64/rvvlib/
  src/big/utils/lib/hhb-prebuilt-decode/
  src/big/kmodel/ai_poc/kmodel/yolov8n_320.kmodel
  src/big/kmodel/ai_poc/images/bus.jpg

简要流程:

git clone https://github.com/kendryte/k230_sdk target/official-k230/k230-sdk-src

docker run --rm --platform linux/amd64 -u root \
  -v "$PWD/target/official-k230/k230-sdk-src":/k230_sdk \
  -v "$PWD/target/official-k230/k230-sdk-src/toolchain":/opt/toolchain \
  -w /k230_sdk \
  ghcr.io/kendryte/k230_sdk:latest \
  bash -lc 'make prepare_sourcecode'

bash apps/starry/k230-kpu-nncase/c/tools/build-nncase-runtime-binaries.sh

预构建 guest demo 二进制放在 ignored 目录:

apps/starry/k230-kpu-nncase/c/assets/bin/
  kpu-nncase-minimal
  k230-yolov8n-demo

运行方式

Starry app runner:

PATH="$PWD/target/qemu-k230-docker-build:$PATH" \
  cargo xtask starry app qemu -t k230-kpu-nncase --arch riscv64

test-suit 回归:

PATH="$PWD/target/qemu-k230-docker-build:$PATH" \
  cargo xtask starry test qemu --test-group k230-qemu --arch riscv64 -c kpu-nncase-runtime

课堂展示脚本:

bash apps/starry/k230-kpu-nncase/demo-teacher.sh

设计理由

  • 面向使用者和课堂展示的 KPU runtime demo 放在 apps/starry/k230-kpu-nncase,符合 apps/starry 的 operator-facing workflow 定位。
  • test-suit 只保留 CI/test wrapper,不再承载主要应用源码,避免测试目录和展示应用目录职责混在一起。
  • 不把真实 .kmodel、官方 SDK 静态库、预构建二进制、大型 capture 放进仓库,避免 PR 引入不可维护的大文件。
  • 虽然不提交这些资产,但提供中英文复现文档和期望目录布局,让 reviewer 可以按官方 SDK 路径重新准备。
  • /dev/kpu 内核 ABI 不在本 PR 继续扩张,NNCase runtime 的适配先放在用户态 compat shim 内,降低内核侧风险。
  • detections=0 不作为失败条件,因为本 PR 验收重点是真实 runtime 与 KPU 执行链路;YOLO 检测框语义和官方 RT-Smart 后处理完全对齐仍是后续应用层工作。

Review 更新

  • 已解决 K230 README 冲突:保留 feat(starryos): expose K230 KPU device #1054 的 K230 QEMU fork/build/PATH 说明,并追加 NNCase runtime case 的资产与运行说明。
  • 已将新增 kpu-nncase-runtime/qemu-riscv64.toml-L 路径对齐到 feat(starryos): expose K230 KPU device #1054target/qemu-k230-docker-build/pc-bios 规范。
  • 已补充中英文资产准备文档,说明未提交的大型资产如何从官方 K230 SDK 获取并生成本地 ignored demo 二进制。
  • 已修复 CMake prebuilt fallback:SDK NNCase 静态库、RVV/JPEG 目录和 SDK toolchain 检查现在只在 source build 分支执行;prebuilt 分支只要求显式或默认可找到的 K230_KMODELK230_BUS_JPGapps/starry/k230-kpu-nncase/c/assets/bin 下的两个 guest demo 二进制。
  • 已按课程反馈将 KPU/NNCase demo 从 test-suit 主体迁入 apps/starry/k230-kpu-nncase,并保留 test-suit wrapper 复用 app 源码。
  • 已修复最新 review 指出的 REL_WORKTREE 路径计算问题:当 STORAGE_ROOT == WORKTREE_ROOT 时不再把绝对路径拼进 Docker -w
  • 已为 app 和 test-suit 两个 build-riscv64gc-unknown-none-elf.toml 补充必需的 env = {} 字段。
  • 已将 K230 相关文档和 PR 命令从旧的 app run 写法改为实际子命令 cargo xtask starry app qemu

验证

此前已在 Docker/Linux 环境完成完整 demo 验证:

cargo fmt --check
cargo xtask clippy --package ax-cpu
cargo xtask starry test qemu --test-group k230-qemu --arch riscv64 -c kpu-nncase-runtime
git diff --check

此前完整 demo 关键结果:

NNCASE_MINIMAL: load_model ok
NNCASE_MINIMAL: model io inputs=1 outputs=4
K230_SDK_COMPAT: gnne_enable run=54 ... status=0x0000000400000004
NNCASE_MINIMAL: interp.run done
NNCASE_MINIMAL: output[0] bytes=705600 fnv1a64=0x31f54b838e803a0e
K230_SDK_COMPAT: stats mmz_alloc=15 kpu_run=54
NNCASE_MINIMAL_PASS

YOLOV8N_DEMO: decode image=/usr/share/k230-nncase-runtime/images/bus.jpg width=810 height=1080
YOLOV8N_DEMO: run done
YOLOV8N_DEMO: output[0] bytes=705600 fnv1a64=0x79742dfead3bd654
YOLOV8N_DEMO: detections=0
YOLOV8N_DEMO_PASS
K230_NNCASE_RUNTIME_PASS
PASS kpu-nncase-runtime
all starry k230-qemu qemu tests passed

本轮迁移到 apps/starry 后,重新执行:

cargo fmt --check
cargo xtask starry app list
cargo xtask starry test qemu --test-group k230-qemu --arch riscv64 -l
bash -n apps/starry/k230-kpu-nncase/prebuild.sh
bash -n apps/starry/k230-kpu-nncase/demo-teacher.sh
bash -n test-suit/starryos/k230-qemu/qemu-k230/demo-teacher.sh
bash -n apps/starry/k230-kpu-nncase/c/tools/build-nncase-runtime-binaries.sh
bash -n apps/starry/k230-kpu-nncase/c/tools/trace-nncase-runtime.sh
bash -n apps/starry/k230-kpu-nncase/c/src/run-nncase-runtime-demo.sh
python3 -c "import py_compile; py_compile.compile('apps/starry/k230-kpu-nncase/c/tools/diff-kpu-trace.py', cfile='/tmp/diff-kpu-trace.pyc', doraise=True)"
git diff --check

cargo xtask starry app list 已确认新增 app 可被发现:

qemu    k230-kpu-nncase prebuild

cargo xtask starry test qemu --test-group k230-qemu --arch riscv64 -l 已确认 K230 test-suit wrapper 可被发现:

k230-qemu
├── boot
├── kpu-nncase-runtime
└── kpu-smoke

本轮还验证了 REL_WORKTREE 的两种路径场景:

STORAGE_ROOT == WORKTREE_ROOT => REL_WORKTREE is empty
WORKTREE_ROOT under STORAGE_ROOT => REL_WORKTREE is relative path

本轮还验证了 app prebuild 会把本地 ignored 二进制、模型和图片安装到 rootfs overlay:

/usr/bin/k230-nncase-runtime-demo
/usr/bin/k230-yolov8n-demo
/usr/bin/kpu-nncase-minimal
/usr/share/k230-nncase-runtime/images/bus.jpg
/usr/share/k230-nncase-runtime/models/yolov8n_320.kmodel

并用 Docker/Linux 验证了 app CMake 入口和 test-suit wrapper 入口都能在没有 SDK runtime lib、只提供模型/图片和 prebuilt guest 二进制时完成 configure/install:

docker run --rm --platform linux/amd64 \
  -v "$PWD":/mnt \
  -v /path/to/target/official-k230:/official-k230:ro \
  -w /mnt \
  ghcr.io/rcore-os/tgoskits-container:latest \
  bash -lc 'cmake -S apps/starry/k230-kpu-nncase/c -B /tmp/k230-app-cmake -DK230_SDK_ROOT=/tmp/no-sdk -DK230_KMODEL=/official-k230/k230-sdk-src/src/big/kmodel/ai_poc/kmodel/yolov8n_320.kmodel -DK230_BUS_JPG=/official-k230/k230-sdk-src/src/big/kmodel/ai_poc/images/bus.jpg && cmake --build /tmp/k230-app-cmake'

docker run --rm --platform linux/amd64 \
  -v "$PWD":/mnt \
  -v /path/to/target/official-k230:/official-k230:ro \
  -w /mnt \
  ghcr.io/rcore-os/tgoskits-container:latest \
  bash -lc 'cmake -S test-suit/starryos/k230-qemu/qemu-k230/kpu-nncase-runtime/c -B /tmp/k230-wrapper-cmake -DK230_SDK_ROOT=/tmp/no-sdk -DK230_KMODEL=/official-k230/k230-sdk-src/src/big/kmodel/ai_poc/kmodel/yolov8n_320.kmodel -DK230_BUS_JPG=/official-k230/k230-sdk-src/src/big/kmodel/ai_poc/images/bus.jpg && DESTDIR=/tmp/k230-install cmake --install /tmp/k230-wrapper-cmake --prefix /'

CMake 关键输出:

-- Using prebuilt K230 NNCase runtime demo binaries from /mnt/apps/starry/k230-kpu-nncase/c/assets/bin
-- Configuring done
-- Generating done
-- Installing: /tmp/k230-install/usr/bin/kpu-nncase-minimal
-- Installing: /tmp/k230-install/usr/bin/k230-yolov8n-demo
-- Installing: /tmp/k230-install/usr/bin/k230-nncase-runtime-demo
-- Installing: /tmp/k230-install/usr/share/k230-nncase-runtime/models/yolov8n_320.kmodel
-- Installing: /tmp/k230-install/usr/share/k230-nncase-runtime/images/bus.jpg

已知限制

  • 本 PR 不提交真实模型、图片、官方 SDK 静态库或预构建 demo 二进制;这些通过文档说明的本地 ignored assets 准备。
  • 当前已经验证真实 .kmodel 加载、NNCase command 生成、KPU 提交、done/IRQ 和非零 output tensor hash/stats。
  • 当前尚未完成 YOLO 检测框语义与官方 RT-Smart reference 的完整后处理对齐;detections=0 表示 output tensor 到最终 detection boxes 的应用层解释还需要继续对齐,不表示 KPU 没有运行。

@Joshua912815
Joshua912815 force-pushed the codex/k230-nncase-demo branch 2 times, most recently from 14bb54c to f1af9a2 Compare June 1, 2026 10:41

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review 总结

PR: test(starryos): add K230 NNCase runtime demo

本 PR 新增 K230 KPU 驱动 (drivers/npu/k230-kpu)、StarryOS /dev/kpu devfs 设备节点、NNCase runtime demo 测试用例,以及 Xuantie C9xx 用户态 vector 状态初始化修正。整体代码质量良好,结构清晰。

代码审查

drivers/npu/k230-kpu/src/lib.rs

  • no_std crate,UAPI 常量齐全,有 repr(C) 断言保证 ABI 稳定性
  • Kpu::new() 有 SAFETY 文档,command_words() 正确校验 4G 窗口边界
  • 单元测试覆盖:命令范围校验、UAPI layout 稳定性、边界条件

os/StarryOS/kernel/src/pseudofs/dev/kpu.rs

  • FDT probe + 静态 fallback 策略正确
  • copy_from_user / copy_to_user 使用 user_copy,安全边界合理
  • IRQ handler + WaitQueue + poll 超时 100ms 的混合等待机制设计合理
  • mmap 支持虚拟偏移和物理地址两种方式映射同一区域,兼容 NNCase SDK 约定

components/axcpu/src/riscv/uspace.rs

  • 新增标准 RISC-V VS bit(bit 9)与 XThead legacy bits(bits 23-23)并行设置,K230 C908V QEMU 需要两者

test-suit 用例

  • qemu-riscv64.toml 配置合理,timeout=300s,正则匹配完整
  • Shell 脚本 bash -n 全部通过
  • C 源码中 K230 SDK compat shim 自包含,不依赖已删除的 driver C header

本地验证结果

检查项 结果
cargo fmt --check ✅ PASS
cargo clippy -p k230-kpu ✅ 0 warnings
cargo test -p k230-kpu ✅ 4/4 passed
cargo xtask clippy --package ax-cpu ✅ 28/28 checks passed
Shell 脚本 bash -n (4个) ✅ All PASS

QEMU 验证说明

kpu-nncase-runtime 测试用例需要 K230 QEMU(带 KPU 仿真)和本地 K230 SDK/NNCase 资产(.kmodel、预构建 demo binary),当前审查环境无法执行完整 QEMU 运行。PR 作者已在 PR body 中提供了完整的 QEMU 验证输出,包括 NNCASE_MINIMAL_PASSYOLOV8N_DEMO_PASSK230_NNCASE_RUNTIME_PASS

关联 PR

  • 依赖 #1054 feat(starryos): expose K230 KPU device
  • #1053 已关闭并入 #1054
  • 无重叠 PR

结论

代码质量好、测试覆盖充分、文档完整、无阻塞问题。建议 APPROVE。

Powered by mimo-v2.5-pro

@Joshua912815
Joshua912815 force-pushed the codex/k230-nncase-demo branch 2 times, most recently from e4b7fbf to e1f19fc Compare June 2, 2026 09:39

Copy link
Copy Markdown
Contributor Author

已处理 conflicts:

本轮重新验证:

cargo fmt --check
bash -n demo-teacher.sh
bash -n run-nncase-runtime-demo.sh
bash -n build-nncase-runtime-binaries.sh
bash -n trace-nncase-runtime.sh
cargo xtask clippy --package ax-cpu
git diff --check

关键结果:

clippy summary: 1 package(s), 28 check(s), 1 package(s) passed, 0 package(s) failed
all clippy checks passed

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

谢谢这个 K230 NNCase runtime demo,整体方向我认同:它把验证从底层 /dev/kpu smoke 推进到了真实 .kmodel、NNCase runtime command generation、KPU submit/wait/output hash 的端到端路径。

本次审查最新 head c95135d652fb9f3d4c802c7f02bafc46a605b176,CI 中常规 formatting、clippy、Starry/ArceOS/Axvisor QEMU 等检查没有看到失败;review threads 为空,mergeability 为 clean。

本地验证结果:

cargo fmt --check: PASS
bash -n demo-teacher.sh run-nncase-runtime-demo.sh build-nncase-runtime-binaries.sh trace-nncase-runtime.sh: PASS
python3 -m py_compile diff-kpu-trace.py: PASS
git diff --check origin/dev...HEAD: PASS
cargo xtask clippy --package ax-cpu: 28/28 checks passed

重复/重叠分析:origin/dev 上只有更底层的 kpu-smoke,没有同等的 kpu-nncase-runtime demo;open PR 搜索也没有发现覆盖同一功能域的并行 PR。

不过这里有一个阻塞问题:kpu-nncase-runtime 的 CMake 在进入 prebuilt binary fallback 前就强制要求 SDK NNCase static lib 存在,导致 PR body 和文档承诺的“已有 ignored 预构建 demo binaries 时可不从源码构建”的路径实际不可用。这个问题会让 reviewer/演示环境即使已经准备了预构建 guest 二进制,也仍然必须准备完整 SDK lib,和当前可复现说明不一致。

我已在 CMakeLists.txt 上留了 inline comment,建议把 SDK runtime/lib/toolchain 检查移动到源码构建分支内;prebuilt 分支只要求模型、图片和两个预构建二进制存在即可。

因此本轮先请求修改。

Comment thread test-suit/starryos/k230-qemu/qemu-k230/kpu-nncase-runtime/c/CMakeLists.txt Outdated
@Joshua912815

Copy link
Copy Markdown
Contributor Author

已根据 review 和反馈更新本 PR:

  1. 之前指出的 CMake prebuilt fallback 问题已修复:

    • SDK NNCase static lib、RVV/JPEG 目录和 SDK toolchain 检查现在只在 source build 分支执行;
    • prebuilt 分支只要求 K230_KMODELK230_BUS_JPG,以及 apps/starry/k230-kpu-nncase/c/assets/bin/ 下的两个 guest demo 二进制;
    • 已用 K230_SDK_ROOT=/tmp/no-sdk 的 Docker/Linux 场景验证 app CMake 入口和 test-suit wrapper 入口都能 configure/install。
  2. 根据反馈,KPU/NNCase demo 主体已迁入 apps/starry/k230-kpu-nncase

    • C++ demo 源码、compat shim、构建工具、trace 工具、teacher demo 脚本都已放到 apps/starry
    • test-suit/starryos/k230-qemu/qemu-k230/kpu-nncase-runtime 现在只保留 CI/test wrapper,复用 apps/starry/k230-kpu-nncase/c
    • 已新增 app runner 配置,可通过 cargo xtask starry app run -t k230-kpu-nncase --arch riscv64 运行。

本轮补充验证:

cargo fmt --check
cargo xtask starry app list
bash -n apps/starry/k230-kpu-nncase/prebuild.sh
bash -n apps/starry/k230-kpu-nncase/demo-teacher.sh
bash -n test-suit/starryos/k230-qemu/qemu-k230/demo-teacher.sh
bash -n apps/starry/k230-kpu-nncase/c/tools/build-nncase-runtime-binaries.sh
bash -n apps/starry/k230-kpu-nncase/c/tools/trace-nncase-runtime.sh
bash -n apps/starry/k230-kpu-nncase/c/src/run-nncase-runtime-demo.sh
python3 -c "import py_compile; py_compile.compile('apps/starry/k230-kpu-nncase/c/tools/diff-kpu-trace.py', cfile='/tmp/diff-kpu-trace.pyc', doraise=True)"
git diff --check

@Joshua912815
Joshua912815 requested a review from ZR233 June 4, 2026 08:49

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review 总结

PR: test(starryos): add K230 NNCase runtime demo
最新 head: 0ad6643b7a1e22201ada646866260e6d836708a3

本 PR 新增 K230 KPU/NNCase 端到端 runtime demo,将验证从底层 /dev/kpu smoke 推进到真实 .kmodel 加载、NNCase runtime command 生成、KPU 提交/等待/output hash 的完整路径。整体结构清晰,符合项目规范。

变更内容

  • apps/starry/k230-kpu-nncase/:新增 operator-facing K230 KPU demo 应用,包含 C++ NNCase compat shim、demo 程序、CMake 构建(支持源码构建和 prebuilt fallback)、shell 脚本、构建/追踪工具。
  • components/axcpu/src/riscv/uspace.rs:在 Xuantie C9xx legacy VS bits 基础上,同时设置标准 RISC-V VS bit(bit 9),K230 C908V QEMU 需要两者。
  • test-suit/starryos/k230-qemu/qemu-k230/kpu-nncase-runtime/:保留为 CI/test wrapper,CMake 入口复用 apps/starry/k230-kpu-nncase/c
  • 文档:新增中英文资产准备文档、apps/starry README 更新。

前序 review 处理

ZR233 之前提出的 CMake prebuilt fallback 阻塞问题(SDK NNCase lib 在 prebuilt 路径前强制要求)已在最新提交中修复:

  • K230_BUILD_FROM_SOURCE 分支处理 SDK lib/toolchain 检查;
  • prebuilt 分支只要求 kmodel、bus.jpg 和两个 guest demo 预构建二进制;
  • test-suit wrapper CMakeLists.txt 已改为复用 app 目录的 CMake,不再有独立的 SDK lib 强制检查。

本地验证结果

检查项 结果
cargo fmt --check ✅ PASS
cargo xtask clippy --package ax-cpu ✅ 28/28 passed, 0 failed
bash -n shell 脚本(6个) ✅ All PASS
python3 -m py_compile diff-kpu-trace.py ✅ PASS
git diff --check ✅ PASS
[patch.crates-io] 检查 ✅ 无 patch

CI 状态

CI workflow 整体结论:successTest with std / run_containerTest axvisor loongarch64 qemu / run_container 成功;其他 run_host 任务为 skipped(预期的 CI 矩阵/path-filter 行为)。kpu-nncase-runtime 测试需要 K230 QEMU(带 KPU 仿真),标准 CI 无法覆盖;PR 作者已在 PR body 中提供完整的 QEMU 验证输出。

重复/重叠分析

  • origin/dev 上有底层 kpu-smoke,无同等 kpu-nncase-runtime demo。
  • #1046#1054 已合入 dev(底层 KPU driver 和 /dev/kpu),本 PR 不重复携带。
  • 搜索 open PR 未发现覆盖同一功能域的并行 PR。

结论

代码质量好、测试覆盖充分、文档完整、CMake prebuilt fallback 问题已修复、CI 绿灯。无阻塞问题,建议合入。

Powered by mimo-v2.5-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

验证结果:按文档无法直接跑通,请求修改

我在本地按 PR 文档完整验证了构建和运行流程。Demo 本身功能正确(54 次 KPU run 全部完成,output tensor hash 非零),但按 PR 提供的文档和代码无法直接跑通,存在以下 3 个阻塞级 bug:


Bug 1(阻塞):构建脚本 REL_WORKTREE 路径计算错误

文件: apps/starry/k230-kpu-nncase/c/tools/build-nncase-runtime-binaries.sh:23

REL_WORKTREE=${WORKTREE_ROOT#"$STORAGE_ROOT"/}

STORAGE_ROOT == WORKTREE_ROOT(SDK 在仓库根目录内,这是最常见的场景)时,参数展开无法剥离前缀(因为 WORKTREE_ROOT 没有尾部 /),导致 REL_WORKTREE 被错误赋值为完整绝对路径 /home/.../tgoskits-gpt

实际结果: Docker -w 变成 /workspace//home/.../tgoskits-gpt,cmake 找不到源码目录。

修复建议:

if [ "$WORKTREE_ROOT" = "$STORAGE_ROOT" ]; then
    REL_WORKTREE=""
else
    REL_WORKTREE=${WORKTREE_ROOT#"$STORAGE_ROOT"/}
fi

Bug 2(阻塞):build-riscv64gc-unknown-none-elf.toml 缺少必需的 env 字段

文件: apps/starry/k230-kpu-nncase/build-riscv64gc-unknown-none-elf.toml

xtask 的 BuildInfo 结构体要求 env: HashMap<String, String> 为必需字段,但该文件未声明。执行 cargo xtask starry app qemucargo xtask starry test qemu 均报:

TOML parse error at line 1, column 1
missing field env

注意:dev 分支上已有的 test-suit/starryos/k230-qemu/qemu-k230/build-riscv64gc-unknown-none-elf.toml 同样缺少此字段(这是 dev 分支 xtask 后续新增的必需要求),建议本 PR 一并补上两个文件。

修复: 在文件开头添加 env = {}


Bug 3(阻塞):文档中 app run 子命令不存在

PR 中多处文档写的命令 cargo xtask starry app run 不存在,实际子命令是 app qemu

文件 位置
apps/starry/README.md 第 21 行
apps/starry/k230-kpu-nncase/README.md 第 90 行
docs/k230-kpu-nncase-runtime.md 2 处
docs/k230-kpu-nncase-runtime.zh.md 2 处

修复: 全局替换 app runapp qemu


修复后验证通过的证据

我在本地修复上述 3 个问题后,成功跑通了完整 demo:

NNCASE_MINIMAL_PASS
YOLOV8N_DEMO_PASS
K230_NNCASE_RUNTIME_PASS
=== SUCCESS PATTERN MATCHED: (?m)^K230_NNCASE_RUNTIME_PASS$ ===
  • 54 次 gnne_enable KPU run 全部 status=0x0000000400000004(DONE)
  • Output tensor hash 非零(如 fnv1a64=0x79742dfead3bd654
  • MMZ 分配 15 次,KPU run 54 次,与 PR 描述一致

总结:Demo 功能正确,但按当前文档和代码无法直接跑通,请修复以上 3 个问题后重新提交。

@Joshua912815

Copy link
Copy Markdown
Contributor Author

已处理最新 review 中的 3 个阻塞问题,并推送到 97bc67a9c8b032f66d83db2c7b2f5cafc9fc41e0

  1. build-nncase-runtime-binaries.sh 已修复 STORAGE_ROOT == WORKTREE_ROOT 时的 REL_WORKTREE 计算,避免 Docker -w 拼出 /workspace//abs/path
  2. 已为 apps/starry/k230-kpu-nncase/build-riscv64gc-unknown-none-elf.tomltest-suit/starryos/k230-qemu/qemu-k230/build-riscv64gc-unknown-none-elf.toml 补充必需的 env = {}
  3. K230 相关文档和 PR 描述中的运行命令已统一为 cargo xtask starry app qemu -t k230-kpu-nncase --arch riscv64

本轮重新验证:

cargo fmt --check
git diff --check
cargo xtask starry app list
cargo xtask starry test qemu --test-group k230-qemu --arch riscv64 -l
bash -n apps/starry/k230-kpu-nncase/prebuild.sh
bash -n apps/starry/k230-kpu-nncase/demo-teacher.sh
bash -n test-suit/starryos/k230-qemu/qemu-k230/demo-teacher.sh
bash -n apps/starry/k230-kpu-nncase/c/tools/build-nncase-runtime-binaries.sh
bash -n apps/starry/k230-kpu-nncase/c/tools/trace-nncase-runtime.sh
bash -n apps/starry/k230-kpu-nncase/c/src/run-nncase-runtime-demo.sh
python3 -c "import py_compile; py_compile.compile('apps/starry/k230-kpu-nncase/c/tools/diff-kpu-trace.py', cfile='/private/tmp/diff-kpu-trace.pyc', doraise=True)"

app list 输出包含 qemu k230-kpu-nncase prebuild;K230 test-suit discovery 输出包含 bootkpu-nncase-runtimekpu-smoke。另外单独验证了 REL_WORKTREE 在等值和 worktree 子目录两种路径场景下的结果。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review 总结

PR: test(starryos): add K230 NNCase runtime demo
最新 head: 97bc67a9c8b032f66d83db2c7b2f5cafc9fc41e0

本 PR 新增 K230 KPU/NNCase 端到端 runtime demo,将验证从底层 /dev/kpu smoke 推进到真实 .kmodel 加载、NNCase runtime command 生成、KPU 提交/等待/output hash 的完整路径。整体结构清晰,符合项目规范。

变更内容

  • apps/starry/k230-kpu-nncase/:新增 operator-facing K230 KPU demo 应用,包含 C++ NNCase compat shim、两个 guest demo 程序(kpu-nncase-minimalk230-yolov8n-demo)、CMake 构建(支持源码构建和 prebuilt fallback)、shell 脚本、构建/追踪工具、中英文文档。
  • components/axcpu/src/riscv/uspace.rs:在 Xuantie C9xx legacy VS bits 基础上,同时设置标准 RISC-V VS bit(bit 9),K230 C908V QEMU 需要两者。变更正确且范围最小。
  • test-suit/starryos/k230-qemu/qemu-k230/kpu-nncase-runtime/:保留为 CI/test wrapper,CMake 入口复用 apps/starry/k230-kpu-nncase/c,不重复携带源码。
  • 文档:新增 docs/k230-kpu-nncase-runtime.md 和中文版 docs/k230-kpu-nncase-runtime.zh.mdapps/starry/README.mdapps/starry/k230-kpu-nncase/README.md 更新。

前序 review 处理

ZR233 最近一轮(6 月 4 日)提出 3 个阻塞问题,已在最新提交 97bc67a9 中全部修复:

  1. REL_WORKTREE 路径计算STORAGE_ROOT == WORKTREE_ROOT 时设置空字符串,避免 Docker -w 拼出 /workspace//abs/path。✅ 已验证。
  2. build-riscv64gc-unknown-none-elf.toml 缺少 env 字段:app 和 test-suit 两个文件均已补充 env = {}。✅ 已验证。
  3. 文档中 app run 子命令:K230 相关文档和 PR 描述中已统一为 cargo xtask starry app qemu -t k230-kpu-nncase --arch riscv64。✅ 已验证(apps/starry/README.md 中 Redis 等其他 app 仍用 app run 为预存内容,非本 PR 引入)。

更早的 CMake prebuilt fallback 问题(ZR233 第一次 review)也已在之前的提交中修复:SDK lib/toolchain 检查仅在 source build 分支执行。

本地验证结果

检查项 结果
cargo fmt --check ✅ PASS
cargo clippy --manifest-path components/axcpu/Cargo.toml --all-features -- -D warnings ✅ 0 warnings
bash -n shell 脚本(6个) ✅ All PASS
python3 -m py_compile diff-kpu-trace.py ✅ PASS
git diff --check ✅ PASS
[patch.crates-io] 检查 ✅ 无 patch

CI 状态

CI workflow 全部 check runs 完成(conclusion 为 skipped 的 run_host/run_container 任务为预期的 CI 矩阵行为,这些 skipped 任务覆盖的是 aarch64、loongarch64、x86_64 等非 RISC-V 架构以及自托管 runner 场景,与本 PR 新增的 RISC-V K230 demo 无直接关系)。无失败。

重复/重叠分析

  • origin/dev 上有底层 kpu-smoke,无同等 kpu-nncase-runtime demo。
  • #1046#1054 已合入 dev(底层 KPU driver 和 /dev/kpu),本 PR 不重复携带。
  • 搜索 open PR 未发现覆盖同一功能域的并行 PR。

代码质量

  • uspace.rs VS bit 修改正确:SSTATUS_VS_INITIAL (0x1 << 9) 为标准 RISC-V V 扩展状态,XTHEAD_LEGACY_VS_MASK (0x3 << 23) 为 XThead legacy,两者按位或后同时设置,符合 K230 C908V QEMU 行为。
  • C++ compat shim 设计合理:通过 --wrap 链接选项拦截 SDK 调用(open/mmap/ioctl/gnne_enable/mmz_alloc),将虚拟 MMIO 窗口映射到 /dev/kpu,实现了完整的 SDK ABI 兼容。
  • CMake prebuilt fallback 路径清晰:source build 和 prebuilt 两条路径完全分离,各自由不同的前提条件控制。
  • test-suit wrapper 通过 add_subdirectory 复用 app CMake,避免代码重复。

结论

代码质量好、所有前序 review 问题已修复、本地验证全部通过、CI 无失败、文档完整、无阻塞问题。建议合入。

Powered by mimo-v2.5-pro

@Joshua912815

Copy link
Copy Markdown
Contributor Author

补充本地完整验证结果:我重新在 Docker/Linux 环境跑了 cargo xtask starry app qemu -t k230-kpu-nncase --arch riscv64,这次完整通过。

环境处理:

  • 使用 starryos-dev:ubuntu-qemu10.2.1 arm64 Docker 镜像。
  • 本地自定义 K230 QEMU 为 aarch64 Linux 二进制,需要 libfdt.so.1;容器中补装了 libfdt1qemu-system-riscv64 可正常启动。
  • worktree 下临时把 ignored target/qemu-k230-docker-build 链接到 shared K230 QEMU build,保证 app 的 ${workspace}/target/qemu-k230-docker-build 路径可解析。
  • 镜像内已有 toolchain 是 nightly-2026-04-27,本轮验证设置了 RUSTUP_TOOLCHAIN=nightly-2026-04-27;代码路径、assets、rootfs 注入和 QEMU 运行均按本 PR app runner 执行。

关键输出:

k230-kpu-nncase prebuild: installed demo binaries, model, and image into rootfs overlay
Found build config at apps/starry/k230-kpu-nncase/build-riscv64gc-unknown-none-elf.toml
Using QEMU config file: apps/starry/k230-kpu-nncase/qemu-riscv64.toml
k230-kpu devfs: cfg=[0x80400000, +0x800) ... irq=Some(189) irq_wait=true source=fdt
K230_SDK_COMPAT: gnne_enable run=54 ... status=0x0000000400000004
NNCASE_MINIMAL_PASS
YOLOV8N_DEMO: output[0] bytes=705600 fnv1a64=0x79742dfead3bd654
YOLOV8N_DEMO: detections=0
YOLOV8N_DEMO_PASS
K230_NNCASE_RUNTIME_PASS
=== SUCCESS PATTERN MATCHED: (?m)^K230_NNCASE_RUNTIME_PASS$ ===

这次验证覆盖了 app runner、prebuild 资产安装、K230 QEMU 启动、StarryOS /dev/kpu 注册、真实 .kmodel 加载、NNCase 生成 54 次 KPU command、KPU done status、output tensor hash/stats,以及最终 success regex。

@Joshua912815
Joshua912815 force-pushed the codex/k230-nncase-demo branch from 91a9a2d to f887241 Compare June 4, 2026 17:45

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本轮复审的是当前 head f887241193c00b674bc94e41f923fa759029680b。最新提交只是 chore: rerun CI for K230 NNCase demo,没有代码 diff;我重点复核了上一轮阻塞项在当前树上的状态。

结论:前序阻塞问题已经修好,当前没有新的阻塞问题,批准合入。

复核结果:

  • apps/starry/k230-kpu-nncase/c/tools/build-nncase-runtime-binaries.shSTORAGE_ROOT == WORKTREE_ROOT 时会把 REL_WORKTREE 置空,不再拼出错误的 Docker -w 路径。
  • app 与 test-suit 两个 build-riscv64gc-unknown-none-elf.toml 都已经补上 env = {}
  • K230 相关新增文档和 README 中的新增运行命令已使用实际子命令 cargo xtask starry app qemu
  • 旧的 CMake prebuilt fallback thread 已验证修复并标记 resolved:我用临时 dummy model/image 与默认 ignored apps/starry/k230-kpu-nncase/c/assets/bin 下的两个 dummy guest binaries,分别跑通了 app CMake 入口和 test-suit wrapper 入口的 configure/install;两者都只走 prebuilt 分支,未要求 SDK NNCase static lib/toolchain,并安装了 kpu-nncase-minimalk230-yolov8n-demok230-nncase-runtime-demo、model 和 image。

本地验证:

  • git diff --check origin/dev...HEAD 通过
  • cargo fmt --check 通过
  • cargo xtask clippy --package ax-cpu 通过,28/28 target/feature checks passed
  • cargo xtask starry app list 能发现 qemu k230-kpu-nncase prebuild
  • cargo xtask starry test qemu --test-group k230-qemu --arch riscv64 -l 能发现 bootkpu-nncase-runtimekpu-smoke
  • 6 个新增 shell 脚本 bash -n 通过,diff-kpu-trace.pypy_compile 通过
  • [patch.crates-io] 检查无新增 patch

运行验证限制:本机当前没有 PR 所需的 out-of-tree K230 SDK/model/image、ignored guest binaries 和 target/qemu-k230-docker-build,所以这次没有重新跑完整 cargo xtask starry app qemu -t k230-kpu-nncase --arch riscv64。不过当前 tip 的最后一提交为空的 CI rerun commit,且 PR 里已有本轮修复后完整 K230 runtime 输出(NNCASE_MINIMAL_PASSYOLOV8N_DEMO_PASSK230_NNCASE_RUNTIME_PASS、54 次 gnne_enable DONE、非零 output hash)。本轮本地验证覆盖了这些外部资产之外的可复现 app/test discovery、CMake install 和 ax-cpu 代码路径。

CI:当前 run 26969202660 仍有部分通用 CI job 在 pending;已完成的 formatting、sync-lint、std、Axvisor、Starry self-hosted licheerv/orangepi 等已通过,未看到 failure。K230 runtime 不是默认 CI 能完整覆盖的外部资产场景,因此本次 approval 主要基于上述本地可复现检查和 PR 记录的完整 runtime 验证。

重复/重叠检查:origin/dev 上已有底层 K230/KPU smoke 和前置 #1046/#1054/dev/kpu 支持,但没有同等 NNCase runtime app/test wrapper;当前 open PR 搜索未发现替代或重复的 k230-kpu-nncase / kpu-nncase-runtime 实现。#990#1038 等只是 broad Starry/qperf 或 nginx app 方向,和本 PR不冲突。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review 总结

PR: test(starryos): add K230 NNCase runtime demo
head: f887241193c00b674bc94e41f923fa759029680b (9 commits)

本 PR 新增 K230 KPU/NNCase 端到端 runtime demo,将验证从底层 /dev/kpu smoke 推进到真实 .kmodel 加载、NNCase runtime command 生成、KPU 提交/等待/output hash 的完整路径。整体结构清晰,代码质量良好。

变更概览

  • apps/starry/k230-kpu-nncase/:新增 operator-facing K230 KPU demo,含 C++ NNCase compat shim(--wrap 链接拦截 open/mmap/ioctl/gnne_enable/mmz_alloc)、两个 guest demo(kpu-nncase-minimalk230-yolov8n-demo)、CMake 构建(源码构建和 prebuilt fallback 两条路径完全分离)、shell 脚本、构建/追踪工具、中英文文档。
  • components/axcpu/src/riscv/uspace.rs:在 Xuantie C9xx legacy VS bits 基础上,同时设置标准 RISC-V VS bit(bit 9)。K230 C908V QEMU 两者都需要,改动正确且范围最小。
  • test-suit/starryos/k230-qemu/:test-suit wrapper 通过 add_subdirectory 复用 app CMake,避免代码重复。两个 build-riscv64gc-unknown-none-elf.toml 都已补充必需的 env = {}

前序 review 处理

前序两轮 CHANGES_REQUESTED 中的 5 个问题(CMake prebuilt fallback、REL_WORKTREE 路径、env 字段、app runapp qemu)已在最新提交中全部修复,我逐一验证确认:

  1. ✅ CMake prebuilt fallback:SDK lib/toolchain 检查仅在 K230_BUILD_FROM_SOURCE 分支执行
  2. REL_WORKTREESTORAGE_ROOT == WORKTREE_ROOT 时设置空字符串
  3. env = {}:app 和 test-suit 两个文件均已补充
  4. ✅ 文档命令:K230 相关文档统一为 cargo xtask starry app qemu

本地验证

检查项 结果
cargo fmt --check ✅ PASS
Shell 脚本 bash -n(6 个) ✅ All PASS
python3 -m py_compile diff-kpu-trace.py ✅ PASS
git diff --check ✅ PASS
env 字段检查 ✅ 两个 toml 均有
app qemu 文档一致性 ✅ PASS
[patch.crates-io] 检查 ✅ 无 patch

CI 状态

CI workflow #26969202660 运行中。截至目前已完成的 job 全部 success(formatting、clippy、sync-lint、axvisor riscv64/aarch64/x86_64、self-hosted board tests),无失败。仍在运行的 job 为 QEMU 矩阵(arceos/starry x86_64/riscv64/loongarch64/aarch64),属于正常耗时。run_container 路径因 path-filter 均为 skipped,符合预期。

代码质量亮点

  • C++ compat shim 设计合理:通过 --wrap 链接选项拦截 SDK 调用,将虚拟 MMIO 窗口映射到 /dev/kpu,实现完整 SDK ABI 兼容
  • MMZ 分配器 bump-pointer 实现简洁,256 allocation 上限足够 demo 场景
  • FNV-1a 64 哈希输出 tensor 用于回归断言,比 raw diff 更实用
  • std::_Exit(0) 跳过 MMZ 析构避免 Starry/Linux ABI 下的断言崩溃——注释说明清楚
  • qemu-riscv64.toml 的 success/fail regex 设计完整,覆盖 panic、illegal instruction、各 demo FAIL 标记

重复/重叠分析

  • origin/dev 上有底层 kpu-smoke,无同等 kpu-nncase-runtime demo
  • #1046#1054 已合入 dev(底层 KPU driver 和 /dev/kpu),本 PR 不重复携带
  • 搜索 open PR 未发现覆盖同一功能域的并行 PR

结论

代码质量好、所有前序 review 问题已修复、本地验证全部通过、CI 已完成部分无失败、文档完整、无阻塞问题。建议合入。

Powered by mimo-v2.5-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本轮复审的是当前 head d969e5991c932c0c93677d698a06b466dc19a88df887241193c00b674bc94e41f923fa759029680b..d969e5991c932c0c93677d698a06b466dc19a88d 没有任何 tree diff,后续 3 个提交只是 CI rerun,因此重点确认当前 head、CI 和可复现检查仍然成立。

结论:当前没有新的阻塞问题,批准合入。

复核结果:

  • 旧的 CMake prebuilt fallback review thread 已保持 resolved/outdated,当前 CMake 只在 source build 分支检查 SDK NNCase static lib/toolchain,prebuilt 分支只要求本地 ignored guest binaries、model 和 image。
  • apps/starry/k230-kpu-nncase 仍作为 operator-facing app,test-suit/starryos/k230-qemu/.../kpu-nncase-runtime 只保留 CI/test wrapper,目录职责和当前 Starry app/test 规则一致。
  • qemu-riscv64.toml 使用稳定的 K230_NNCASE_RUNTIME_PASS 成功标记,并覆盖 panic、illegal instruction、各 demo FAIL 标记。
  • components/axcpu/src/riscv/uspace.rs 的 RISC-V 改动只是在 xuantie-c9xx 下同时设置标准 VS initial bit 和旧 XThead legacy VS bits,符合 K230 C908V QEMU 需要,同时保留旧兼容路径。

本地验证:

  • git diff --check origin/dev...HEAD 通过
  • cargo fmt --check 通过
  • cargo xtask clippy --package ax-cpu 通过,28/28 checks passed
  • cargo xtask starry app list 能发现 qemu k230-kpu-nncase prebuild
  • cargo xtask starry test qemu --test-group k230-qemu --arch riscv64 -l 能发现 bootkpu-nncase-runtimekpu-smoke
  • 6 个新增 shell 脚本 bash -n 通过,apps/starry/k230-kpu-nncase/c/tools/diff-kpu-trace.pypy_compile 通过
  • [patch.crates-io] 搜索无新增 patch

运行验证限制:本地仍没有 PR 所需的 out-of-tree K230 SDK/model/image、ignored guest binaries 和 target/qemu-k230-docker-build,所以没有重新跑完整 cargo xtask starry app qemu -t k230-kpu-nncase --arch riscv64。不过当前 head 与上次已批准的 tree 完全相同,PR 描述中已有本轮修复后的完整 K230 runtime 输出(NNCASE_MINIMAL_PASSYOLOV8N_DEMO_PASSK230_NNCASE_RUNTIME_PASS、54 次 gnne_enable DONE、非零 output hash),本轮复核覆盖了外部资产之外的可复现 app/test discovery、syntax、CMake 分支逻辑和 ax-cpu 代码路径。

CI:当前 run 26972457965d969e5991 已无失败;formatting、sync-lint、clippy、std、Starry QEMU、ArceOS/Axvisor QEMU 和 self-hosted board 相关 host jobs 均通过,互斥的 container/host sibling jobs 为预期 skipped。

重复/重叠检查:origin/dev 只有 K230 README 中“NNCase runtime 留到后续 PR”的说明,未包含同等 k230-kpu-nncase / kpu-nncase-runtime 实现;open PR 搜索 k230 nncasekpu-nncase-runtimegnne_enablek230-kpu-nncase 只命中本 PR,没有发现替代或冲突实现。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review 总结

PR: test(starryos): add K230 NNCase runtime demo
head: d969e5991 (12 commits)

本 PR 新增 K230 KPU/NNCase 端到端 runtime demo,将验证从底层 /dev/kpu smoke 推进到真实 .kmodel 加载、NNCase runtime command 生成、KPU 提交/等待/output hash 的完整路径。整体结构清晰,代码质量良好。

变更概览

  • apps/starry/k230-kpu-nncase/:新增 operator-facing K230 KPU demo,含 C++ NNCase compat shim(--wrap 链接拦截 open/mmap/ioctl/gnne_enable/mmz_alloc)、两个 guest demo、CMake 构建(源码构建和 prebuilt fallback 两条路径完全分离)、shell 脚本、中英文文档。
  • components/axcpu/src/riscv/uspace.rs:在 Xuantie C9xx legacy VS bits 基础上,同时设置标准 RISC-V VS bit(bit 9)。K230 C908V QEMU 两者都需要,改动正确且范围最小。
  • test-suit/starryos/k230-qemu/:test-suit wrapper 通过 add_subdirectory 复用 app CMake。两个 build-riscv64gc-unknown-none-elf.toml 都已补充必需的 env = {}

前序 review 处理

前序 CHANGES_REQUESTED 中的所有阻塞问题已在最新提交中全部修复:

  1. ✅ CMake prebuilt fallback:SDK lib/toolchain 检查仅在 source build 分支执行
  2. REL_WORKTREE 路径计算:STORAGE_ROOT == WORKTREE_ROOT 时设空
  3. env = {} 字段:两个 toml 均已补充
  4. ✅ 文档命令:K230 新增内容统一为 cargo xtask starry app qemu

本地验证

检查项 结果
Shell 脚本 bash -n(6 个) ✅ All PASS
py_compile diff-kpu-trace.py ✅ PASS
git diff --check ✅ PASS
env 字段检查 ✅ 两个 toml 均有
app qemu 文档一致性 ✅ PASS
[patch.crates-io] 检查 ✅ 无 patch

CI 状态

CI workflow run 26972457965:success=1, skipped=15, failure=0。skipped 为预期的 CI 矩阵互斥路径过滤行为。

重复/重叠分析

  • origin/dev 已有底层 K230 KPU driver(#1046)和 /dev/kpu#1054),本 PR 不重复
  • 无同等 kpu-nncase-runtime demo 在 base 或 open PR 中
  • 搜索 open PR 未发现覆盖同一功能域的并行 PR

结论

代码质量好、所有前序 review 问题已修复、本地验证通过、CI 无失败、无阻塞问题。建议合入。

Powered by mimo-v2.5-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查通过。

本 PR 为 StarryOS K230 QEMU 路径新增 NNCase runtime demo,包含完整的用户态 compat shim、两个 guest demo 程序、CMake 构建系统和 RISC-V 用户态 vector 状态初始化修正。代码结构清晰、分层合理,文档详尽且中英双语一致。Rust 变更正确设置了标准 RISC-V VS Initial 和旧 Xuantie C9xx legacy VS 位,feature 传播链路完整。

@Joshua912815
Joshua912815 requested a review from ZR233 June 5, 2026 01:52
@ZR233
ZR233 merged commit 5c112c0 into rcore-os:dev Jun 5, 2026
49 checks passed
This was referenced Jun 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants