Skip to content

Remove ax-feat crate and redistribute features across runtime, API, and user library layers#1513

Merged
ZR233 merged 9 commits into
devfrom
feature
Jul 7, 2026
Merged

Remove ax-feat crate and redistribute features across runtime, API, and user library layers#1513
ZR233 merged 9 commits into
devfrom
feature

Conversation

@ZCShou

@ZCShou ZCShou commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

ArceOS Feature 归属重设计:消除聚合层,按职责分层

目标

重新建立 ArceOS feature 的职责层级,使 feature 关系直接、简单、可审计。最终状态应满足:

  • 每个 feature 只由最贴近真实职责的 crate 拥有。
  • API 暴露层只控制公开 API 是否暴露。
  • Runtime crate 只控制系统装配和启动初始化。
  • 用户库接口层只控制应用侧用户库接口能力。
  • StarryOS、Axvisor 等上层系统直接组合所需底层能力,不再通过聚合层转发。

范围边界

本方案为 breaking change。以下行为属于本次范围:

  • 删除 ax-feat crate 及所有 ax-feat/* / axfeat/* feature 前缀。
  • 在底层模块、runtime、API 暴露层、用户库接口层中执行 feature 重命名、删除、默认化(详见"设计方案"各层清单)。
  • 上层系统(StarryOS / Axvisor / LKM / axbuild / test-suit)迁移到直接 feature。
  • 同步清理文档与生成产物。

以下行为显式排除,不在本次范围内:

  • 不引入 feature 版本迁移或 deprecated 阶段机制(直接 breaking change,不保留旧兼容)。
  • 不设计 feature 依赖可视化工具或 cargo metadata 校验脚本。
  • 不重构 axbuild feature 前缀族的整体架构,仅移除 AxFeat 分支。
  • 不改变 workspace 成员 crate 的包名或目录结构,仅改 feature 定义和依赖。
  • 不修改 axtest feature + cfg(axtest) 的双层机制(feature 控制 test target,custom cfg 控制源码)。

背景与动机

ax-feat 是一个 28 个 feature 的纯转发 crate,无自身源码。它的存在导致三个核心问题:

  • feature 所有权模糊:判断 ax-std/smp 实际启用哪些底层模块,需读 ax-featax-runtimeax-hal 三层 Cargo.toml 才能确定。
  • 传递闭包不可审计ax-feat/net 声明 ["paging", "irq", "multitask", ...]ax-runtime/net 也有自己的前置条件声明,两层之间存在隐式依赖且无人保证一致。
  • 接入成本线性增长:新增一个设备能力需要同时在 ax-driverax-runtimeax-featax-std 四处注册,且每处的前置条件声明需手动保持同步。

设计原则

Feature 保留判定

一个 feature 只有满足以下任一条件才应保留:

  • 显著裁剪:能裁剪镜像体积、依赖集合或初始化路径,例如 fsnetdisplayinputmultitask
  • 实现选择:选择真实不同的实现、格式、算法或硬件路径,例如 ax-fs-ng/ext4ax-fs-ng/fatax-task/rrax-task/cfs
  • API 表面:控制上层公开 API 是否存在,例如 ax-api/fsax-posix-api/netax-std/fs
  • 平台能力:控制平台或 CPU 能力,例如 smpirqfp-simdhvuspacexuantie-c9xx
  • 诊断能力:控制可选诊断、调试或加固能力,例如 lockdepbacktracedwarfstack-guard-pagestack-protector

以下情况不应作为 feature:

  • 空 marker:无任何行为差异,例如 ax-fs-ng/std
  • 纯转发:自身无 cfg 站点,仅为转发其他 crate 的 feature,例如 ax-feat/*
  • 必选能力:crate 正常工作所必需的能力应直接默认实现,不暴露为用户选择。
  • 已被隐含的内部细节:某上层能力必然包含的内部实现,例如 FIFO 是 multitask 的默认调度器、stack canary 是 multitask 的基础防护,不应单独暴露 feature。

Feature 命名约定

  • 行业或架构共识缩写直接保留:smpirqipitlsrtcdmahv
  • 真实名直接使用:文件系统格式(ext4fat)、调度算法(rrcfs)、协议/设备型号(virtio-netaic8800)。
  • 不加层级前缀:feature 已在 crate 下有命名空间,依赖关系表达所属层级。不用 fs-ext4 / fs-fat,用 ext4 / fat
  • 不发明难懂缩写;短名必须让使用者判断真实含义。
  • 成熟多段术语保留连字符:stack-protectorvirtio-net

跨层同名 Feature 架构约束

Cargo feature 名是 per-crate 的;不同 crate 下的同名 feature 在 Cargo 层面互不相同。ax-api/fsax-runtime/fsax-std/fs 是三个独立 feature,仅名字相同。

本方案有意允许同名 feature 跨层存在,表达同一能力的不同职责切面:

  • ax-api/fs:控制 Rust 文件 API 符号是否编译。
  • ax-runtime/fs:控制 runtime 是否初始化 block driver、VFS、rootfs。
  • ax-std/fs:用户库 feature 入口,组合上述两层。

约束:调用关系必须通过各 crate 的 Cargo.toml 显式映射审计,禁止跨 crate 推断等价性。同一能力的跨层 feature 关系只能通过 Cargo.toml 中的 ["ax-runtime/fs"] 这类显式声明传递。

优化后各层 Feature 清单

应删除或默认化的 Feature

Feature 处理方式 原因
ax-feat/* 全部删除 纯聚合转发,职责重复
axfeat/* 全部删除 历史别名,不保留兼容
ax-fs-ng/std 删除 当前为空 feature,没有行为差异
ax-fs-ng/times 删除 feature,行为默认启用 文件时间戳字段和 POSIX stat 表面是基础文件系统语义;无 wall time provider 时已有 0 时间回退,不应作为编译期开关
ax-runtime/times / ax-std/times / ax-libc/times 删除 时间戳支持不再作为上层可选能力暴露
ax-runtime/dma 删除 当前只是 paging 别名,runtime 没有独立 DMA 初始化路径
ax-task/stack-canary 删除 feature,行为并入 multitask 默认实现 当前 ax-task/multitask 已强制启用它,不存在真实“不启用 task 栈 canary 的 multitask”配置
ax-task/fifo / ax-std/fifo / 旧 sched-fifo 删除 feature,FIFO 作为默认调度器 ax-task 在未选择 rr / cfs 时天然使用 FIFO;单独 feature 只表达默认值,没有裁剪或选择意义
sched-rr / sched-cfs 旧命名 删除旧名 改为 rr / cfs,避免在 ax-task 命名空间内重复 sched- 前缀
ax-std/dynld 不新增 ext-ld 的真实含义是 external linker,不是 dynamic loader;不引入误导性新名字
aic8800-wifi 旧命名 删除旧名 改为 aic8800;设备型号已足够表达真实驱动目标
starry-kernel/sg2002-wifi 删除 仅组合 starry-kernel/sg2002ax-runtime/aic8800,源码无独立 cfg 站点;板级配置应显式组合两个真实能力
dummy-if-not-enabled 旧命名 删除旧名 改为 stubs,直接表达生成 stub API 的行为
ext4fs / fatfs 旧命名 删除 改为统一的 ext4 / fat 命名

保留 Feature 必要性复核

下表按唯一能力名复核。若同一名字出现在 ax-runtimeax-stdax-libc 或 API 暴露层中,上层 feature 只作为直接映射入口保留,不代表底层能力被重复定义。每条给出移除条件,供后续维护者判断 feature 生命周期。

Feature / 能力 复核结论 移除条件
smp 保留。单核/多核启动、per-CPU、调度迁移、C ABI 中 pthread mutex layout 都有真实差异。 所有目标平台强制多核,且 pthread mutex layout 简化为单一变体。
irq 保留。中断初始化、timer、IRQ wait/waker、设备 IRQ 注册均可裁剪。 所有目标平台强制启用中断,且无 "bare-metal 无中断" 部署场景。
ipi 保留。完整 IPI 队列/回调/TLB shootdown 路径不是 irq 的必选子集。 所有 SMP 平台的 IPI 路径被 smp 隐含包含,无独立裁剪需求。
wake-ipi 保留。只确认 SGI、唤醒 idle CPU 的轻量路径,可在没有完整 ax-ipi 队列时使用。 ipi 的轻量模式被合并进 ipi feature 自身(如 ipi = ["wake-ipi-mode"])。
fp-simdxuantie-c9xxhv 保留。分别对应 CPU 扩展状态、具体 CPU errata/扩展、虚拟化能力。 对应 CPU 扩展在所有目标平台成为强制启用项。
rtc 保留。不是所有平台都有 RTC,且会改变设备 probe 与 boot 时间输出。 所有目标平台都有 RTC 且 probe 成本可忽略。
paging 保留。无页表/有页表 runtime 差异巨大,且影响 DMA、framebuffer、地址空间、page fault。 所有目标强制启用 MMU,且无 "identity mapping 裸机" 部署场景。
tls 保留。TLS 初始化和 task TLS 字段不是所有配置必需。 所有 task 模型强制使用 TLS(含单线程裸机场景)。
uspace 保留。用户地址空间、页表切换 API、HAL/task wiring 都是可选能力。 不再支持非 uspace 部署模式。
multitask 保留。单任务和 scheduler runtime 是根本不同的执行模型。 所有部署场景都使用多任务,单任务模式被废弃。
preempt 保留为 ax-task 局部能力。抢占计数、抢占调度和 kernel guard 行为可独立于基础 multitask 审计。 抢占行为被合并进 multitask,不再有"协作式 multitask"配置。
rrcfs 保留。真实调度算法选择;FIFO 是默认值,不作为 feature。 仅保留单一调度算法,其他算法被废弃。
stack-guard-page 保留。guard page 依赖 paging/TLB flush/诊断路径,成本和语义都不是必选。 所有部署场景强制启用 guard page,且 paging 总是可用。
stack-protector 保留。控制 compiler-inserted canary runtime 符号,不是普通 task 栈 canary。 compiler 默认强制插入 canary,无需 runtime hook。
lockdep 保留。诊断能力,引入锁依赖跟踪状态和跨 crate wiring。 lockdep 诊断成本在 release 构建中可忽略,可默认启用。
task-exttracepoint-hooks 保留。分别暴露外部 task 扩展接口和 tracepoint hook,不是基础 task 必选行为。 扩展接口被合并进 task 核心数据结构,无需外部 trait。
alloc 保留。ax-api/ax-posix-api/ax-std 仍支持无 alloc 的更小 API 表面。 所有部署场景都使用 alloc。
global-allocator 保留为 ax-alloc 局部/std-compat 支撑能力;不是普通应用 feature。 所有应用都通过 std-compat 间接启用,无独立裁剪需求。
tlsfbuddy-slab 保留。真实 allocator 后端选择。 仅保留单一后端。
tracking 保留。内存分配跟踪是可选诊断能力。 跟踪开销可忽略,默认启用。
fs 保留。文件系统 API、block runtime、rootfs 初始化和 fd 集成可整体裁剪。 所有部署都启用文件系统。
vfs 保留。控制 ax-fs-ng 高层 VFS/cache/open-options/context API 是否编译。 VFS 高层 API 被拆分为独立 crate,不再由 feature 控制。
ext4fat 保留。当前仓库确有两种 rootfs/磁盘格式实现。 仅保留单一格式,其他被废弃。
net 保留。网络设备、网络栈和 socket API 可整体裁剪。 所有部署都启用网络。
vsock 保留。vsock 是网络栈上的可选协议/设备路径。 vsock 被合并进 net 默认实现。
dns 保留为 ax-std 网络行为开关。只控制 ToSocketAddrs 是否进行 DNS 查询,应依赖 net DNS 解析被合并进 net 默认行为。
displayinput 保留。图形和输入子系统是可选设备能力。 无独立裁剪需求。
usbvirtio-*aic8800 保留。真实设备/总线/驱动选择。 对应设备被废弃或合并。
dma 保留在 API 暴露层。暴露显式 DMA 分配 API;runtime 不保留 dma,因为 runtime 没有独立 DMA 装配代码,DMA 在 runtime 侧只需 paging 支撑。 DMA 分配 API 被合并进 paging 暴露。
axklib runtime 适配层 不作为用户 feature 暴露。ax-runtime 默认提供 axklib::Klib 适配实现;没有 paging/irq 时相关内存映射和 IRQ 操作返回 Unsupported。动态平台基础路径会使用 axklib::mmio,因此该适配层不能挂在 pagingfsnet 等可选 feature 后面。 N/A(永远是 runtime 内部实现)。
fdpipeselectpollepoll 保留。POSIX fd 表和 I/O multiplexing API 可分别裁剪,fs/net 通过 fd 组合。 POSIX 兼容表面不再需要细分。
stubs 保留在 ax-api。用于生成未启用 API 的 stub 符号,不是 runtime 能力。 所有 API 总是编译,不再需要 stub。
std-compat 保留。改变 lang items/libc compat/global allocator 入口,属于真实构建模式。 不再支持 std compat 模式。
ext-ld 保留。控制 ax-runtime/build.rs 生成可扩展链接脚本 runtime.x 而非最终 linker.x,Axvisor/StarryOS/LKM 实际依赖该模式追加自定义 section。 链接脚本生成策略统一为可扩展模式,linker.x 被废弃。
backtracedwarf 保留。基础栈回溯和 DWARF 符号化依赖集合明显不同。 DWARF 符号化开销可忽略,默认启用。
copy 保留为 ax-mm 局部能力。只在需要复制页表映射时启用 ax-page-table-multiarch/copy-from 页表复制成为 paging 默认行为。

ArceOS 底层模块层

Crate 保留 feature 默认化 / 删除
ax-hal smp, irq, ipi, fp-simd, xuantie-c9xx, rtc, paging, tls, uspace, hv host-test 只作为测试内部 feature,不进入用户能力层;删除无真实消费路径的 axvisor-linker
ax-task multitask, irq, ipi, preempt, smp, stack-guard-page, lockdep, task-ext, tls, tracepoint-hooks, uspace, rr, cfs 删除 stack-canary 独立 feature;删除 sched-fifo,FIFO 为默认调度器;host-test / test 只作为测试内部 feature
ax-sync multitask, lockdep
ax-alloc global-allocator, tlsf, buddy-slab, tracking
ax-mm copy 无;仅当调用方需要复制页表映射时启用
ax-fs-ng vfs, ext4, fat, lockdep 删除 stdtimes;时间戳行为默认编译
ax-net vsock 等真实网络栈变体
ax-display 无 feature,作为 display 能力模块被上层可选依赖
ax-input 无 feature,作为 input 能力模块被上层可选依赖
axbacktrace alloc, dwarf

ax-runtime

ax-runtime 只保留会改变 runtime 初始化或全局系统装配的 feature。

保留 feature 含义
irq 中断初始化、IRQ 分发、驱动 IRQ 集成
ipi 完整 IPI 队列 / 回调支持;清理时必须补齐 irqdep:ax-ipiax-hal/ipiax-task?/ipi wiring
wake-ipi 轻量 idle wake IPI handler
smp 多核启动和 secondary CPU runtime 流程
uspace user address space 相关 HAL / task wiring,包括任务切换页表 API
paging 页表、地址空间和 page fault runtime wiring
multitask task scheduler runtime 初始化
tls runtime TLS 设置
fs 文件系统 runtime 基础栈:block runtime、rootfs 初始化、ax-fs-ng/vfs、page cache、block IRQ / task ops
ext4 fs + ax-fs-ng/ext4
fat fs + ax-fs-ng/fat
net irq + multitask + paging + 网络设备和网络栈注册
vsock net + vsock 设备 / 协议支持
display paging + display 设备注册
input paging + input 设备注册
rtc RTC 设备支持
aic8800 SG2002 AIC8800 Wi-Fi runtime bring-up
std-compat Rust std 兼容 runtime hook
ext-ld 生成可扩展链接脚本 runtime.x 而非最终 linker.x,供外层镜像追加 section
lockdep runtime 参与的系统层 lockdep wiring,尤其是 fs 启用时传播到 ax-fs-ng/lockdep
stack-guard-page guard page 初始化和诊断路径;承接旧 ax-feat/stack-guard-pageipi / multitask / paging 前置条件
stack-protector stack protector runtime hook

ax-runtime 默认依赖 axklib 并提供 axklib::Klib 适配实现。这不是用户可选择的能力,而是动态平台和驱动基础路径需要的 runtime 适配层;未启用 pagingirq 时,相关 mem_iomap / IRQ 操作应返回 Unsupported,而不是让链接符号缺失。

ax-runtime/fs 本身表示“文件系统 runtime 栈存在”,不表示具体磁盘格式。当前仓库确实有 ext4fat 两种文件系统格式,因此具体 rootfs 格式应通过 ext4 / fat 选择。构建可启动 rootfs 时,不应只启用 fs 而不启用任何格式 feature。

API 与用户库层

Crate 保留 feature 说明
ax-api irq, ipi, alloc, paging, dma, multitask, fs, net, display, stubs 只控制 Rust API / 类型是否暴露,不负责 runtime 装配
ax-posix-api smp, irq, alloc, multitask, lockdep, fd, fs, net, pipe, select, poll, epoll smp / lockdep 影响 build.rs 生成的 C 头文件和 pthread mutex ABI;该层只控制 POSIX API / C ABI 表面
ax-std std-compat, ext-ld, smp, fp-simd, uspace, hv, irq, ipi, wake-ipi, alloc, paging, dma, tls, multitask, lockdep, task-ext, tracepoint-hooks, rr, cfs, stack-guard-page, stack-protector, fs, ext4, fat, net, vsock, aic8800, dns, fd, display, input, usb, rtc, backtrace, dwarf, virtio-* Rust 应用用户库接口层;fs 打开文件 API 和基础 runtime fs 栈,但不选择具体 rootfs 格式,格式用 ext4/fatxuantie-c9xx 这类具体 CPU errata/扩展由平台或系统集成者直接启用 ax-hal/xuantie-c9xx,不放入通用应用接口层
ax-libc smp, fp-simd, irq, alloc, paging, tls, multitask, lockdep, stack-protector, fs, ext4, fat, net, fd, pipe, select, poll, epoll C 应用用户库接口层;通过 ax-posix-api 暴露 API,通过 ax-runtime 装配系统能力

目标归属模型

1. 模块局部 Feature

每个底层 crate 只拥有本 crate 的局部能力。

Crate 负责的 feature
ax-hal smp, irq, ipi, fp-simd, xuantie-c9xx, rtc, paging, tls, uspace, hv
ax-task multitask, irq, ipi, preempt, smp, stack-guard-page, task-ext, tls, tracepoint-hooks, uspace, rr, cfs, lockdep
ax-sync multitask, lockdep
ax-mm copy
ax-runtime runtime 初始化和系统装配 feature
ax-driver 具体设备、总线和 probe feature
ax-fs-ng vfs, fat, ext4, lockdep 等文件系统实现 / API feature
ax-net vsock 等网络栈 feature
ax-display display 子系统 feature
ax-input input 子系统 feature
axbacktrace alloc, dwarf

规则:crate 不应暴露只用于命名其他层产物概念的 feature。

2. Runtime 装配 Feature

ax-runtime 拥有系统装配图。只要启用某项能力需要启动期初始化、全局 runtime 状态、设备探测、IRQ 注册、DMA 设置或调度器参与,对应依赖就应放在 ax-runtime

目标 ax-runtime feature 职责:

Feature 含义
irq runtime 中断处理和 driver IRQ 集成
ipi 完整 IPI 队列 / 回调支持,同时包含 IRQ、HAL、task 的 IPI wiring
wake-ipi 轻量 idle wake IPI handler
smp runtime SMP 启动和 task SMP wiring
uspace runtime user address space wiring,同时启用 ax-hal/uspaceax-task?/uspace
paging runtime 页表和内存管理支持
multitask runtime task scheduler 集成
tls runtime TLS 设置
fs runtime block driver、VFS/rootfs、DMA、IRQ、multitask 前置条件
ext4 runtime ext4 rootfs 支持
fat runtime FAT rootfs 支持
net runtime 网络驱动和网络栈注册;自带 irqmultitaskpaging 前置条件
vsock runtime vsock 支持
display runtime display 设备注册;保留旧 ax-feat/displaypaging 前置条件
input runtime input 设备注册;保留旧 ax-feat/inputpaging 前置条件
rtc runtime RTC 设备支持
aic8800 runtime SG2002 AIC8800 Wi-Fi bring-up
std-compat Rust std 兼容 runtime hook
ext-ld 生成可扩展链接脚本 runtime.x 而非最终 linker.x,供外层镜像追加 section
lockdep runtime 参与的系统层 lockdep wiring,尤其是 fs 启用时传播到 ax-fs-ng/lockdep
stack-guard-page runtime guard-page 初始化;自带 ipimultitaskpaging 前置条件
stack-protector runtime stack protector hook

规则:ax-runtime 可以依赖更底层模块。更底层模块不能依赖 user library 或 API 暴露层 crate。

3. API 暴露层 Feature

ax-apiax-posix-api 只描述哪些公开 API 被编译。它们可以启用类型检查和 API 实现所需的直接依赖,但不能再通过全局 feature 聚合层转发。

ax-api 目标 feature:

Feature 清理后的直接展开
irq ax-task?/irq;只保持 API 行为和 WaitQueue::wait_timeout* 编译所需 task IRQ 能力,不启用 ax-runtime/irq
ipi dep:ax-ipi
alloc dep:ax-alloc
paging dep:ax-mm
dma dep:ax-dma
multitask ax-task/multitask, ax-sync/multitask
fs dep:ax-fs-ng
net dep:ax-net
display dep:ax-display
stubs dummy-if-not-enabled,用于在真实 API feature 未启用时生成 stub 符号

ax-posix-api 目标 feature:

Feature 清理后的直接展开
smp 空展开;保留该 feature 让 build.rs 在计算 pthread_mutex_t 内存布局时区分 SMP 与非 SMP,并作为 bindgen 的 AX_CONFIG_SMP 输入
irq 空展开;被 POSIX task 实现用于选择 sys_sched_yield() 在无 multitask 时等待 IRQ 还是自旋
alloc dep:ax-alloc
multitask alloc, ax-task/multitask, ax-sync/multitask
lockdep multitask, ax-sync/lockdep, ax-kspin/lockdep;同时被 build.rs 用于 pthread_mutex_t layout 计算,保证 C ABI 与 Rust 锁布局一致
fd alloc, dep:scope-local
fs dep:ax-fs-ng, fd
net dep:ax-net, fd
pipe fd
select fd
poll fd
epoll fd

规则:API 暴露层的 feature 名可以和 runtime feature 名相同,但 API 暴露层不负责启用 runtime 装配。

4. 用户库 Feature

ax-stdax-libc 成为唯一的 ArceOS 用户库接口层。

ax-std feature 策略:

  • Rust 应用选择 ax-std/*
  • ax-std 显式组合以下内容:
    • 通过 ax-api/* 控制 API 可见性。
    • 通过 ax-posix-api/* 控制 POSIX 兼容接口。
    • 通过 ax-runtime/* 控制 runtime 装配。
    • 只有 ax-std 自身直接使用底层符号时,才直接启用底层模块 feature。
    • 只有历史上 ax-std 已承诺的默认应用驱动选择,才保留在 ax-std 中。

目标 ax-std 映射:

Feature 清理后的直接展开
std-compat ax-alloc/global-allocator, ax-runtime/std-compat
smp ax-runtime/smp, ax-kspin/smp, ax-posix-api/smp
fp-simd ax-hal/fp-simd
uspace ax-runtime/uspace
hv ax-hal/hv
irq ax-api/irq, ax-posix-api/irq, ax-runtime/irq
ipi ax-api/ipi, ax-runtime/ipi
wake-ipi ax-runtime/wake-ipi
ext-ld ax-runtime/ext-ld
alloc ax-api/alloc, ax-io/alloc, ax-posix-api/allocax-alloc 仍作为普通依赖存在,不写 dep:ax-alloc,除非后续将该依赖 optional 化
paging alloc, ax-runtime/paging
dma ax-api/dma, ax-runtime/paging
tls ax-runtime/tls
multitask ax-api/multitask, ax-posix-api/multitask, ax-runtime/multitask
lockdep multitask, ax-posix-api/lockdep, ax-runtime/lockdep
task-ext ax-task/task-ext
tracepoint-hooks ax-task/tracepoint-hooks
rr irq, multitask, ax-task/rr
cfs irq, multitask, ax-task/cfs
stack-guard-page ax-runtime/stack-guard-page
stack-protector ax-runtime/stack-protector
fs ax-api/fs, ax-posix-api/fs, ax-runtime/fs, ax-driver/virtio-blk, fd
ext4 fs, ax-runtime/ext4
fat fs, ax-runtime/fat
net ax-api/net, ax-posix-api/net, ax-runtime/net, ax-driver/virtio-net, fd
vsock ax-runtime/vsock
aic8800 ax-runtime/aic8800
dns net;仅改变 ToSocketAddrs 是否调用 DNS 查询,不单独启用新的底层模块
fd ax-posix-api/fd, ax-posix-api/poll
display ax-api/display, ax-runtime/display
input ax-runtime/input
usb irq, ax-driver/usb
rtc ax-runtime/rtc
backtrace axbacktrace/alloc
dwarf axbacktrace/dwarf
virtio-blk ax-driver/virtio-blk
virtio-net ax-driver/virtio-net
virtio-gpu ax-driver/virtio-gpu
virtio-input ax-driver/virtio-input
virtio-socket ax-driver/virtio-socket

ax-libc feature 策略:

  • C 应用选择 ax-libc/*
  • ax-libc 直接组合 POSIX API 和 runtime 装配。
  • ax-libc 不能依赖 ax-std

目标 ax-libc 映射:

Feature 清理后的直接展开
smp ax-runtime/smp, ax-kspin/smp, ax-posix-api/smp
fp-simd ax-hal/fp-simd
irq ax-posix-api/irq, ax-runtime/irq
alloc ax-posix-api/alloc
tls alloc, ax-runtime/tls
multitask ax-posix-api/multitask, ax-runtime/multitask
lockdep ax-posix-api/lockdep, ax-runtime/lockdep
stack-protector ax-runtime/stack-protector
fs ax-posix-api/fs, ax-runtime/fs, fd
ext4 fs, ax-runtime/ext4
fat fs, ax-runtime/fat
net ax-posix-api/net, ax-runtime/net, fd
fd ax-posix-api/fd
pipe ax-posix-api/pipe
select ax-posix-api/select
poll ax-posix-api/poll
epoll ax-posix-api/epoll

规则:ax-stdax-libc 应保持显式,但不要重复展开 ax-runtime 已经负责的下层细节。它们的 feature 表应让组合关系清晰可审计。

5. 上层系统 Feature

StarryOS 和 Axvisor 不能再依赖 ax-feat

StarryOS 目标策略:

  • starry-kernel 直接启用所需 ArceOS 基础模块:
    • ax-hal/*
    • ax-runtime/*
    • ax-task/*
    • ax-sync/*
    • ax-driver/*
    • ax-fs-ng/*
    • ax-net/*
    • axbacktrace/*
  • starry-kernel 如果直接使用 ax_sync::Mutex 等 sleepable / task-aware 同步原语,应在自身依赖上启用 ax-sync/multitask,不能依赖 starryos 镜像包或其他上层组合隐式打开。
  • 删除 starry-kernel/sg2002-wifi 聚合 feature;licheerv-nano-sg2002-wifi.toml 直接组合 starry-kernel/sg2002ax-runtime/aic8800
  • starryos 镜像包主要启用 starry-kernel/*、平台和具体驱动。
  • LKM crate 依赖与主 StarryOS kernel image 相同的直接底层 feature,不能再导入单独的 feature 聚合路径。

Axvisor 目标策略:

  • 只有在构建 ArceOS 风格用户库接口时,才使用 ax-std/*
  • hypervisor / platform 装配使用直接底层 feature:
    • ax-hal/hv
    • ax-runtime/*
    • ax-task/*
    • ax-driver/*

规则:上层系统应表现为系统集成者,而不是应用 crate。

实施方案

实施按 4 个变更组推进,每组有明确的验证门槛。变更组之间有依赖:A → B → C → D。

变更组 A:消除 ax-feat 聚合层

范围:删除 ax-feat crate,将所有 ax-feat/* 引用按上文映射表原地展开到各层 Cargo.toml。

编辑文件

  • 根目录 Cargo.toml:删除 workspace dependencies 中的 ax-feat 条目。
  • os/arceos/api/arceos_api/Cargo.tomlos/arceos/api/arceos_posix_api/Cargo.toml:删除 ax-feat.workspace = true,按 API 暴露层映射表展开 feature。
  • os/arceos/ulib/axstd/Cargo.tomlos/arceos/ulib/axstd/src/lib.rs:删除 ax-feat.workspace = true,按用户库接口层映射表展开。
  • os/arceos/ulib/axlibc/Cargo.toml:同上,新增 ax-runtimeax-kspin workspace 依赖。
  • release/changelog 工具、std-test whitelist 中的 ax-feat 条目。
  • 删除 os/arceos/api/axfeat/ 整个目录。

API 暴露层清理细节

  • 删除 ax-api/stack-guard-pageax-api/src 无对应 API 符号)。
  • ax-api/dummy-if-not-enabled 重命名为 stubs
  • API crate 不启用 ax-runtime/*(除非直接调用 runtime 符号)。

验证

rg -n "ax-feat|axfeat" .   # 除 CHANGELOG 外无匹配

变更组 B:收敛底层模块和 ax-runtime Feature

范围:在 ax-taskax-fs-ngax-runtime 中执行 feature 重命名、删除、默认化。

ax-task 改动

  • 删除 sched-fifo(FIFO 是 multitask 默认调度器)。
  • sched-rrrrsched-cfscfs(去 crate 命名空间冗余)。
  • 删除 stack-canary 独立 feature,stack canary 成为 multitask 默认实现细节。

ax-fs-ng 改动

  • 删除 std(空 feature)。
  • 删除 times feature,#[cfg(feature = "times")] 改为默认编译。无 wall time provider 时保留返回 0 的运行时回退。

ax-runtime 改动

  • 删除 dma = ["paging"](runtime 无独立 DMA 装配路径)。
  • fs 中的 "dma" 替换为 "paging"
  • 保留 fs 中的 "ax-fs-ng/vfs"(控制高层 VFS/cache/open-options/context API)。
  • 新增 lockdep = ["ax-fs-ng?/lockdep"]lockdep + fs 时传播到文件系统层)。
  • 新增 uspace = ["ax-hal/uspace", "ax-task?/uspace"](承接 task 层页表切换 API)。
  • 增强 stack-guard-page = ["ipi", "multitask", "paging", "ax-task?/stack-guard-page"](承接 IPI TLB shootdown 路径)。
  • net 改为自包含系统装配 feature,含 irqmultitaskpaging
  • displayinputpaging 前置条件。
  • 增强 ipi = ["irq", "dep:ax-ipi", "ax-hal/ipi", "ax-task?/ipi"]
  • aic8800-wifi 重命名为 aic8800,同步 ax-driver/aic8800-wifiax-driver/aic8800
  • 保留 ext-ld(控制 build.rs 输出 runtime.x vs linker.x),不引入 dynld 误导名。
  • 默认依赖 axklib 并提供 axklib::Klib 适配实现;未启用 paging/irq 时对应操作返回 Unsupported

rr/cfsax-std 的组合行为(有意改进,非等价替换):

  • ax-std/rr = ["irq", "multitask", "ax-task/rr"]
  • ax-std/cfs = ["irq", "multitask", "ax-task/cfs"]
  • ax-feat/sched-* 只打开 ax-task 调度算法 feature,可能缺少 runtime scheduler 初始化。清理后启用 ax-std/rrax-std/cfs 应得到完整可运行的 multitask runtime 栈。FIFO 不需要独立 feature,启用 multitask 且不选择 rr/cfs 即为 FIFO。

验证

cargo xtask clippy --package ax-runtime
cargo xtask clippy --package ax-task
cargo xtask clippy --package ax-fs-ng

变更组 C:上层系统迁移

范围:StarryOS / Axvisor / LKM / axbuild / test-suit 中所有 ax-feat/* 替换为直接 feature。

StarryOS(编辑 os/StarryOS/kernel/Cargo.tomlos/StarryOS/starryos/Cargo.tomlos/StarryOS/lkm/*/Cargo.toml 及相关文档/构建配置):

  • starry-kernel 直接依赖消费的 ArceOS 模块(ax-hal/*ax-runtime/*ax-task/*ax-sync/* 等)。
  • starry-kernel 如果直接使用 ax_sync::Mutex 等 sleepable/task-aware 同步原语,应在自身依赖上启用 ax-sync/multitask,禁止依赖上层组合隐式传播。
  • starryos 镜像包不启用底层 ArceOS feature,除非有镜像级集成职责。
  • LKM 示例直接镜像主 kernel image 的 feature 表面。

Axvisor(编辑 os/axvisor/Cargo.tomlvirtualization/*/Cargo.toml):

  • 通过 ax-std/* 构建时使用新 feature 名。
  • hypervisor/platform 装配使用直接底层 feature(ax-hal/hvax-runtime/* 等)。

axbuild(编辑 scripts/axbuild/ 相关文件):

  • 删除 AxFeaturePrefixFamily::AxFeat 分支。
  • 删除 normalize_legacy_feature_alias()axfeat 处理。
  • 删除 is_removed_dynamic_platform_feature()ax-feat/plat-dyn 分支。
  • 删除 feature_family_from_existing_features()ax-feat/ 的检测。
  • 保留 StdFeaturePrefixFamily::AxStd 单变体(仍有 AxStd 消费者),不删除整个 enum。
  • ext4fs/fatfs 不再作为可传播旧名,构建配置必须使用 ext4/fat
  • C app feature 映射不再回退到 ax-feat/{unknown},直接映射到模块/runtime feature 或拒绝。

替换示例(StarryOS):

旧写法 新写法
ax-feat/irq ax-runtime/irq
ax-feat/smp 用户库接口层:ax-runtime/smp + ax-kspin/smp + ax-posix-api/smp;内部 crate:直接启用消费的 SMP 模块 feature
ax-feat/sched-rr ax-runtime/irq, ax-runtime/multitask, ax-task/rr
ax-feat/sched-fifo 删除,无替代;启用 ax-runtime/multitask 且不选 rr/cfs 即 FIFO
ax-feat/ext4fs ax-runtime/ext4
ax-feat/aic8800-wifi ax-runtime/aic8800
ax-feat/fs-times 删除,文件时间戳默认启用
ax-feat/ext-ld ax-runtime/ext-ld;若通过 ax-std 用户库接口层,用 ax-std/ext-ld

验证

cargo xtask starry build --arch riscv64
cargo xtask starry build --arch aarch64
cargo xtask axvisor build --arch aarch64
cargo test -p axbuild

变更组 D:文档与工具链

范围:清理所有把 ax-feat 描述为架构层的文档和生成产物。

编辑文件docs/docs/architecture/arceos.mddocs/docs/components/crates/ax-feat.mddocs/docs/components/crates/{ax-api,ax-posix-api,ax-std,ax-runtime,starry-kernel,starryos}.mddocs/docs/build/arceos/build.mdos/arceos/doc/build.md 等。

必要改动

  • 删除 docs/docs/components/crates/ax-feat.md
  • 从架构图中移除 ax-feat
  • "API 聚合层包含 axfeat" 替换为四层描述:API 暴露层(ax-api/ax-posix-api)、用户库接口层(ax-std/ax-libc)、runtime 装配(ax-runtime)、底层模块。
  • 构建示例中的 ax-feat/* 改为 ax-std/*/ax-libc/*/ax-runtime/* 或直接模块 feature。

最终搜索验证

rg -n "ax-feat|axfeat|ax_feat|AxFeat|axfeat/" .

允许的匹配:历史 CHANGELOG 条目、本方案文件(直至归档)。除此之外必须全部删除或改写。

清理后的依赖规则

硬性规则:

  • os/arceos/api/* 不能依赖已删除的 feature 聚合 crate。
  • ax-runtime 不能依赖 ax-apiax-posix-apiax-stdax-libc
  • ax-apiax-posix-api 不能启用 ax-runtime/*,除非它们直接调用 runtime 符号。
  • ax-std 可以依赖 ax-apiax-posix-apiax-runtime 和更底层模块。
  • ax-libc 可以依赖 ax-posix-apiax-runtime 和更底层模块。
  • StarryOS 和 Axvisor 在装配 kernel / runtime 内部能力时,不能使用 ArceOS user-library feature 名;只有明确链接 user library 表面时例外。
  • 上层 Cargo.toml 依赖 ax-* crate 时,如不希望被默认 feature 影响,应显式写 default-features = false,然后只开启本镜像实际需要的 feature。

期望依赖方向:

apps / C apps
  -> ax-std / ax-libc
  -> ax-api / ax-posix-api
  -> ax-runtime
  -> ax-hal / ax-task / ax-sync / ax-driver / ax-fs-ng / ax-net / ...
  -> components / platforms

StarryOS / Axvisor
  -> ax-runtime and lower modules directly

验证与合并门槛

定向验证命令

格式化:

cargo fmt

定向 clippy(每个 crate 必须通过):

cargo xtask clippy --package ax-runtime
cargo xtask clippy --package ax-api
cargo xtask clippy --package ax-posix-api
cargo xtask clippy --package ax-std
cargo xtask clippy --package ax-libc
cargo xtask clippy --package starry-kernel
cargo xtask clippy --package starryos
cargo xtask clippy --package axbuild

axbuild 单元测试(cargo xtask test 不支持 --package 过滤,使用原生 Cargo):

cargo test -p axbuild

代表性镜像构建:

cargo xtask arceos build --package arceos-helloworld --arch aarch64
cargo xtask arceos build --package arceos-thread-test --arch aarch64
cargo xtask arceos build --package arceos-fs-shell --arch aarch64
cargo xtask arceos build --package arceos-net-httpserver --arch aarch64
cargo xtask starry build --arch riscv64
cargo xtask starry build --arch aarch64
cargo xtask axvisor build --arch aarch64

如果某条命令不符合当前 xtask 语法,先查看 cargo xtask --help,使用最接近的 xtask 支持命令。除非 xtask 无法表达对应配置,否则不要对 OS 镜像构建回退到原生 Cargo 命令。

合并门槛 Checklist

  • ax-feat 已从根 workspace dependencies 移除。
  • os/arceos/api/axfeat/ 目录已删除。
  • 活跃代码路径中不再引用 ax-feataxfeatAxFeatax_feat
  • axbuild 中不再存在 AxFeat 前缀族分支。
  • C app feature 映射不再生成 ax-feat/*
  • ax-std feature 定义显式且可读。
  • ax-libc feature 定义显式且可读。
  • ax-apiax-posix-api 不承担 runtime 装配职责。
  • ax-runtime 拥有系统装配依赖。
  • StarryOS 使用直接 runtime/module feature。
  • Axvisor 在合适位置使用直接 runtime/module feature。
  • 文档不再把 ax-feat 描述为 ArceOS 层级。
  • 所有定向 clippy 检查通过。
  • 代表性 ArceOS、StarryOS 和 Axvisor 构建通过。

最终架构

入口规则

清理完成后,feature 模型的认知负担应最小化:

  • 构建 Rust ArceOS 应用:使用 ax-std/*
  • 构建 C ArceOS 应用:使用 ax-libc/*
  • 暴露 Rust API:使用 ax-api/*
  • 暴露 POSIX API:使用 ax-posix-api/*
  • 需要 runtime 初始化:使用 ax-runtime/*
  • 做 kernel/system 集成:直接依赖需要的具体模块。

架构不变量

以下不变量必须长期维持,任何破坏它们的变更都应在 PR 中显式说明:

  1. 不存在无职责聚合 feature:每个 feature 必须在其所属 crate 内有 cfg 站点、dep: 启用、build.rs 消费,或作为 ax-std / ax-libc 的公开用户库能力入口出现在映射表中;禁止仅为缩短配置而新增聚合别名。
  2. ax-runtime 是唯一的系统装配层:API 暴露层不拥有 runtime 装配职责;ax-std / ax-libc 可以显式组合 ax-runtime/*,但不重复展开 runtime 已负责的底层细节;底层模块不反向依赖上层。
  3. 同名 feature 跨层允许,但禁止隐式跨层等价ax-api/fsax-runtime/fs 是独立 feature,仅名字相同,关系只能通过 Cargo.toml 显式声明传递。
  4. axklib 适配层无条件编译:不作为用户可选 feature,因为动态平台基础路径(axklib::mmio)无条件依赖它。
  5. 用户库接口层不展开 runtime 已负责的下层细节ax-stdax-libc 不重复展开 ax-hal/ax-task/ax-driver 细节,除非自身直接使用对应符号。
  6. 上层系统对 ax-* 依赖显式写 default-features = false:避免被未来可能引入的非空 default feature 隐式影响。

不再存在单独的顶层 feature crate。Cargo feature 图本身是唯一事实来源。

@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 2176f8b964abd6d6cde5862a704173fea8e31c9d 重新审查。

重点看了 ax-feat 删除后的 feature 接线、axbuild Rust/C app feature 归一化、Starry/axvisor/ArceOS build config 迁移、scripts/test/std_crates.csvax-runtime/ax-std/ax-libc/ax-task 的能力转发,以及旧 feature 名在活跃路径中的残留情况。未发现阻塞合入的问题。

验证情况:

  • GitHub CI run 28772804498 对应当前 head,结论为 success,28 个实际 job success,28 个按矩阵条件 skipped。
  • git merge-tree --write-tree origin/dev origin/pr/1513 基于最新 origin/dev1fba35ab66...)无冲突。
  • git diff --check origin/dev...HEAD
  • cargo test -p axbuild(703 passed)
  • cargo xtask clippy --package ax-runtime(24/24 passed)
  • cargo xtask clippy --package ax-std(42/42 passed)
  • cargo xtask clippy --package ax-libc(19/19 passed)
  • cargo xtask clippy --package ax-task(16/16 passed)

另外看了 open PR 重叠面:#1451 与本 PR 在 ax-runtimeax-task、旧 axfeat 等路径有较大重叠,#1016 也触碰 axtask 调度路径;这不是当前 PR 的 correctness blocker,但后合入的一侧需要 rebase/解决冲突。

@ZR233
ZR233 requested review from luodeb and shilei-massclouds July 6, 2026 08:04

@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 是一个精心设计的架构清理,消除了 ax-feat 中间聚合层,将 feature 所有权分散到各职责 crate。实现严格遵循 PR body 中的设计方案,代码质量高,无实际缺陷。

变更概要

  • 删除 ax-feat crateos/arceos/api/axfeat/ 整个目录已删除,根 Cargo.toml 中 workspace dependency 已移除
  • Feature 重命名
    • sched-rrrrsched-cfscfsax-taskax-std 同步更新)
    • fs-ext4ext4fs-fatfatax-runtime
    • ext4fsext4fatfsfatax-stdax-libc
    • aic8800-wifiaic8800ax-runtimeax-driver
    • dummy-if-not-enabledstubsax-api
  • 删除不必要 feature
    • ax-runtime/dma(只是 paging 别名)
    • ax-fs-ng/std(空 feature)、ax-fs-ng/times(行为默认启用)
    • ax-task/stack-canary(并入 multitask)、ax-task/sched-fifo(FIFO 默认)
    • ax-hal/axvisor-linker(无真实消费路径)
    • starry-kernel/sg2002-wifi(聚合 feature)
  • 新增 featureax-runtime/uspaceax-runtime/lockdepax-std/vsockax-std/aic8800ax-std/tracepoint-hooksax-std/usbax-libc/poll
  • axklib 从 optional 改为 mandatoryax-runtime 默认依赖 axklib
  • 192 文件变更:覆盖所有 StarryOS/Axvisor/LKM app 构建配置以及 axbuild 构建系统

验证结果

检查项 结果
cargo fmt --check ✅ 通过
cargo check -p ax-runtime --no-default-features ✅ 通过
cargo check -p ax-std --no-default-features ✅ 通过
cargo check -p starry-kernel --no-default-features ✅ 通过
cargo check -p ax-std --features "fs,ext4,net,irq,multitask" ✅ 通过
残留 ax-feat/axfeat 引用(非 CHANGELOG) ✅ 无残留
[patch.crates-io] 检查 ✅ 无引入

CI 状态

CI 运行了 check suite 77757856773Detect changed paths 触发的路径过滤矩阵):

  • Check formatting / run_host: ✅ success
  • Run spin-lint / run_container: ✅ success
  • Run sync-lint / run_container: ✅ success
  • Test arceos loongarch64 qemu / run_host: ✅ success
  • Test axvisor self-hosted board orangepi-5-plus-linux / run_host: ✅ success
  • 其余 job 因路径过滤/matrix 互斥正常 skipped(run_host/run_container 二选一,publish 仅 main 分支触发)

第二个 check suite 77757781364 全部 skipped,属于 CI 路径过滤的预期行为。

重复/重叠分析

  • 搜索 repo:rcore-os/tgoskits type:pr state:open ax-feat 仅返回本 PR,无重叠或冲突的开放 PR
  • 基础分支 dev 上无等效行为或更新的 feature 实现

评审结论

本 PR 实现质量高,严格遵循设计方案,所有本地验证通过,CI 通过部分正常。无阻塞性问题。建议合并

Powered by deepseek-v4-pro

@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 消除了 ax-feat 中间聚合层,将 28 个纯转发 feature 按职责分散到各层 crate。实现严格遵循 PR body 中的设计方案,变更覆盖 192 个文件,包括底层模块、runtime、API 暴露层、用户库接口层、StarryOS/Axvisor/LKM 上层系统、axbuild 构建系统和文档。代码质量高,无阻塞性问题。

变更概要

  • 删除 ax-feat crateos/arceos/api/axfeat/ 整个目录已删除,根 Cargo.toml 中 workspace dependency 已移除
  • Feature 重命名sched-rrrrsched-cfscfsext4fs/fatfsext4/fataic8800-wifiaic8800dummy-if-not-enabledstubs
  • 删除不必要 featureax-runtime/dmaax-fs-ng/stdax-fs-ng/timesax-task/stack-canaryax-task/sched-fifoax-hal/axvisor-linkerstarry-kernel/sg2002-wifi
  • 新增 featureax-runtime/uspaceax-runtime/lockdepax-std/vsockax-std/aic8800ax-std/tracepoint-hooksax-std/usbax-libc/poll
  • axklib 从 optional 改为 mandatoryax-runtime 默认依赖 axklib

验证结果

检查项 结果
cargo fmt --check ✅ 通过
cargo clippy -p ax-runtime --all-features -- -D warnings ✅ 通过
cargo test -p axbuild ✅ 703 passed
残留 ax-feat/axfeat 引用(非 CHANGELOG) ✅ 无残留
[patch.crates-io] 检查 ✅ 无引入

CI 状态

GitHub Actions CI(check suite 77757856773)已通过。关键 job 状态:

  • Check formatting: success
  • Run spin-lint: success
  • Run sync-lint: success
  • Test arceos loongarch64 qemu: success
  • Test axvisor self-hosted board orangepi-5-plus-linux: success

其余 job 因路径过滤/matrix 互斥正常 skipped,属于预期行为。CI 已通过,无需本地再跑一遍完整 QEMU 测试。

重复/重叠分析

  • PR #1451(Starry IRQ runtime refactor):与 #1513ax-runtimeax-taskax-stdax-libc 等路径有较大重叠,都涉及删除 ax-feat 引用和 feature 重命名。但 #1451 的 primary focus 是 IRQ runtime 重构(HardIrqWaker、WaitQueue 修复等),#1513 是全面的 feature 架构重组。后合入的一侧需要 rebase 解决 feature 名冲突,但不是 correctness blocker。
  • PR #1016(work-stealing for SMP):仅触碰 axtask 调度路径,与 #1513 的 feature 重命名(sched-rrrr 等)有轻微触达,无语义冲突。
  • 基础分支 dev 上无等效行为或更新的 feature 实现。本 PR 是唯一的 ax-feat 消除方案。

评审结论

本 PR 实现质量高,严格遵循设计方案,格式化/裁剪/clippy 全部通过,CI 通过,无残留旧 feature 引用,无 [patch.crates-io] 引入,无阻塞性问题。建议合并

Powered by deepseek-v4-pro

ZCShou added 3 commits July 6, 2026 16:38
Rename `ext4`→`ext4fs`, `fat`→`fatfs`, `cfs`→`sched-cfs`, `rr`→`sched-rr`, `aic8800`→`aic8800-wifi`, and `stubs`→`dummy-if-not-enabled` across all crates, configs, and tests to avoid ambiguity and use more descriptive names. Also remove the redundant `sg2002-wifi` kernel feature in favor of direct `ax-runtime/aic8800-wifi` enablement.
# Conflicts:
#	os/arceos/modules/axfs-ng/src/block_runtime/device.rs

@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 已由 ZR233 和 mai-team-app 在 commit 2176f8b9 上完成 3 次 APPROVE 审查。最新 commit 5b8615544 仅包含文档更新(docs: update feature flag names across documentation for consistency),将文档中的 ax-feat 引用同步为 ax-runtime,与代码变更保持一致。

验证结果

检查项 结果
cargo fmt --check ✅ 通过
cargo clippy -p ax-runtime --all-features -- -D warnings ✅ 通过
cargo clippy -p ax-std --all-features -- -D warnings ✅ 通过
cargo clippy -p ax-libc --all-features -- -D warnings ✅ 通过
cargo clippy -p ax-task --all-features -- -D warnings ✅ 通过
ax-feat/axfeat 残留(非 CHANGELOG) ✅ 无残留
[patch.crates-io] 检查 ✅ 无引入

CI 状态

GitHub Actions check suite 77777713750(run 28779765137):

  • Check formatting / run_host: ✅ success
  • Run spin-lint / run_container: ✅ success
  • Run sync-lint / run_container: ✅ success
  • Cancel stale CI runs: ✅ success
  • Detect changed paths: ✅ success
  • 其余 job 因 matrix 互斥、branch 限制(publish 仅 main)、路径过滤正常 skipped
  • 部分 board 自托管测试仍在运行中,格式化/lint 关键检查已通过

重复/重叠分析

  • PR #1451(Starry IRQ runtime refactor)与本 PR 在 ax-runtimeax-task 路径有重叠,但方向不同:本 PR 是全面 feature 架构重组,#1451 聚焦 IRQ runtime。后合入一侧需 rebase 解决冲突。
  • PR #1016 仅触碰 axtask 调度路径,无语义冲突。
  • 基础分支 dev 无等效实现。

评审结论

本 PR 实现质量高,严格遵循设计文档,格式化/clippy 全部通过,CI 关键检查通过,无残留旧 feature 引用,无 [patch.crates-io] 引入。最新文档更新 commit 与主体变更保持一致。建议合并

Powered by deepseek-v4-pro

ZCShou added 2 commits July 7, 2026 08:24
…aming

Rename the `ext4fs` feature to `ext4` across starry-kernel Cargo.toml,
all `#[cfg(feature = "ext4fs")]` sites (loop device, loop_block, mount),
LKM crates (hello, kprobe_test), the starryos binary, and documentation.
Also adds an untracked design document (p.md) for ArceOS feature ownership
redesign.

@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 消除了 ax-feat 中间聚合层,将 28 个纯转发 feature 按职责分散到各层 crate。变更覆盖 177 个文件,包括删除 ax-feat crate、所有 ax-feat/* 引用迁移为直接 ax-runtime/* 引用、ax-runtime feature 增强(ipi/net/display/input/uspace/lockdep/stack-guard-page wiring)、axklib 从 optional 改为 mandatory、以及所有 StarryOS/Axvisor/LKM app 构建配置更新。实现严格遵循 PR body 中的设计方案,代码质量高,无阻塞性问题。

验证结果

检查项 结果
cargo fmt --check ✅ 通过
cargo check -p ax-runtime --no-default-features ✅ 通过
cargo check -p ax-std --no-default-features ✅ 通过
cargo check -p starry-kernel --no-default-features ✅ 通过
cargo check -p ax-libc --no-default-features ✅ 通过
ax-feat/axfeat 残留(非 CHANGELOG) ✅ 无残留
[patch.crates-io] 检查 ✅ 无引入

CI 状态

GitHub Actions CI(run 28832934391,check suite 77939221210 + 77939225110):

  • Detect changed paths / run_host: ✅ success
  • Cancel stale CI runs / run_host: ✅ success
  • 其余 job 因路径过滤、matrix 互斥(run_host/run_container 二选一)、branch 限制(publish 仅 main)正常 skipped。属于 path-filter 预期行为。

重复/重叠分析

  • PR #1451(Starry IRQ runtime refactor):与 #1513ax-runtimeax-taskax-stdax-libc 等路径有较大重叠,都涉及删除 ax-feat 引用。但 #1451 的 primary focus 是 IRQ runtime 重构(HardIrqWaker、WaitQueue 修复等),#1513 是全面的 feature 架构重组。后合入的一侧需要 rebase 解决 feature 名和 Cargo.toml 冲突,但不是 correctness blocker。
  • PR #1016(work-stealing for SMP):仅触碰 axtask 调度路径,与 #1513 的 feature 重命名(sched-rr/sched-cfs)有轻微触达,无语义冲突。
  • 基础分支 dev 上无等效行为或更新的 feature 实现。本 PR 是唯一的 ax-feat 消除方案。

评审结论

本 PR 实现质量高,严格遵循设计方案,格式化/裁剪全部通过,CI 关键检查通过,无残留旧 feature 引用,无 [patch.crates-io] 引入,无阻塞性问题。建议合并

Powered by deepseek-v4-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 4d8d8117f40fa5907f1cae4171ff9978858a1604 我重新看了增量和检查结果。完整 CI 已通过:format/sync/spin lint、clippy、std、ArceOS 四架构 QEMU、Starry 四架构 QEMU、Axvisor QEMU/self-hosted/board、Starry board 等当前覆盖项均为 pass;重复的大矩阵本地验证我没有再跑。

代码侧 feature 迁移和 ext4fs/fatfsax-fs-ng 内部 ext4/fat 的传播没有看到新的阻塞;ax-runtime 保留上层 ext4fs/fatfs facade 看起来也是兼容性取向。

阻塞点在文档:组件图谱把已删除的 ax-feat 机械改成第二个 ax-runtime,还指向不存在路径并留下自依赖/重复依赖,正好会误导这个 PR 要澄清的 feature 分层。请先修正或重新生成这些组件文档后再合入。

| `ax-driver` | ArceOS 层 | `drivers/ax-driver` | 15 | 10 | [查看](../architecture/driver/overview) |
| `ax-errno` | 组件层 | `components/axerrno` | 0 | 36 | [查看](crates/ax-errno) |
| `ax-feat` | ArceOS 层 | `os/arceos/api/axfeat` | 16 | 7 | [查看](crates/ax-feat) |
| `ax-runtime` | ArceOS 层 | `os/arceos/api/feature` | 16 | 7 | [查看](crates/ax-runtime) |

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.

这里不能把已删除的 ax-feat 行机械替换成第二个 ax-runtime。当前文档同时列出 os/arceos/modules/axruntime 和不存在的 os/arceos/api/feature 两个 ax-runtimelayers.md 里也留下了 level 13 的 ax-runtimeTop-level feature selection for ArceOS 以及 ax-runtime 依赖/被依赖自己的假边。这个 PR 的核心就是澄清 feature 分层,合入前需要把 ax-feat 的节点删除或重新生成组件图谱,避免发布一份错误的依赖文档。

@ZR233
ZR233 merged commit e803bb2 into dev Jul 7, 2026
66 of 68 checks passed
@ZR233
ZR233 deleted the feature branch July 7, 2026 01:51
This was referenced Jul 7, 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