Skip to content

feat(axvm): migrate to real Rust std - #1910

Merged
ZR233 merged 1 commit into
devfrom
codex/axvm-real-rust-std
Aug 6, 2026
Merged

feat(axvm): migrate to real Rust std#1910
ZR233 merged 1 commit into
devfrom
codex/axvm-real-rust-std

Conversation

@ZR233

@ZR233 ZR233 commented Aug 6, 2026

Copy link
Copy Markdown
Member

问题

AxVM 已通过 Axvisor 的 RustStd/musl 流程构建,但源码仍混用 corealloc、mini-std 同名接口以及底层同步和 OS 实现 crate。这使普通任务上下文与 IRQ/禁抢占路径的能力边界不清晰,也让 AxVM 重复选择底层依赖和 feature。

修改

  • 将 AxVM 明确调整为仅支持真实 Rust std 的 crate,删除 no_stdextern crate alloc,集合、内存对象、格式化、原子操作、线程、时间、MutexOnceLock 统一使用 std
  • 为任务上下文的标准 mutex 增加统一的 poison 恢复扩展;IVC、CPU_ON acknowledgement、deferred worker、固件暂存和生命周期状态迁移到标准 mutex。
  • 保留 VM/runtime 快照、中断队列、vCPU、timer wheel 和架构中断控制器等 IRQ/guest-entry 路径的非休眠锁。
  • ax_std::os::arceos 导出 IrqSafeMutexNoPreemptMutexRawSpinLock 及 guard、per-CPU 和 host-test 能力;AxVM 的 OS 专属访问统一经过该边界。
  • 删除 AxVM 对 spinax-kspinax-syncax-halax-kernel-guardax-percpuax-lazyinithashbrowncfg-if 等直接依赖。
  • 增加 Cargo metadata 依赖契约,以及四架构 Axvisor 必须映射到 RustStd/musl 并构建 std + panic_abort 的测试。
  • 更新中文 AxVM host/application 边界设计文档,说明 std-only 构建契约、锁上下文与 IRQ 禁止阻塞要求。

设计逻辑

普通任务上下文直接使用标准库能力,避免维护与 Rust std 同名的替代接口。只有 Rust 标准库无法表达的 ArceOS 特殊能力通过 ax_std::os::arceos 暴露,并以锁名明确 IRQ 和抢占语义。领域 crate 继续保持直接依赖,不被错误包装为标准库或 OS facade。

这是明确的构建兼容性变化:仅有 core/alloc 的外部 AxVM 构建方式不再受支持,正式构建依赖现有 Axvisor RustStd/musl 流程。

验证

  • cargo fmt --all
  • cargo 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-lint
  • cargo xtask spin-lint
  • x86_64、AArch64、RISC-V、LoongArch64 Axvisor RustStd 构建通过
  • x86_64 VMX、AArch64、RISC-V QEMU smoke 通过
  • LoongArch64 已启动到 Axvisor;当前 QEMU LA464 报告不支持硬件虚拟化,因此未完成 guest smoke,构建本身通过

@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.

本 PR 将 AxVM 明确迁移为依赖真实 Rust std 的实现:统一集合、原子、时间与任务上下文 mutex 的来源;将 IRQ/禁抢占路径保留为经 ax_std::os::arceos 暴露的具名非休眠锁;并为四种 Axvisor 架构固定 RustStd/musl + std,panic_abort 构建契约。

已按 code-quality.mdfeature-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 均为 3045a1f91ae10a071e488b5e2860f43a0a80f541cargo fmt --checkgit 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

@ZR233
ZR233 merged commit 518832d into dev Aug 6, 2026
145 of 149 checks passed
@ZR233
ZR233 deleted the codex/axvm-real-rust-std branch August 6, 2026 11:39
This was referenced Aug 6, 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.

1 participant