feat(axvm): migrate to real Rust std - #1910
Conversation
There was a problem hiding this comment.
本 PR 将 AxVM 明确迁移为依赖真实 Rust std 的实现:统一集合、原子、时间与任务上下文 mutex 的来源;将 IRQ/禁抢占路径保留为经 ax_std::os::arceos 暴露的具名非休眠锁;并为四种 Axvisor 架构固定 RustStd/musl + std,panic_abort 构建契约。
已按 code-quality.md 与 feature-development.md 审查。本变更属于共享 AxVM/跨架构构建能力扩展,按设计文档作为高风险边界变更处理;文档已说明 std-only 兼容性变化、锁上下文和 IRQ 路径不得阻塞。实现将 OS 专属能力收束在 ax_std::os::arceos,任务上下文的标准 mutex 均使用 poison 恢复;IRQ、guest-entry 和 timer 路径仍使用 IrqSafeMutex/RawSpinLock,未发现可证实的锁语义、IRQ、资源所有权或 ABI 回归。
测试覆盖:新增 axbuild metadata 测试验证 x86_64、AArch64、RISC-V、LoongArch64 均映射到对应 RustStd/musl target、构建 std + panic_abort,并验证 AxVM 不再直接依赖底层实现 crate。未新增应用或 QEMU case,故无单独 app 运行项;这不是 syscall/Linux ABI 语义改动,starry/syscall.md 不适用。
验证结果:review_pr_helper prepare-review 确认工作区和当前 head 均为 3045a1f91ae10a071e488b5e2860f43a0a80f541;cargo fmt --check、git diff --check origin/dev...HEAD 通过。目标组织该 exact head 的 CI 为 success=37、skipped=40、cancelled=4、failure=0,相关格式、sync-lint、spin-lint、AxVM/Axvisor 构建与 smoke 已通过;依审查要求未重复运行昂贵的本地全量 clippy/test。未发现 [patch.crates-io]。
已检查历史 review 与讨论,均为空。重复/重叠分析表明 #1909 仅在 AxVM runtime vCPU affinity 处有互补改动,#1912 为 guest console multiplexing,#1716 为 host-test linker script,均不重复本 PR 的 std/依赖边界与构建契约。审查清单已完成,无待处理的阻塞项或测试缺口。
Powered by gpt-5.6-terra
问题
AxVM 已通过 Axvisor 的 RustStd/musl 流程构建,但源码仍混用
core、alloc、mini-std 同名接口以及底层同步和 OS 实现 crate。这使普通任务上下文与 IRQ/禁抢占路径的能力边界不清晰,也让 AxVM 重复选择底层依赖和 feature。修改
std的 crate,删除no_std和extern crate alloc,集合、内存对象、格式化、原子操作、线程、时间、Mutex与OnceLock统一使用std。ax_std::os::arceos导出IrqSafeMutex、NoPreemptMutex、RawSpinLock及 guard、per-CPU 和 host-test 能力;AxVM 的 OS 专属访问统一经过该边界。spin、ax-kspin、ax-sync、ax-hal、ax-kernel-guard、ax-percpu、ax-lazyinit、hashbrown和cfg-if等直接依赖。std + panic_abort的测试。设计逻辑
普通任务上下文直接使用标准库能力,避免维护与 Rust
std同名的替代接口。只有 Rust 标准库无法表达的 ArceOS 特殊能力通过ax_std::os::arceos暴露,并以锁名明确 IRQ 和抢占语义。领域 crate 继续保持直接依赖,不被错误包装为标准库或 OS facade。这是明确的构建兼容性变化:仅有
core/alloc的外部 AxVM 构建方式不再受支持,正式构建依赖现有 Axvisor RustStd/musl 流程。验证
cargo fmt --allcargo test -p axvm --features host-test:239 项通过cargo xtask clippy --package ax-std:44/44 组合通过cargo xtask clippy --package axvm:6/6 组合通过cargo xtask test:47 个 std package 全部通过cargo xtask sync-lintcargo xtask spin-lint