feat(starry): expose root block device /dev/vda + strengthen busybox applet tests#1213
Conversation
There was a problem hiding this comment.
审查结论:APPROVE ✅
改动概要
本 PR 在 pseudofs/dev 中新增占位块设备节点 /dev/vda(RootBlk 结构体),其 st_rdev == DeviceId::new(0, 1).0 == 1,与根文件系统挂载点的 st_dev(DEVICE_COUNTER 起始值 = 1)一致,从而让 busybox rdev 能够解析出 /dev/vda /。RootBlk::read_at/write_at 始终返回 EIO,确保不会伪装成可用磁盘。同时新增回归测例 syscall-test-rdev-vda(6 项断言:节点存在、S_ISBLK、rdev 匹配、read → EIO)。
实现逻辑评估
- DeviceId 计算正确:
DeviceId::new(0, 1)编码后的 raw value 为 1,恰好等于DEVICE_COUNTER起始值(第一个挂载点拿到 1),st_rdev == st_dev的断言成立。major=0/minor=1 在 Linux 惯例中属于 unnamed 设备号区间,不会与真实块设备冲突。 - 占位语义安全:
read_at/write_at返回AxError::Io(对应 Linux EIO),不会为dd/blkid/fsck静默冒充工作磁盘。与Null/Zero/Full同文件中的类似占位设备保持一致的模式。 - 代码风格:结构体、impl、builder 注册方式均与同文件中已有的
Null/Zero/Full/CpuDmaLatency等设备遵循相同模式,注释充分(中英文混合说明用途和限制)。 - 测试覆盖:C 测例覆盖了
/dev/vda存在性、S_ISBLK、st_rdev == st_dev、read → EIO四个关键语义,断言失败时打印文件名+行号+errno,便于定位。 - 无
[patch.crates-io]:本 PR 不涉及 Cargo.toml 或依赖元数据变更。 - test_framework.h:相比已有测例(如
syscall-test-getrandom)新增了中文注释和分区标题,逻辑完全一致,属于文档增强。
验证结果
| 检查项 | 结果 |
|---|---|
cargo fmt --check(本地) |
✅ PASS |
cargo clippy --manifest-path os/StarryOS/kernel/Cargo.toml --all-features -- -D warnings(本地) |
✅ PASS,0 warnings |
cargo test --manifest-path os/StarryOS/kernel/Cargo.toml --all-features(本地) |
_etbss/__percpu_start 等),非本 PR 引入,需 QEMU/board 测试 |
| CI: Check formatting / run_host | ✅ SUCCESS |
| CI: Run sync-lint / run_container | ✅ SUCCESS |
| CI: Test starry *_qemu / run_container(四架构) | 🔄 进行中(x86_64/aarch64/riscv64/loongarch64) |
CI 状态说明
- 格式化和 sync-lint 检查已通过。
- Starry QEMU 测试(
run_container矩阵)四架构正在执行中,截至提交时无失败。run_host矩阵因环境限制被跳过属正常。 - ArceOS/axvisor/board 等无关测试被路径过滤器跳过,属预期行为。
重复与重叠分析
- base 分支检查:
origin/dev中pseudofs/dev/mod.rs无rdev/RootBlk/vda相关代码,无重复。 - 相关 open PR 搜索:搜索
rdev vda RootBlk、pseudofs dev等关键词,仅命中本 PR #1213。PR #1114(pseudofs 其他文件)和 #1156(cgroupfs)与本 PR 无重叠。 - 结论:本 PR 是独立的增量功能,不与任何 open PR 冲突或重复。
遗留问题
无阻塞性问题。Starry QEMU CI 正在运行,但从代码审查、格式化、clippy 和作者本地四架构验证来看,合并风险较低。
建议:如果希望后续增强,可考虑在 /dev 下同时暴露 /dev/root 符号链接(部分 Linux 发行版惯例),但这不是本 PR 的范围。
Powered by deepseek-v4-pro
There was a problem hiding this comment.
审查结论:APPROVE ✅
本审阅基于对 PR #1213 的独立代码审查,覆盖实现逻辑、测试覆盖、本地验证和 CI 状态。
改动概要
本 PR 在 pseudofs/dev 中新增占位块设备节点 /dev/vda(通过 RootBlk 结构体实现),其 st_rdev 与根文件系统的 st_dev 一致(均为 DeviceId::new(0, 1).0 == 1),使得 busybox rdev 能正确解析出根设备 /dev/vda /。同时新增回归测例 syscall-test-rdev-vda,覆盖 6 项断言:节点存在、S_ISBLK 类型检查、st_rdev == st_dev 匹配、以及 read 返回 EIO(确保不会伪装成可用磁盘)。
共修改 4 个文件,184 行新增,0 行删除。
实现逻辑评估
- DeviceId 计算正确:
DeviceId::new(0, 1)编码后的 raw value 为 1,而DEVICE_COUNTER起始值为 1(AtomicU64::new(1)),第一个挂载点通过fetch_add(1)取得值 1。因此st_rdev == st_dev断言成立。major=0 / minor=1 属于 Linux 惯例中的 unnamed 设备号区间,不会与真实块设备冲突。 - 占位语义安全:
read_at/write_at返回AxError::Io(对应 LinuxEIO),不会为dd/blkid/fsck静默冒充工作磁盘。与同文件中的Null/Zero/Full等占位设备模式一致。 - 代码风格:
RootBlk结构体、DeviceOps实现、builder()注册方式均与已有模式完全一致,注释充分(中英文混合说明用途和限制)。 - 测试覆盖:C 测例
main.c使用CHECK宏覆盖了四个关键语义,断言失败时打印文件名+行号+errno,便于定位。test_framework.h与common/test_framework.h内容一致,遵循现有每个测试自持副本的模式。
验证结果
| 检查项 | 结果 |
|---|---|
cargo fmt --check(本地) |
✅ PASS |
cargo clippy --manifest-path os/StarryOS/kernel/Cargo.toml --all-features -- -D warnings(本地) |
✅ PASS,0 warnings |
| CI: Check formatting / run_host | ✅ SUCCESS |
| CI: Run sync-lint / run_container | ✅ SUCCESS |
| CI: Test starry *_qemu / run_container(四架构) | 🔄 进行中(截至提交时无失败) |
CI 状态说明
- 格式化和 sync-lint 已通过。
- Starry QEMU
run_container四架构(x86_64 / aarch64 / riscv64 / loongarch64)正在执行中。run_host矩阵因运行环境限制被跳过属正常。PR 作者已报告四架构单核 QEMU 全系统组均STARRY_GROUPED_TESTS_PASSED。 - ArceOS / axvisor / board 等无关测试被路径过滤器跳过,属预期行为。
重复与重叠分析
- base 分支检查:
origin/dev中pseudofs/dev/mod.rs无RootBlk/vda/rdev相关代码,无重复。 - 结论:本 PR 是独立的增量功能,不与任何 open PR 冲突或重复。
现有评审
此前 mai-team-app[bot] 已提交 APPROVE 评审,该评审结论合理,无遗留阻塞性问题。
遗留问题
无阻塞性问题。代码质量、安全性、测试覆盖均满足合并标准。
补充建议(非阻塞):后续可考虑在 /dev 下同时暴露 /dev/root 符号链接(部分 Linux 发行版惯例),但这不是本 PR 的范围。
Powered by deepseek-v4-pro
|
已 force-push:把原 rdev commit 与一个空的 CI 重触发 commit 合并为单 commit,并补入我们负责的六个 busybox applet(resize / remove-shell / rdev / setlogcons / killall5 / fdflush)的真实行为 sh 测例强化( 本地实测:aarch64 / riscv64 / loongarch64 busybox app-qemu 各 |
There was a problem hiding this comment.
审查结论:APPROVE ✅
本审阅基于对 PR #1213 当前 head (54e44ba) 的独立代码审查。此前 mai-team-app[bot] 已对旧 head (d3b915c) 提交了两份 APPROVE 评审;当前 head 在原有内核 feature 基础上新增了 C 回归测例和六个 busybox applet 的 sh 测例强化,经审查无阻塞性问题。
改动概要
本 PR 包含两部分:
内核层面 — 在 pseudofs/dev 中新增占位块设备节点 /dev/vda(RootBlk 结构体),其 st_rdev == DeviceId::new(0, 1).0 == 1,与根文件系统挂载点的 st_dev(DEVICE_COUNTER 起始值 = 1)一致,使 busybox rdev 能解析出 /dev/vda /。RootBlk::read_at/write_at 始终返回 EIO,确保不会伪装成可用磁盘。
测例层面 — 新增内核回归测例 syscall-test-rdev-vda(6 项断言:节点存在、S_ISBLK、rdev 匹配、read → EIO),并强化 busybox-tests.sh 中六个 applet 的 sh 测例(rdev / fdflush / killall5 / setlogcons / resize / remove-shell),从弱断言(rc≠124 或 -h usage)升级为真实行为验证。
共修改 5 个文件,+242 / −13 行。
实现逻辑评估
- DeviceId 计算正确:
DeviceId::new(0, 1)编码后的 raw value 为 1,恰好等于DEVICE_COUNTER起始值(第一个挂载点通过fetch_add(1)取得 1),st_rdev == st_dev断言成立。major=0 / minor=1 属于 Linux 惯例中的 unnamed 设备号区间,不会与真实块设备冲突。 - 占位语义安全:
read_at/write_at返回AxError::Io(对应 LinuxEIO),不会为dd/blkid/fsck静默冒充工作磁盘。与同文件中的Null/Zero/Full/CpuDmaLatency等占位设备模式完全一致。 - 代码风格:
RootBlk结构体、DeviceOpsimpl、builder()注册方式均与已有模式保持一致,中英文注释充分说明用途和限制。 - 测试覆盖:C 测例
syscall-test-rdev-vda使用CHECK宏覆盖了四个关键语义(节点存在、S_ISBLK、rdev 匹配、EIO),test_framework.h遵循项目现有模式(每测例自持副本),并额外提供了CHECK_RET/CHECK_ERR宏。 - busybox sh 测例:六个 applet 测例从弱断言升级为真实行为验证,新增
remove-shell测例。fdflush/killall5/setlogcons/resize均增加了"applet not found"拒绝逻辑,防止未注册 applet 靠裸非零退出蒙混。resize的双分支判定(完整 trailer 或干净非零退出)具备正向兼容性。 - 无
[patch.crates-io]:本 PR 不涉及 Cargo.toml 或依赖元数据变更。
验证结果
| 检查项 | 结果 |
|---|---|
cargo fmt --check(本地) |
✅ PASS |
cargo clippy --manifest-path os/StarryOS/kernel/Cargo.toml --all-features -- -D warnings(本地) |
✅ PASS,0 warnings |
[patch.crates-io] 检查 |
✅ 无 |
| CI: Check formatting / run_host | ✅ SUCCESS |
| CI: Run sync-lint / run_container | ✅ SUCCESS |
| CI: Test starry *_qemu / run_container(四架构) | 🔄 进行中(x86_64 / aarch64 / riscv64 / loongarch64) |
CI 状态说明
- 格式化和 sync-lint 已通过。
- Starry QEMU
run_container四架构(x86_64 / aarch64 / riscv64 / loongarch64)正在执行中。run_host矩阵因环境限制被跳过属正常。PR 作者已报告四架构单核 QEMU 全系统组均STARRY_GROUPED_TESTS_PASSED,且syscall-test-rdev-vda各 6/6 PASS。 - ArceOS / axvisor / board 等无关测试被路径过滤器跳过,属预期行为。
重复与重叠分析
- base 分支检查:
origin/dev中pseudofs/dev/mod.rs无RootBlk/vda/rdev相关代码;test-suit/starryos/qemu-smp1/system/无syscall-test-rdev-vda目录;busybox sh 测例中对应 applet 为旧弱版本,本 PR 强化之并新增remove-shell。无重复。 - 相关 open PR 检查:搜索
pseudofs/dev、rdev、busybox-tests.sh等关键词,当前 open PR 中无触及相同文件或相同功能的 PR。PR 作者确认pseudofs/dev无其它 open PR 触及。 - 结论:本 PR 是独立的增量功能,不与任何 open PR 冲突或重复。
测试发现验证
- 新增测例
syscall-test-rdev-vda位于test-suit/starryos/qemu-smp1/system/下,父CMakeLists.txt使用file(GLOB ... CONFIGURE_DEPENDS "*")自动发现子目录。测例目录含有效CMakeLists.txt,install(TARGETS test-rdev-vda RUNTIME DESTINATION usr/bin/starry-test-suit)安装至正确路径。 - QEMU 测试 wrapper(
qemu-*.toml中的test_commands)对/usr/bin/starry-test-suit/*做通配执行,新二进制自动被覆盖。success_regex/fail_regex正确配置,STARRY_GROUPED_TESTS_PASSED/STARRY_GROUPED_TEST_FAILED标记完备。
遗留问题
无阻塞性问题。
建议(非阻塞):后续可考虑在 /dev 下同时暴露 /dev/root 符号链接(部分 Linux 发行版惯例),但这不是本 PR 的范围。
Powered by deepseek-v4-pro
There was a problem hiding this comment.
审查结论:APPROVE ✅
本审阅基于对 PR #1213 当前 head (8a3089f) 的独立代码审查。此前 mai-team-app[bot] 已对旧 head 提交了三份 APPROVE 评审,结论合理。当前 head 无阻塞性问题。
改动概要
本 PR 包含两部分:
内核层面 — 在 pseudofs/dev 中新增占位块设备节点 /dev/vda(RootBlk 结构体),其 st_rdev == DeviceId::new(0, 1).0 == 1,与根文件系统挂载点的 st_dev(DEVICE_COUNTER 起始值 = 1)一致,使 busybox rdev 能解析出 /dev/vda /。RootBlk::read_at/write_at 始终返回 EIO,确保不会伪装成可用磁盘。
测例层面 — 新增内核回归测例 syscall-test-rdev-vda(6 项断言:节点存在、S_ISBLK、rdev 匹配、read → EIO),并强化 busybox-tests.sh 中六个 applet 的 sh 测例(rdev / fdflush / killall5 / setlogcons / resize / remove-shell),从弱断言升级为真实行为验证。
共修改 5 个文件,+242 / −13 行。
实现逻辑评估
- DeviceId 计算正确:
DeviceId::new(0, 1)编码后的 raw value 为 1(major=0 → 0,minor=1 → 1),恰好等于DEVICE_COUNTER起始值(AtomicU64::new(1)),第一个挂载点通过fetch_add(1)取得值 1。因此st_rdev == st_dev断言成立。major=0 / minor=1 属于 Linux 惯例中的 unnamed 设备号区间,不会与真实块设备冲突。 - 占位语义安全:
read_at/write_at返回AxError::Io(对应 LinuxEIO),不会为dd/blkid/fsck静默冒充工作磁盘。与同文件中的Null/Zero/Full/CpuDmaLatency等占位设备模式完全一致。 - 代码风格:
RootBlk结构体、DeviceOpsimpl、builder()注册方式均与已有模式保持一致,中英文注释充分说明用途和限制。 - 测试覆盖:C 测例
syscall-test-rdev-vda使用CHECK宏覆盖了四个关键语义,test_framework.h遵循项目现有模式(每测例自持副本),并额外提供了CHECK_RET/CHECK_ERR宏。CMakeLists.txt安装路径正确(usr/bin/starry-test-suit),父目录的file(GLOB ... CONFIGURE_DEPENDS "*")自动发现子目录。 - busybox sh 测例:六个 applet 测例从弱断言升级为真实行为验证,新增
remove-shell测例。所有测例均增加了"applet not found"拒绝逻辑,防止未注册 applet 靠裸非零退出蒙混。resize的双分支判定(完整 trailer 或干净非零退出)具备正向兼容性。 - 无
[patch.crates-io]:本 PR 不涉及 Cargo.toml 或依赖元数据变更。
验证结果
| 检查项 | 结果 |
|---|---|
cargo fmt --check(本地) |
✅ PASS |
cargo clippy --manifest-path os/StarryOS/kernel/Cargo.toml --all-features -- -D warnings(本地) |
✅ PASS,0 warnings |
[patch.crates-io] 检查 |
✅ 无 |
| CI: Check formatting / run_host | ✅ SUCCESS(前次 head) |
| CI: Run sync-lint / run_container | ✅ SUCCESS(前次 head) |
| CI(当前 head) | 🔄 进行中(刚 push,Detect changed paths 运行中) |
CI 状态说明
- 当前 head 的 CI 刚启动(push 时间 17:59),Detect changed paths 正在运行。
- 此前 head (
d3b915c和54e44ba) 的格式化、sync-lint 均通过,Starry QEMU 四架构测试正在进行。 - PR 作者已报告四架构单核 QEMU 全系统组均
STARRY_GROUPED_TESTS_PASSED,syscall-test-rdev-vda各 6/6 PASS,busybox app-qemu 三架构PASS: 320 FAIL: 0。
重复与重叠分析
- base 分支检查:
origin/dev中pseudofs/dev/mod.rs无RootBlk/vda相关代码;test-suit/starryos/qemu-smp1/system/无syscall-test-rdev-vda目录;busybox sh 测例中对应 applet 为旧弱版本。无重复。 - 相关 open PR 检查:搜索
pseudofs/busybox-tests等关键词。#1114(pseudofs osrelease/ostype 等,同作者但不同文件)与本 PR 无重叠;#1156(cgroupfs)无重叠。 - 结论:本 PR 是独立的增量功能,不与任何 open PR 冲突或重复。
遗留问题
无阻塞性问题。代码质量、安全性、测试覆盖均满足合并标准。
建议(非阻塞):后续可考虑在 /dev 下同时暴露 /dev/root 符号链接(部分 Linux 发行版惯例),但这不是本 PR 的范围。
Powered by deepseek-v4-pro
…applet tests This is the busybox unit for the six applets we own (resize · remove-shell · rdev · setlogcons · killall5 · fdflush): one kernel feature (rdev's root block node) plus real-behavior regression tests for all six. ## Kernel: /dev/vda root block device (for busybox rdev) busybox `rdev` (reports the device mounted at `/`) stats `"/"`, takes its `st_dev`, then scans `/dev` for a block node whose `st_rdev` matches and prints `<node> /`. starry has no real block backend for the root mount, so `/dev` had no such node and `rdev` resolved nothing. Expose a placeholder block node `/dev/vda` whose `rdev` equals the root filesystem's `st_dev` (the root mount is the first mount, device id 1 = `DeviceId::new(0, 1)`), so `rdev` resolves `/dev/vda /`. It is a **resolver placeholder, not a usable disk**: `RootBlk`'s `read_at`/`write_at` return `EIO` rather than silently succeeding, so it never masquerades as a working disk for `dd`/`blkid`/`fsck`. Kernel-side regression (test-suit/starryos/qemu-smp1/system/syscall-test-rdev-vda): `stat "/"`; `/dev/vda` exists and is `S_ISBLK`; `/dev/vda` `st_rdev ==` root `st_dev` (busybox rdev's resolution premise); `open` then `read` returns `EIO` (placeholder, no fake disk I/O). x86_64 / aarch64 / riscv64 / loongarch64 each 6/6 PASS. ## App: strengthen the six busybox applet sh tests apps/starry/qemu/busybox/sh/busybox-tests.sh carried weak smoke tests (bare `rc != 124` or `-h` usage) for our applets. Replace them with carpet-coverage real-behavior cases — every invocation form / option / edge per applet — and add the missing `remove-shell`. The app-qemu busybox harness aborts on the first `^FAIL:`, so every case must pass; assertions stay tolerant where StarryOS lacks a kernel feature (forward-compatible) while still rejecting stubs / "applet not found". 15 cases across the six applets: - **rdev**: require exactly one `^/dev/<no-space> /$` line (with /dev/vda above, prints `/dev/vda /`) — was `rc != 124`. - **fdflush** (×3): missing device → file/ioctl diagnostic; no-operand → usage error (it requires DEVICE); `/dev/null` → FDFLUSH ioctl error on a non-floppy. All reject "applet not found". - **killall5**: reject "applet not found"; the real SIGSTOP/SIGCONT job control it relies on is covered safely (forked child, no effect on this suite) by the dedicated test-job-control-stop case — running a session-wide SIGSTOP inside this suite would risk stopping the test harness itself. - **setlogcons** (×3): real TIOCLINUX for `setlogcons 0`, no-arg (default 0), and console 1; accept rc=0 or a `/dev/tty0`/console diagnostic; reject "applet not found". - **resize** (×3): the size probe (accept the full `COLUMNS=;LINES=;export` trailer OR a clean non-zero exit — the stdio console does not yet honor the TCSETS raw-mode ioctl, so the cursor probe can't complete; forward-compatible once it does), applet-registered, and redirected-stdin (stays bounded). Reject silent exit-0 stub / "applet not found". - **remove-shell** (×4, new): single remove, multi-remove (survivors kept), remove-absent (no-op, file intact), and no-arg (no-op rc=0 leaving the file intact, or usage error) — real `/etc/shells` edits, not `-h`. Verified: aarch64 / riscv64 / loongarch64 busybox app-qemu each `PASS: 329 FAIL: 0` (SUCCESS PATTERN MATCHED), all applet cases PASS; x86_64 via CI (local x86 app-qemu is blocked by the PVH ELF-note loader). > 把困困投入生产后更名 `智慧集群`(Smart Cluster) Signed-off-by: Smart Agents Cluster <haxxorbunny@qq.com> Signed-off-by: 林晨 (Leo Cheng) <chengkelfan@qq.com>
There was a problem hiding this comment.
审查结论:APPROVE ✅
本审阅基于对 PR #1213 当前 head (2873ecdb) 的独立代码审查。此前 mai-team-app[bot] 已提交四份 APPROVE 评审,结论合理。经独立审查,无阻塞性问题。
改动概要
本 PR 包含两部分:
内核层面 — 在 pseudofs/dev 中新增占位块设备节点 /dev/vda(RootBlk 结构体),其 st_rdev 与根文件系统挂载点的 st_dev 一致(均为 1),使 busybox rdev 能解析出 /dev/vda /。RootBlk::read_at/write_at 始终返回 EIO,确保不会伪装成可用磁盘。
测例层面 — 新增内核回归测例 syscall-test-rdev-vda(6 项断言:节点存在、S_ISBLK、rdev 匹配、open 成功、read → EIO),并强化 busybox-tests.sh 中六个 applet 的 sh 测例(rdev / fdflush / killall5 / setlogcons / resize / remove-shell),从弱断言(rc≠124 或 -h usage)升级为真实行为验证。
共修改 5 个文件,+343 / −13 行。
实现逻辑评估
- DeviceId 计算正确:
DeviceId::new(0, 1)编码后的 raw value 为 1(major=0 →(0 & 0xffff_f000) << 32 | (0 & 0x0000_0fff) << 8 = 0,minor=1 →(1 & 0xffff_ff00) << 12 | (1 & 0x0000_00ff) = 1)。DEVICE_COUNTER起始值为 1(AtomicU64::new(1)),第一个挂载点(根挂载)通过fetch_add(1)取得值 1。因此st_rdev == st_dev断言成立。major=0 / minor=1 属于 Linux 惯例中的 unnamed 设备号区间,不会与真实块设备冲突。 - 占位语义安全:
read_at/write_at返回AxError::Io(对应 LinuxEIO),不会为dd/blkid/fsck静默冒充工作磁盘。与同文件中的Null/Zero/Full/CpuDmaLatency等占位设备模式完全一致。 - 代码风格:
RootBlk结构体、DeviceOpsimpl、builder()注册方式均与已有模式保持一致。中英文注释充分说明用途和限制。 - 测试覆盖:C 测例
syscall-test-rdev-vda使用CHECK宏覆盖了四个关键语义,test_framework.h遵循项目现有模式(每测例自持副本),并额外提供了CHECK_RET/CHECK_ERR宏供未来测例使用。CMakeLists.txt安装路径正确(usr/bin/starry-test-suit),父目录的file(GLOB ... CONFIGURE_DEPENDS "*")自动发现子目录,QEMU wrapper 的test_commands对/usr/bin/starry-test-suit/*通配执行,新二进制自动被覆盖。 - busybox sh 测例:六个 applet 测例从弱断言升级为真实行为验证,新增
remove-shell测例及其子变体(multi / absent / noarg)。所有测例均增加了"applet not found"拒绝逻辑,防止未注册 applet 靠裸非零退出蒙混。resize的双分支判定(完整 trailer 或干净非零退出)具备正向兼容性——控制台一旦支持 TCSETS 即走完整 trailer 路径。 - 无
[patch.crates-io]:本 PR 不涉及Cargo.toml或依赖元数据变更,rg '\[patch\.crates-io\]' -g 'Cargo.toml'零匹配。
验证结果
| 检查项 | 结果 |
|---|---|
cargo fmt --check(本地) |
✅ PASS |
cargo clippy --manifest-path os/StarryOS/kernel/Cargo.toml --all-features -- -D warnings(本地) |
✅ PASS,0 warnings |
[patch.crates-io] 检查 |
✅ 无 |
| CI: Detect changed paths | ✅ SUCCESS |
| CI: Cancel stale CI runs | ✅ SUCCESS |
| CI: Check formatting / run_host | ✅ SUCCESS |
| CI: Run sync-lint / run_container | 🔄 IN_PROGRESS(截至提交时) |
CI 状态说明
- 格式化检查已通过(
run_host)。 sync-lint / run_container正在执行中。格式化通过、clippy 本地 0 warning 表明 Rust 侧无 lint 问题。- ArceOS / axvisor / board 等无关测试因路径过滤器跳过(
skipped),属预期行为。Publish 类 job 因非主分支跳过,也属预期。 - PR 作者已报告四架构单核 QEMU 全系统组均
STARRY_GROUPED_TESTS_PASSED,syscall-test-rdev-vda各 6/6 PASS,busybox app-qemu 三架构PASS: 320 FAIL: 0。
重复与重叠分析
- base 分支检查:
git grep -n 'RootBlk\|rdev_vda' origin/dev在os/StarryOS/kernel/src/pseudofs/dev/和test-suit/零匹配。base 分支无重复实现。 - 相关 open PR 搜索:以
pseudofs/busybox-tests/rdev/RootBlk搜索 open PR,仅命中本 PR #1213。同作者 PR #1114(pseudofs osrelease/ostype,不同文件)无重叠;#1156(cgroupfs)、#1211(pip-uv app test)均无关。 - 结论:本 PR 是独立的增量功能,不与任何 open PR 冲突或重复。
现有评审
此前 mai-team-app[bot] 已提交四份 APPROVE 评审(针对旧 head d3b915c、54e44ba、8a3089f),均无遗留阻塞性问题,无未解决的 review 对话线程。
遗留问题
无阻塞性问题。代码质量、安全性、测试覆盖均满足合并标准。
建议(非阻塞):后续可考虑在 /dev 下同时暴露 /dev/root 符号链接(部分 Linux 发行版惯例),但这不是本 PR 的范围。
Powered by deepseek-v4-pro
…applet tests (#1213) This is the busybox unit for the six applets we own (resize · remove-shell · rdev · setlogcons · killall5 · fdflush): one kernel feature (rdev's root block node) plus real-behavior regression tests for all six. ## Kernel: /dev/vda root block device (for busybox rdev) busybox `rdev` (reports the device mounted at `/`) stats `"/"`, takes its `st_dev`, then scans `/dev` for a block node whose `st_rdev` matches and prints `<node> /`. starry has no real block backend for the root mount, so `/dev` had no such node and `rdev` resolved nothing. Expose a placeholder block node `/dev/vda` whose `rdev` equals the root filesystem's `st_dev` (the root mount is the first mount, device id 1 = `DeviceId::new(0, 1)`), so `rdev` resolves `/dev/vda /`. It is a **resolver placeholder, not a usable disk**: `RootBlk`'s `read_at`/`write_at` return `EIO` rather than silently succeeding, so it never masquerades as a working disk for `dd`/`blkid`/`fsck`. Kernel-side regression (test-suit/starryos/qemu-smp1/system/syscall-test-rdev-vda): `stat "/"`; `/dev/vda` exists and is `S_ISBLK`; `/dev/vda` `st_rdev ==` root `st_dev` (busybox rdev's resolution premise); `open` then `read` returns `EIO` (placeholder, no fake disk I/O). x86_64 / aarch64 / riscv64 / loongarch64 each 6/6 PASS. ## App: strengthen the six busybox applet sh tests apps/starry/qemu/busybox/sh/busybox-tests.sh carried weak smoke tests (bare `rc != 124` or `-h` usage) for our applets. Replace them with carpet-coverage real-behavior cases — every invocation form / option / edge per applet — and add the missing `remove-shell`. The app-qemu busybox harness aborts on the first `^FAIL:`, so every case must pass; assertions stay tolerant where StarryOS lacks a kernel feature (forward-compatible) while still rejecting stubs / "applet not found". 15 cases across the six applets: - **rdev**: require exactly one `^/dev/<no-space> /$` line (with /dev/vda above, prints `/dev/vda /`) — was `rc != 124`. - **fdflush** (×3): missing device → file/ioctl diagnostic; no-operand → usage error (it requires DEVICE); `/dev/null` → FDFLUSH ioctl error on a non-floppy. All reject "applet not found". - **killall5**: reject "applet not found"; the real SIGSTOP/SIGCONT job control it relies on is covered safely (forked child, no effect on this suite) by the dedicated test-job-control-stop case — running a session-wide SIGSTOP inside this suite would risk stopping the test harness itself. - **setlogcons** (×3): real TIOCLINUX for `setlogcons 0`, no-arg (default 0), and console 1; accept rc=0 or a `/dev/tty0`/console diagnostic; reject "applet not found". - **resize** (×3): the size probe (accept the full `COLUMNS=;LINES=;export` trailer OR a clean non-zero exit — the stdio console does not yet honor the TCSETS raw-mode ioctl, so the cursor probe can't complete; forward-compatible once it does), applet-registered, and redirected-stdin (stays bounded). Reject silent exit-0 stub / "applet not found". - **remove-shell** (×4, new): single remove, multi-remove (survivors kept), remove-absent (no-op, file intact), and no-arg (no-op rc=0 leaving the file intact, or usage error) — real `/etc/shells` edits, not `-h`. Verified: aarch64 / riscv64 / loongarch64 busybox app-qemu each `PASS: 329 FAIL: 0` (SUCCESS PATTERN MATCHED), all applet cases PASS; x86_64 via CI (local x86 app-qemu is blocked by the PVH ELF-note loader). > 把困困投入生产后更名 `智慧集群`(Smart Cluster) Signed-off-by: Smart Agents Cluster <haxxorbunny@qq.com> Signed-off-by: 林晨 (Leo Cheng) <chengkelfan@qq.com> Co-authored-by: Smart Agents Cluster <haxxorbunny@qq.com>
本 PR 是我们负责的 busybox 六个 applet(
resize·remove-shell·rdev·setlogcons·killall5·fdflush)的 busybox 单元:一处内核 feature(rdev 的根块设备节点)+ 六个 applet 的真实行为回归测。内核:
/dev/vda根块设备节点(给 busybox rdev)busybox
rdev(报告挂载于/的设备)stat"/"取st_dev,再扫/dev找一个st_rdev与之相等的块设备节点,打印<node> /。starry 没有根挂载的真实块设备后端,此前/dev下无这样的块节点,rdev解析不到根设备。pseudofs/dev暴露占位块设备节点/dev/vda,其rdev等于根文件系统st_dev(根挂载是第一个 mount,设备 id 为 1 =DeviceId::new(0, 1)),于是rdev解析出/dev/vda /。这是解析用占位符,非可用磁盘:RootBlk::{read_at,write_at}返回EIO而非静默成功,绝不为dd/blkid/fsck伪装成工作磁盘。内核回归(
test-suit/starryos/qemu-smp1/system/syscall-test-rdev-vda):stat "/";/dev/vda存在且S_ISBLK;/dev/vda的st_rdev ==根st_dev(busybox rdev 解析前提);open后read返回EIO(占位、无伪盘 I/O)。x86_64 / aarch64 / riscv64 / loongarch64 各 6/6 PASS。应用:强化六个 busybox applet 的 sh 测例
apps/starry/qemu/busybox/sh/busybox-tests.sh此前对这些 applet 是弱测(裸rc≠124或-husage)。改为真实行为断言,并补上缺失的remove-shell。busybox app-qemu harness 命中首个^FAIL:即整体失败,故六条必须全绿:^/dev/<无空格> /$(配合上面的 /dev/vda,实打印/dev/vda /)——原为rc≠124。test-job-control-stop(fork 子进程、不影响本套件)安全覆盖——在本套件内跑会话级 SIGSTOP 会有停掉测试 harness 自身的风险。setlogcons 0(非-h);接受 rc=0 或/dev/tty0打开失败回退;拒绝 "applet not found"。COLUMNS=;LINES=;export COLUMNS LINES;尾 要么 干净的非零退出。busybox-shell 的 stdio 控制台暂不支持 TCSETS raw-mode ioctl,故 resize 无法完成光标探测、在打印尾之前退出;该测例正向兼容(控制台一旦支持 TCSETS 即走打尾分支),同时仍拒绝静默 exit-0 stub 与被丢弃的 applet。(控制台 TCSETS 路由根因已记录,留待与 tty 子系统协调后单独修。)/etc/shells两行,移除其一,要求被删的没了、留的还在——真实文件编辑,非-h。验证
aarch64 / riscv64 / loongarch64 busybox app-qemu 各
PASS: 320 FAIL: 0(SUCCESS PATTERN MATCHED),六条 applet 测全部 PASS;x86_64 经 CI(本地 x86 app-qemu 受 PVH ELF-note 加载器阻挡;rdev 的内核 C 测已四架构含 x86,其余五个 applet 为架构无关的 busybox 行为)。conflict-free(基于当前 dev,pseudofs/dev无其它 open PR 触及)。