feat(riscv64): support dynamic platform on QEMU and SG2002#961
Conversation
- Implemented IRQ handling for RISC-V architecture, including local IRQ registration and handling. - Introduced a virtual IRQ injector for hypervisor support. - Enhanced the IRQ interface to accommodate RISC-V specific requirements. - Added PLIC (Platform-Level Interrupt Controller) support for RISC-V, including initialization and IRQ management. - Updated the build system to support RISC-V targets and dynamic platform features. - Modified various configuration files to enable RISC-V features and ensure compatibility with existing systems. - Improved QEMU configuration for RISC-V to handle dynamic root filesystem patches.
# Conflicts: # drivers/ax-driver/src/block/cvsd.rs # os/StarryOS/configs/board/licheerv-nano-sg2002.toml # test-suit/starryos/normal/board-licheerv-nano-sg2002/build-riscv64gc-unknown-none-elf.toml
There was a problem hiding this comment.
审阅总结
本 PR 为 RISC-V64 补齐 plat-dyn 动态平台路径,覆盖 QEMU virt 和 SG2002 两个目标。修改范围合理,实现逻辑清晰,与项目现有 aarch64 动态平台架构保持一致。未发现阻塞性问题,批准合并。
变更审查
someboot RISC-V64 PIE / 高地址启动链
- exception_table 改用相对偏移:PIE target 下异常表不能使用绝对地址,改为
_ex_table_start基址偏移,与 aarch64 实现一致,逻辑正确。 j→lla + jr:PIE 下j的 PC 相对跳转范围有限,改用lla加载完整地址后jr跳转,保证高 VMA 地址可达。- HV 高地址 VMA:
uspace || hv条件统一使用高地址内核映射(0xffffffff80000000),PAGE_OFFSET、PERCPU_BASE、virt_to_phys逻辑正确。 - STACK_SIZE 从 0x4000 增至 0x40000:16 倍增长较显著,但 HV 场景下内核栈需求确实更大,可接受。建议后续如发现内存压力可以再调整。
T-Head MAE PTE 扩展
thead-maefeature 命名:遵循 LinuxERRATA_THEAD_MAE语义而非板级名称,设计合理。- someboot
EntryPTE 实现:正确添加PTE_PPN_MASK掩码,避免高地址 PPN 溢出;thead_mae_pte_bits/thead_mae_mem_attr正反映射一致。 page_table_entry修改:set_extended_flags中 Device/UNCACHED/Normal 三路分支替代原先的先设后清模式,逻辑更清晰。UNCACHED 改为SH+B(可缓冲不可缓存)是合理的 MAE 属性组合。
PLIC FDT 驱动(somehal/src/arch/riscv64/plic.rs)
- supervisor context 映射:
parse_supervisor_contexts正确解析interrupts-extended属性,将逻辑 CPU 索引映射到 PLIC context 编号。 cpu_idx_from_intc_phandle:兼容两种 FDT 拓扑(intc 作为 cpu 子节点 / intc 通过interrupt-parent引用 cpu),健壮性好。enable_source:在所有已发现 context 上启用中断源,而非仅当前 CPU,保证 SMP 正确性。handle_external_irq:claim → handle → complete 流程标准,spurious 中断有日志。
axplat-dyn IRQ 分发
- raw interrupt cause 转发:
someboot trap将完整scause(含中断位)作为IrqId传递,与 somehal PLIC 的INTC_IRQ_BASE | N编码一致。 - local IRQ 分离:
S_TIMER/S_SOFT通过 AtomicPtr handler table 处理,S_EXT走 PLIC 外部中断,hv下还有虚拟 IRQ 注入器,分层清晰。 transmute使用:*mut () → IrqHandler和*mut () → fn(usize)是函数指针与原始指针互转,在裸机环境下无法避免,当前用法安全(仅用于已注册的 handler)。
CVSD FDT 块设备驱动
- 新增
cvsdfeature:通过 FDTcvitek,cv181x-sdcompatible 探测,MMIO 映射后使用sg200x-bsp::Sdmmc初始化。 SyncBlockOps实现:读写正确按BLOCK_SIZE分块,checked_lba有溢出检查。unsafe impl Send for CvsdDriver:注释解释了Sdmmc内部UnsafeCell不自动Sync的原因,由于SyncBlockDevice的 mutex 串行化访问,Send是安全的。
SG2002 Placeholder 驱动
- 设计思路:仅映射 MMIO 区域但不注册设备,避免内核散落手写设备地址,为后续逐个设备驱动化保留清晰边界。21 个 compatible 覆盖了 SG2002 主要外设。
- 风险控制:placeholder 不注册设备意味着不会有功能副作用,只做地址预留。
PCI FDT 编译条件收紧
- 将
fdt_irq_for_endpoint等函数的#[cfg]从target_os = "none"收紧为同时要求具体 endpoint 驱动 feature(intel-net/ixgbe/...),消除仅启用 PCI FDT host probe 而未启用 endpoint 时的 dead_code warning。正确且必要。
串口 compatible 扩展
someboot/earlycon和ax-driver/serial统一新增ns16550a/ns16550compatible,支持 SG2002 的 DW APB UART 和标准 16550 串口。
axbuild / 配置变更
- Starry qemu-riscv64.toml:切换到
plat_dyn = true+ PIE target,feature 列表从qemu改为ax-feat/plat-dyn+starry-kernel/plat-dyn及所需驱动。 - Axvisor qemu-riscv64.toml:同样切换到
dyn-plat+ax-hal/plat-dyn。 - 新增 qemu-riscv64-dyn.toml:Axvisor 的 RISC-V64 动态平台独立配置文件。
- axbuild rootfs patch:
rootfs_patch_mode对plat-dyn使用ReplaceDriveOnly,避免重复注入静态参数。逻辑正确。
PIE Target JSON
scripts/targets/pie/riscv64gc-unknown-none-elf.json:正确配置position-independent-executables: true、relocation-model: pic、pre-link-args含-pie。
重复/冲突分析
- base 分支:
origin/dev已有 aarch64plat-dyn支持(qemu-aarch64-dyn.toml),但无 riscv64 动态平台配置。本 PR 填补此空白,不重复。 - PR #881(seek-hope, StarryOS riscv64 self-compilation):涉及 riscv64 配置和 ext4 相关改动,但聚焦于自编译和内存大小调整,与本 PR 的动态平台 IRQ/PLIC/FDT probe 路径无重叠。两者互补。
- PR #862(release-please):自动化版本发布,与本 PR 无关。
- PR #886(ebpf userspace):eBPF 用户态程序,与本 PR 无关。
未发现 duplicate、superseded 或 conflict-risk 的相关 PR。
验证
PR 作者声称已完成以下验证(本 reviewer 环境无 QEMU/SG2002 硬件,无法完整重跑,但代码逻辑已逐行审查):
cargo fmt、多包 clippy(someboot/ax-driver/axplat-dyn/starryos)全部通过- Axvisor RISC-V64 QEMU dynamic 构建 + smoke 测试通过(SMP4 guest Linux 启动)
- StarryOS SG2002 board boot 测试通过(dynamic platform + CVSD + ext4 mount)
小建议(非阻塞)
STACK_SIZE从 16KB 增至 256KB,如有条件可以记录实际使用深度,后续优化。register_local_irq中S_EXT => return false走全局表而非本地表,逻辑正确但可加一行注释说明意图,方便后续维护。page_table_entry的set_extended_flags注释中原本有 Device/Normal 属性说明,重构后删掉了,建议保留简要属性说明。
Powered by glm-5.1
| PROVIDE(STACK_SIZE = 0x4000); | ||
| PROVIDE(STACK_SIZE = 0x40000); | ||
| VM_LOAD_ADDRESS = ${kernel_load_vaddr}; | ||
|
|
There was a problem hiding this comment.
STACK_SIZE 从 0x4000 (16KB) 增至 0x40000 (256KB),16 倍增长。HV 场景下确实可能需要更大栈空间,可接受。建议后续如有内存压力可以测量实际栈深度再调整。
| irq::handle_irq(irq::systimer_irq()); | ||
| return; | ||
| } | ||
| irq::handle_irq(irq::IrqId::new(scause)); |
There was a problem hiding this comment.
将完整 raw scause(含中断位)作为 IrqId 传递,替代原来仅判断 timer 的硬编码。这对动态平台是必要的——PLIC 外部中断、IPI 等都需要通过统一路径分发。逻辑正确。
| sie::set_ssoft(); | ||
| sie::set_stimer(); | ||
| sie::set_sext(); | ||
| } |
There was a problem hiding this comment.
enable_source 在所有已发现的 supervisor context 上启用中断源,而非仅当前 CPU。这保证了 SMP 场景下所有 CPU 都能接收该中断。正确做法。
| } | ||
| } | ||
|
|
||
| info!("SG2002 placeholder mapped {mapped} region(s)"); |
There was a problem hiding this comment.
Placeholder 驱动只做 MMIO 映射不注册设备,避免内核散落手写设备地址。设计思路清晰,为后续逐个设备驱动化保留边界。
There was a problem hiding this comment.
审阅总结
本 PR 为 RISC-V64 补齐 plat-dyn 动态平台路径,覆盖 QEMU virt 和 SG2002(LicheeRV Nano)两个目标。修改范围涵盖 150 个文件(+1668 / -319),核心变更包括:
ax-driver引入plat-static/plat-dyn互斥 feature 替代旧的pci/fdt/pci-fdt组合- RISC-V64 PLIC 作为
rdif_intc::Intc通过 FDT probe 注册进rdrive - 新增
ax-riscv-plic::PlicIrqHandler无锁 IRQ handler 用于 trap 入口 claim/complete somehal::driver::rdrive_setup()运行时按 FDT 优先、ACPI RSDP 次之选择动态 source- CVSD(
cvitek,cv181x-sd)FDT 块设备驱动 - SG2002 placeholder 驱动(仅 MMIO 映射,不注册设备)
- T-Head MAE PTE 扩展(
thead-maefeature) - PIE 启动链(someboot entry 改用
lla+jr、exception table 改用相对偏移) - 全部相关 toml 配置文件从
pci/fdt迁移到plat-static/plat-dyn
未发现阻塞性问题,批准合并。
变更审查
平台模式重构(ax-driver)
plat-static / plat-dyn 互斥 feature 设计清晰,build.rs 中增加了互斥校验(同时启用会 panic)。旧的 pci/fdt/pci-fdt 组合已被完全替代,所有 150 个配置文件已同步更新。mmio 模块的 #[cfg] 条件也正确收紧为需要 plat_dyn。
PLIC FDT 驱动(somehal/src/arch/riscv64/plic.rs)
parse_supervisor_contexts正确解析interrupts-extended,将逻辑 CPU 索引映射到 PLIC context 编号cpu_idx_from_intc_phandle兼容两种 FDT 拓扑(intc 作为 cpu 子节点 / intc 通过interrupt-parent引用),健壮性好enable_source在所有已发现 context 上启用中断源,保证 SMP 正确性handle_external_irq的 claim → handle → complete 流程标准,spurious 中断有日志PlicIrqHandler仅持有NonNull<PLICRegs>和 context 映射,Send + Sync且无锁,trap 回调路径安全
IRQ 分发(axplat-dyn/src/irq.rs)
S_TIMER/S_SOFT通过AtomicPtrhandler table 处理,S_EXT走 PLIC 外部中断(返回 false 不消费),分层清晰transmute<*mut (), IrqHandler>在裸机环境下合理,仅用于已注册的 handlerregister_local_irq中S_EXT => return false让外部中断走全局表,逻辑正确
someboot RISC-V64 PIE 启动链
- exception table 改用
_ex_table_start基址偏移,与 aarch64 实现一致,PIE 下正确 j→lla + jr保证高 VMA 地址可达,PIE 下必须- HV 条件统一使用高地址内核映射(
0xffffffff80000000),PAGE_OFFSET/PERCPU_BASE/virt_to_phys逻辑正确 - STACK_SIZE 从 16KB 增至 256KB,HV 场景合理,建议后续如有内存压力可调整
T-Head MAE PTE 扩展
thead-maefeature 命名遵循 LinuxERRATA_THEAD_MAE语义,设计合理PTE_PPN_MASK正确掩码避免高地址 PPN 溢出- Device/UNCACHED/Normal 三路分支替代原先先设后清模式,逻辑更清晰
CVSD FDT 块设备驱动(ax-driver/src/block/cvsd.rs)
- 通过 FDT
cvitek,cv181x-sdcompatible 探测,syscon 查找逻辑完整 SyncBlockOps实现正确按 BLOCK_SIZE 分块,checked_lba有溢出检查unsafe impl Send for CvsdDriver注释清楚解释了UnsafeCell不自动 Sync 的原因
SG2002 Placeholder 驱动
- 仅映射 MMIO 区域不注册设备,避免内核散落手写设备地址,设计合理
- 21 个 compatible 覆盖 SG2002 主要外设
验证
本地已运行并通过:
cargo fmt --check:通过git diff --check:无空白错误cargo xtask clippy --package ax-riscv-plic:1/1 checks passedcargo xtask clippy --package someboot:7/7 checks passedcargo xtask clippy --package somehal:7/7 checks passedcargo xtask clippy --package ax-driver:39/39 checks passedcargo test -p axbuild:408 passed
PR 作者声称已通过 QEMU smoke 测试(StarryOS + Axvisor)、SG2002 board boot 测试。本 reviewer 环境无 QEMU riscv64 / SG2002 硬件,无法完整重跑,但代码逻辑已逐行审查。
重复/冲突分析
- base 分支:
origin/dev已有 aarch64plat-dyn支持,但无 riscv64 动态平台。本 PR 填补此空白,不重复 - PR #966(ZCShou, FDT handling refactor):涉及 FDT 错误处理和代码整理,与 PLIC FDT probe 路径有部分文件重叠(
rdriveprobe 部分),但关注点不同,属于partial-overlap,互补不冲突 - PR #965(串口重构):涉及
some-serial和 DW APB UART 迁移,本 PR 仅在 earlycon 新增了ns16550a/ns16550compatible,重叠面小 - PR #931(ptrace/GDB):涉及 StarryOS ptrace,与本 PR 的驱动/平台层无重叠
- 其他 open PR(sqlite3 测试、sched fix 等)均与本 PR 无关
未发现 duplicate、superseded 或 conflict-risk 的相关 PR。
小建议(非阻塞)
STACK_SIZE从 16KB 增至 256KB,如有条件可记录实际使用深度后续优化register_local_irq中S_EXT => return false可加一行注释说明意图,方便后续维护page_table_entry的set_extended_flags重构后删掉了 Device/Normal 属性说明注释,建议保留简要属性描述
Powered by Mai Reviewer
Powered by glm-5.1
There was a problem hiding this comment.
审阅总结
本 PR 为 RISC-V64 补齐 plat-dyn 动态平台路径,覆盖 QEMU virt 和 SG2002(LicheeRV Nano)两个目标。修改范围涵盖 149 个文件(+1683 / -315),核心变更包括:
ax-driver引入plat-static/plat-dyn互斥 feature 替代旧的pci/fdt/pci-fdt组合- RISC-V64 PLIC 作为
rdif_intc::Intc通过 FDT probe 注册进rdrive - 新增
ax-riscv-plic::PlicIrqHandler无锁 IRQ handler 用于 trap 入口 claim/complete somehal::driver::rdrive_setup()运行时按 FDT 优先、ACPI RSDP 次之选择动态 source- CVSD(
cvitek,cv181x-sd)FDT 块设备驱动 - SG2002 placeholder 驱动(仅 MMIO 映射,不注册设备)
- T-Head MAE PTE 扩展(
thead-maefeature) - PIE 启动链(someboot entry 改用
lla+jr、exception table 改用相对偏移) - 全部相关 toml 配置文件从
pci/fdt迁移到plat-static/plat-dyn
实现逻辑清晰,与项目现有 aarch64 动态平台架构保持一致。本地验证全部通过。未发现阻塞性问题,批准合并。
变更审查
平台模式重构(ax-driver)
plat-static / plat-dyn 互斥 feature 设计清晰,build.rs 中增加了互斥校验(同时启用会 panic)。旧的 pci/fdt/pci-fdt 组合已被完全替代,所有 149 个配置文件已同步更新。mmio 模块的 #[cfg] 条件也正确收紧为需要 plat_dyn。
PLIC FDT 驱动(somehal/src/arch/riscv64/plic.rs)
parse_supervisor_contexts正确解析interrupts-extended,将逻辑 CPU 索引映射到 PLIC context 编号cpu_idx_from_intc_phandle兼容两种 FDT 拓扑(intc 作为 cpu 子节点 / intc 通过interrupt-parent引用),健壮性好enable_source在所有已发现 supervisor context 上启用中断源,保证 SMP 正确性handle_external_irq的 claim → handle → complete 流程标准,spurious 中断有日志PlicIrqHandler仅持有NonNull<PLICRegs>和 context 映射,Send + Sync且无锁,trap 回调路径安全
IRQ 分发(axplat-dyn/src/irq.rs)
S_TIMER/S_SOFT通过AtomicPtrhandler table 处理,S_EXT走 PLIC 外部中断(返回 false 不消费),分层清晰transmute<*mut (), IrqHandler>在裸机环境下合理,仅用于已注册的 handlerregister_local_irq中S_EXT => return false让外部中断走全局表,逻辑正确
someboot RISC-V64 PIE 启动链
- exception table 改用
_ex_table_start基址偏移,与 aarch64 实现一致,PIE 下正确 j→lla + jr保证高 VMA 地址可达,PIE 下必须- HV 条件统一使用高地址内核映射(
0xffffffff80000000),PAGE_OFFSET/PERCPU_BASE/virt_to_phys逻辑正确 - STACK_SIZE 从 16KB 增至 256KB,HV 场景合理,建议后续如有内存压力可调整
T-Head MAE PTE 扩展
thead-maefeature 命名遵循 LinuxERRATA_THEAD_MAE语义,设计合理PTE_PPN_MASK正确掩码避免高地址 PPN 溢出- Device/UNCACHED/Normal 三路分支替代原先先设后清模式,逻辑更清晰
CVSD FDT 块设备驱动(ax-driver/src/block/cvsd.rs)
- 通过 FDT
cvitek,cv181x-sdcompatible 探测,syscon 查找逻辑完整 SyncBlockOps实现正确按 BLOCK_SIZE 分块,checked_lba有溢出检查unsafe impl Send for CvsdDriver注释清楚解释了UnsafeCell不自动 Sync 的原因
SG2002 Placeholder 驱动
- 仅映射 MMIO 区域不注册设备,避免内核散落手写设备地址,设计合理
- 21 个 compatible 覆盖 SG2002 主要外设
验证
本地已运行并通过:
cargo fmt --check:通过git diff --check:无空白错误cargo xtask clippy --package ax-riscv-plic:1/1 checks passedcargo xtask clippy --package someboot:7/7 checks passedcargo xtask clippy --package somehal:7/7 checks passedcargo xtask clippy --package ax-driver:39/39 checks passedcargo xtask clippy --package axplat-dyn:8/8 checks passedcargo test -p axbuild:408 passed
PR 作者声称已通过 QEMU smoke 测试(StarryOS + Axvisor)、SG2002 board boot 测试。本 reviewer 环境无 QEMU riscv64 / SG2002 硬件,无法完整重跑,但代码逻辑已逐行审查。
CI 状态:当前 CI workflow 处于 queued 状态,尚未开始运行(fork PR)。所有 check-runs 显示 skipped,属于正常首次排队行为,不是 PR 引入的失败。待 CI 运行完成后需关注结果。
重复/冲突分析
- base 分支:
origin/dev已有 aarch64plat-dyn支持,但无 riscv64 动态平台。本 PR 填补此空白,不重复 - 逐一检查了当前所有 open PR(#891-#893 eBPF JIT、#941 /proc/stat 修复、#946/#957 namespace proxy 等),均与本 PR 的驱动/平台/IRQ/FDT 层无重叠
未发现 duplicate、superseded 或 conflict-risk 的相关 PR。
小建议(非阻塞)
STACK_SIZE从 16KB 增至 256KB,如有条件可记录实际使用深度后续优化register_local_irq中S_EXT => return false可加一行注释说明意图,方便后续维护page_table_entry的set_extended_flags重构后删掉了 Device/Normal 属性说明注释,建议保留简要属性描述
Powered by glm-5.1
There was a problem hiding this comment.
审阅总结
本 PR 为 RISC-V64 补齐 plat-dyn 动态平台路径,覆盖 QEMU virt 和 SG2002(LicheeRV Nano)两个目标。修改范围涵盖 151 个文件(+1732 / -325),核心变更包括:
ax-driver引入plat-static/plat-dyn互斥 feature 替代旧的pci/fdt/pci-fdt组合- RISC-V64 PLIC 作为
rdif_intc::Intc通过 FDT probe 注册进rdrive - 新增
ax-riscv-plic::PlicIrqHandler无锁 IRQ handler 用于 trap 入口 claim/complete somehal::driver::rdrive_setup()运行时按 FDT 优先、ACPI RSDP 次之选择动态 source- CVSD(
cvitek,cv181x-sd)FDT 块设备驱动 - SG2002 placeholder 驱动(仅 MMIO 映射,不注册设备)
- T-Head MAE PTE 扩展(
thead-maefeature) - PIE 启动链(someboot entry 改用
lla+jr、exception table 改用相对偏移) - 全部相关 toml 配置文件从
pci/fdt迁移到plat-static/plat-dyn
实现逻辑清晰,与项目现有 aarch64 动态平台架构保持一致。本地验证全部通过。未发现阻塞性问题,批准合并。
变更审查
平台模式重构(ax-driver)
plat-static / plat-dyn 互斥 feature 设计清晰,build.rs 中 plat-dyn 优先输出 cfg(plat_dyn) 而非 panic,解决了 rust-analyzer workspace 分析时 feature 合并的问题。旧的 pci/fdt/pci-fdt 组合已被完全替代,所有 151 个配置文件已同步更新。
PLIC FDT 驱动(somehal/src/arch/riscv64/plic.rs)
parse_supervisor_contexts正确解析interrupts-extended,将逻辑 CPU 索引映射到 PLIC context 编号cpu_idx_from_intc_phandle兼容两种 FDT 拓扑(intc 作为 cpu 子节点 / intc 通过interrupt-parent引用),健壮性好enable_source在所有已发现 supervisor context 上启用中断源,保证 SMP 正确性handle_external_irq的 claim → handle → complete 流程标准,spurious 中断有日志PlicIrqHandler仅持有NonNull<PLICRegs>和 context 映射,Send + Sync且无锁,trap 回调路径安全current_cpu_idx优先使用ax_plat::percpu运行期 CPU id reader,保留someboothart-id 映射作为早期初始化 fallback,并用 ready mask 避开 secondary CPU 尚未完成 per-CPU 初始化的窗口
IRQ 分发(axplat-dyn/src/irq.rs)
S_TIMER/S_SOFT通过AtomicPtrhandler table 处理,S_EXT走 PLIC 外部中断(返回 false 不消费),分层清晰transmute<*mut (), IrqHandler>在裸机环境下合理,仅用于已注册的 handlerregister_local_irq中S_EXT => return false让外部中断走全局表,逻辑正确
someboot RISC-V64 PIE 启动链
- exception table 改用
_ex_table_start基址偏移(.word from - _ex_table_start),PIE 下正确避免绝对地址 j→lla + jr保证高 VMA 地址可达,PIE 下必须- HV 条件统一使用高地址内核映射(
0xffffffff80000000),PAGE_OFFSET/PERCPU_BASE/virt_to_phys逻辑正确 - STACK_SIZE 从 16KB 增至 256KB,HV 场景合理
- linker script 补齐
.tdata/.tbssTLS 边界符号,满足 upstreamaxhal::tls符号契约
T-Head MAE PTE 扩展
thead-maefeature 命名遵循 LinuxERRATA_THEAD_MAE语义,设计合理PTE_PPN_MASK正确掩码避免高地址 PPN 溢出- Device/UNCACHED/Normal 三路分支替代原先先设后清模式,逻辑更清晰
page_table_entry的set_extended_flags中 UNCACHED 改为SH+B(可缓冲不可缓存)是合理的 MAE 属性组合
CVSD FDT 块设备驱动(ax-driver/src/block/cvsd.rs)
- 通过 FDT
cvitek,cv181x-sdcompatible 探测,syscon 查找逻辑完整 SyncBlockOps实现正确按 BLOCK_SIZE 分块,checked_lba有溢出检查unsafe impl Send for CvsdDriver注释清楚解释了UnsafeCell不自动 Sync 的原因,mutex 串行化保证安全
SG2002 Placeholder 驱动
- 仅映射 MMIO 区域不注册设备,避免内核散落手写设备地址,设计合理
- 21 个 compatible 覆盖 SG2002 主要外设
rdrive_setup(somehal/src/driver.rs)
- FDT 优先、ACPI RSDP 次之的运行时选择逻辑清晰
- 无 source 时跳过并 warning,不会 panic
验证
本地已运行并通过:
cargo fmt --check:通过git diff --check:无空白错误cargo xtask clippy --package ax-riscv-plic:1/1 checks passedcargo xtask clippy --package someboot:7/7 checks passed(含 thead-mae feature)cargo xtask clippy --package somehal:7/7 checks passedcargo xtask clippy --package ax-driver:39/39 checks passedcargo xtask clippy --package axplat-dyn:8/8 checks passedcargo test -p axbuild:409 passed
CI 状态:所有 check-runs 显示 conclusion: skipped,属于 fork PR 首次推送的正常行为,非 PR 引入的失败。
重复/冲突分析
- base 分支:
origin/dev已有 aarch64plat-dyn支持,但无 riscv64 动态平台配置。本 PR 填补此空白,不重复 - 逐一检查了当前 open PR(#891 eBPF JIT、#964 USB camera mutex 等),均与本 PR 的驱动/平台/IRQ/FDT 层无重叠
未发现 duplicate、superseded 或 conflict-risk 的相关 PR。
小建议(非阻塞)
STACK_SIZE从 16KB 增至 256KB,如有条件可记录实际使用深度后续优化register_local_irq中S_EXT => return false可加一行注释说明意图,方便后续维护page_table_entry的set_extended_flags重构后删掉了 Device/Normal 属性说明注释,建议保留简要属性描述
Powered by glm-5.1
- Removed "plat-dyn" features from multiple configurations to streamline platform feature management. - Updated related build scripts to ensure compatibility with the new feature structure. - Adjusted tests to reflect the removal of deprecated features and ensure proper functionality. - Consolidated platform feature handling in build scripts to improve clarity and maintainability.
# Conflicts: # os/axvisor/Cargo.toml
…boot-time CPU identification
There was a problem hiding this comment.
审阅总结
本 PR 为 RISC-V64 补齐 plat-dyn 动态平台路径,覆盖 QEMU virt 和 SG2002(LicheeRV Nano)两个目标。修改范围涵盖 161 个文件(+1863 / -465),核心变更包括:
ax-driver引入plat-static/plat-dyn互斥 feature 替代旧的pci/fdt/pci-fdt组合build.rs中plat-dyn优先输出cfg(plat_dyn),解决 rust-analyzer workspace 分析时 feature 合并问题- RISC-V64 PLIC 作为
rdif_intc::Intc通过 FDT probe 注册进rdrive - 新增
PlicIrqHandler(ax-riscv-plic)无锁 IRQ handler 用于 trap 入口 claim/complete somehal::driver::rdrive_setup()运行时按 FDT 优先、ACPI RSDP 次之选择动态 source- CVSD(
cvitek,cv181x-sd)FDT 块设备驱动 - SG2002 placeholder 驱动(仅 MMIO 映射,不注册设备)
- T-Head MAE PTE 扩展(
thead-maefeature) - PIE 启动链(someboot entry 改用
lla+jr、exception table 改用相对偏移、补齐.tdata/.tbssTLS 边界符号) - 全部相关 toml 配置文件从
pci/fdt迁移到plat-static/plat-dyn axbuild适配 dynamic platform 和 PIE rv64 target
实现逻辑清晰,与项目现有 aarch64 动态平台架构保持一致。未发现阻塞性问题,批准合并。
变更审查
平台模式重构(ax-driver)
plat-static / plat-dyn 互斥 feature 设计清晰,build.rs 中 plat-dyn 优先输出 cfg(plat_dyn) 而非 panic,解决了 rust-analyzer workspace 分析时 feature 合并的问题。旧的 pci/fdt/pci-fdt 组合已被完全替代,pcie、rdif-intc、rdif-pcie 等基础能力改为无条件依赖,消除不必要的 feature 传播。
PLIC FDT 驱动(somehal/src/arch/riscv64/plic.rs)
parse_supervisor_contexts正确解析interrupts-extended,将逻辑 CPU 索引映射到 PLIC context 编号cpu_idx_from_intc_phandle兼容两种 FDT 拓扑(intc 作为 cpu 子节点 / intc 通过interrupt-parent引用),健壮性好enable_source在所有已发现 supervisor context 上启用中断源,保证 SMP 正确性handle_external_irq的 claim → handle → complete 流程标准,spurious 中断有日志PlicIrqHandler仅持有NonNull<PLICRegs>和 context 映射,Send + Sync且无锁,trap 回调路径安全current_cpu_idx优先使用ax_plat::percpu运行期 CPU id reader,保留someboothart-id 映射作为早期初始化 fallback,并用 ready mask 避开 secondary CPU 尚未完成 per-CPU 初始化的窗口
IRQ 分发(axplat-dyn/src/irq.rs)
S_TIMER/S_SOFT通过AtomicPtrhandler table 处理,S_EXT走 PLIC 外部中断(返回 false 不消费),分层清晰transmute<*mut (), IrqHandler>在裸机环境下合理,仅用于已注册的 handlerregister_local_irq中S_EXT => return false让外部中断走全局表,逻辑正确
someboot RISC-V64 PIE 启动链
- exception table 改用
_ex_table_start基址偏移(.word from - _ex_table_start),PIE 下正确避免绝对地址 j→lla + jr保证高 VMA 地址可达,PIE 下必须- HV 条件统一使用高地址内核映射(
0xffffffff80000000),PAGE_OFFSET/PERCPU_BASE/virt_to_phys逻辑正确 - STACK_SIZE 从 16KB 增至 256KB,HV 场景合理
- linker script 补齐
.tdata/.tbssTLS 边界符号,满足 upstreamaxhal::tls符号契约
T-Head MAE PTE 扩展
thead-maefeature 命名遵循 LinuxERRATA_THEAD_MAE语义,设计合理PTE_PPN_MASK正确掩码避免高地址 PPN 溢出- Device/UNCACHED/Normal 三路分支替代原先先设后清模式,逻辑更清晰
page_table_entry的set_extended_flags中 UNCACHED 改为SH+B(可缓冲不可缓存)是合理的 MAE 属性组合
CVSD FDT 块设备驱动(ax-driver/src/block/cvsd.rs)
- 通过 FDT
cvitek,cv181x-sdcompatible 探测,syscon 查找逻辑完整 SyncBlockOps实现正确按 BLOCK_SIZE 分块,checked_lba有溢出检查unsafe impl Send for CvsdDriver注释清楚解释了UnsafeCell不自动 Sync 的原因,mutex 串行化保证安全
SG2002 Placeholder 驱动
- 仅映射 MMIO 区域不注册设备,避免内核散落手写设备地址,设计合理
- 21 个 compatible 覆盖 SG2002 主要外设
验证
本地已运行并通过:
cargo fmt --check:通过git diff --check:无空白错误cargo clippy --manifest-path components/someboot/Cargo.toml --all-features -- -D warnings:通过cargo test -p axbuild:409 passed, 1 failed(bug_ext4_dir_ops_qemu_configs_fail_on_lockdep_fatal,pre-existing,base 分支同样存在,与本 PR 无关)
CI 状态:已运行的 check-runs 全部 conclusion: success;skipped 的 check-runs 属于 fork PR 推送的正常行为,非 PR 引入的失败。
重复/冲突分析
- base 分支:
origin/dev已有 aarch64plat-dyn支持,但无 riscv64 动态平台配置。本 PR 填补此空白,不重复 - 逐一检查了当前 open PR(#989 cgroup2、#990 ftruncate errno 等),均与本 PR 的驱动/平台/IRQ/FDT 层无重叠
- 之前 4 轮 mai-team-app 审阅均 APPROVED,本 reviewer 独立验证后确认分析仍适用于当前 head
未发现 duplicate、superseded 或 conflict-risk 的相关 PR。
小建议(非阻塞)
STACK_SIZE从 16KB 增至 256KB,如有条件可记录实际使用深度后续优化register_local_irq中S_EXT => return false可加一行注释说明意图,方便后续维护page_table_entry的set_extended_flags重构后删掉了 Device/Normal 属性说明注释,建议保留简要属性描述
Powered by mimo-v2.5-pro
…re-os#985) alloc is needed by every consumer of axruntime. Remove the alloc feature entirely and make ax-alloc a required dependency. Propagating changes to axfeat to remove the now-unnecessary alloc forwarding from 15 features. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
- Deleted LICENSE, LICENSE.APACHE, LICENSE.MIT, README.md, README_CN.md, and src/lib.rs files. - Removed tests and examples related to the range allocator functionality.
* refactor(linker-scripts): remove unused linker scripts for hello, irq, and smp kernels * refactor(ci): switch clippy and std tests to self-hosted runners
… in configuration
There was a problem hiding this comment.
审阅总结
本 PR 为 RISC-V64 补齐 plat-dyn 动态平台路径,覆盖 QEMU virt 和 SG2002(LicheeRV Nano)两个目标。修改范围涵盖 169 个文件(+2030 / -684),核心变更包括:
ax-driver引入plat-static/plat-dyn互斥 feature 替代旧的pci/fdt/pci-fdt组合,build.rs中plat-dyn优先输出cfg(plat_dyn)而非 panic,解决 rust-analyzer workspace 分析时 feature 合并问题- RISC-V64 PLIC 作为
rdif_intc::Intc通过 FDT probe 注册进rdrive - 新增
ax-riscv-plic::PlicIrqHandler无锁 IRQ handler 用于 trap 入口 claim/complete somehal::driver::rdrive_setup()运行时按 FDT 优先、ACPI RSDP 次之选择动态 source- CVSD(
cvitek,cv181x-sd)FDT 块设备驱动 - SG2002 placeholder 驱动(仅 MMIO 映射,不注册设备)
- T-Head MAE PTE 扩展(
thead-maefeature) - PIE 启动链(someboot entry 改用
lla+jr、exception table 改用相对偏移、补齐.tdata/.tbssTLS 边界符号) - 全部相关 toml 配置文件从
pci/fdt迁移到plat-static/plat-dyn axbuild适配 dynamic platform 和 PIE rv64 target
实现逻辑清晰,与项目现有 aarch64 动态平台架构保持一致。未发现阻塞性问题,批准合并。
变更审查
平台模式重构(ax-driver)
plat-static / plat-dyn 互斥 feature 设计清晰,build.rs 中 plat-dyn 优先输出 cfg(plat_dyn) 而非 panic,解决了 rust-analyzer workspace 分析时 feature 合并问题。旧的 pci/fdt/pci-fdt 组合已被完全替代,所有配置文件已同步更新。
PLIC FDT 驱动(somehal/src/arch/riscv64/plic.rs)
parse_supervisor_contexts正确解析interrupts-extended,将逻辑 CPU 索引映射到 PLIC context 编号cpu_idx_from_intc_phandle兼容两种 FDT 拓扑(intc 作为 cpu 子节点 / intc 通过interrupt-parent引用),健壮性好enable_source在所有已发现 supervisor context 上启用中断源,保证 SMP 正确性handle_external_irq的 claim → handle → complete 流程标准,spurious 中断有日志PlicIrqHandler仅持有NonNull<PLICRegs>和 context 映射,Send + Sync且无锁,trap 回调路径安全current_cpu_idx优先使用ax_plat::percpu运行期 CPU id reader,保留someboothart-id 映射作为早期初始化 fallback,并用 ready mask 避开 secondary CPU 尚未完成 per-CPU 初始化的窗口
IRQ 分发(axplat-dyn/src/irq.rs)
S_TIMER/S_SOFT通过AtomicPtrhandler table 处理,S_EXT走 PLIC 外部中断(返回 false 不消费),分层清晰transmute<*mut (), IrqHandler>在裸机环境下合理,仅用于已注册的 handler
someboot RISC-V64 PIE 启动链
- exception table 改用
_ex_table_start基址偏移,PIE 下正确避免绝对地址 j→lla + jr保证高 VMA 地址可达,PIE 下必须- HV 条件统一使用高地址内核映射(
0xffffffff80000000),PAGE_OFFSET/PERCPU_BASE/virt_to_phys逻辑正确 - linker script 补齐
.tdata/.tbssTLS 边界符号,满足 upstreamaxhal::tls符号契约
T-Head MAE PTE 扩展
thead-maefeature 命名遵循 LinuxERRATA_THEAD_MAE语义,设计合理PTE_PPN_MASK正确掩码避免高地址 PPN 溢出- Device/UNCACHED/Normal 三路分支替代原先先设后清模式,逻辑更清晰
CVSD FDT 块设备驱动
- 通过 FDT
cvitek,cv181x-sdcompatible 探测,syscon 查找逻辑完整 SyncBlockOps实现正确按 BLOCK_SIZE 分块,checked_lba有溢出检查unsafe impl Send for CvsdDriver注释清楚解释了安全原因
SG2002 Placeholder 驱动
- 仅映射 MMIO 区域不注册设备,避免内核散落手写设备地址,21 个 compatible 覆盖 SG2002 主要外设
验证
本地已运行并通过:
cargo fmt --check:通过git diff --check:无空白错误cargo xtask clippy --package ax-driver:39/39 checks passedcargo xtask clippy --package axplat-dyn:8/8 checks passedcargo xtask clippy --package someboot:7/7 checks passedcargo xtask clippy --package somehal:7/7 checks passedcargo test -p axbuild:410 passed, 0 failed
CI 状态:Check formatting / run_host 成功;部分 fork PR check 显示 skipped 属于正常行为,非 PR 引入的失败。Detect changed paths 成功。Run sync-lint / run_container 正在运行中。
重复/冲突分析
- base 分支:
origin/dev已有 aarch64plat-dyn支持,但无 riscv64 动态平台配置。本 PR 填补此空白,不重复 - 检查了当前 open PR(#996 axtask scheduler、#995 syscall test 等),均与本 PR 的驱动/平台/IRQ/FDT 层无重叠
- 此前 5 轮 mai-team-app 审阅均 APPROVED,本轮独立验证后确认无新增阻塞问题
未发现 duplicate、superseded 或 conflict-risk 的相关 PR。
小建议(非阻塞)
STACK_SIZE从 16KB 增至 256KB,如有条件可记录实际使用深度后续优化register_local_irq中S_EXT => return false可加一行注释说明意图,方便后续维护page_table_entry的set_extended_flags重构后删掉了 Device/Normal 属性说明注释,建议保留简要属性描述
Powered by mimo-v2.5-pro
There was a problem hiding this comment.
审阅总结
本 PR 为 RISC-V64 补齐 plat-dyn 动态平台路径,覆盖 QEMU virt 和 SG2002(LicheeRV Nano)两个目标。修改范围涵盖 169 个文件(+2030 / -684),核心变更包括:
ax-driver引入plat-static/plat-dyn互斥 feature 替代旧的pci/fdt/pci-fdt组合,build.rs中plat-dyn优先输出cfg(plat_dyn)而非 panic,解决 rust-analyzer workspace 分析时 feature 合并问题- RISC-V64 PLIC 作为
rdif_intc::Intc通过 FDT probe 注册进rdrive,新增PlicIrqHandler(ax-riscv-plic)无锁 IRQ handler somehal::driver::rdrive_setup()运行时按 FDT 优先、ACPI RSDP 次之选择动态 source- CVSD(
cvitek,cv181x-sd)FDT 块设备驱动 - SG2002 placeholder 驱动(仅 MMIO 映射,不注册设备)
- T-Head MAE PTE 扩展(
thead-maefeature) - PIE 启动链(someboot entry 改用
lla+jr、exception table 改用相对偏移、补齐.tdata/.tbssTLS 边界符号) - 全部相关 toml 配置文件从
pci/fdt迁移到plat-static/plat-dyn axbuild适配 dynamic platform 和 PIE rv64 target
实现逻辑清晰,与项目现有 aarch64 动态平台架构保持一致。未发现阻塞性问题,批准合并。
变更审查
平台模式重构(ax-driver)
plat-static / plat-dyn 互斥 feature 设计清晰,build.rs 中 plat-dyn 优先输出 cfg(plat_dyn) 而非 panic,解决了 rust-analyzer workspace 分析时 feature 合并问题。旧的 pci/fdt/pci-fdt 组合已被完全替代,所有配置文件已同步更新。
PLIC FDT 驱动(somehal/src/arch/riscv64/plic.rs)
parse_supervisor_contexts正确解析interrupts-extended,逻辑 CPU 索引到 PLIC context 映射正确cpu_idx_from_intc_phandle兼容两种 FDT 拓扑,健壮性好enable_source在所有已发现 supervisor context 上启用中断源,SMP 正确handle_external_irq的 claim → handle → complete 流程标准,spurious 中断有日志PlicIrqHandler仅持有NonNull<PLICRegs>和 context 映射,Send + Sync且无锁,trap 回调路径安全current_cpu_idx优先使用ax_plat::percpu运行期 CPU id reader,保留someboothart-id 映射作为早期初始化 fallback
IRQ 分发(axplat-dyn/src/irq.rs)
S_TIMER/S_SOFT通过AtomicPtrhandler table 处理,S_EXT走 PLIC 外部中断(返回 false 不消费),分层清晰transmute<*mut (), IrqHandler>在裸机环境下合理,仅用于已注册的 handler
someboot RISC-V64 PIE 启动链
- exception table 改用
_ex_table_start基址偏移,PIE 下正确避免绝对地址 j→lla + jr保证高 VMA 地址可达- HV 条件统一使用高地址内核映射,
PAGE_OFFSET/PERCPU_BASE/virt_to_phys逻辑正确 - STACK_SIZE 从 16KB 增至 256KB,HV 场景合理
- linker script 补齐
.tdata/.tbssTLS 边界符号,满足 upstreamaxhal::tls符号契约
T-Head MAE PTE 扩展
thead-maefeature 命名遵循 LinuxERRATA_THEAD_MAE语义,设计合理PTE_PPN_MASK正确掩码避免高地址 PPN 溢出- Device/UNCACHED/Normal 三路分支替代原先先设后清模式,逻辑更清晰
CVSD FDT 块设备驱动
- 通过 FDT
cvitek,cv181x-sdcompatible 探测,syscon 查找逻辑完整 SyncBlockOps实现正确,checked_lba有溢出检查unsafe impl Send注释清楚解释了安全性
SG2002 Placeholder 驱动
- 仅映射 MMIO 区域不注册设备,避免内核散落手写设备地址,设计合理
验证
本地已运行并通过:
cargo fmt --check:通过git diff --check:无空白错误cargo xtask clippy --package ax-riscv-plic:1/1 checks passedcargo xtask clippy --package someboot:7/7 checks passedcargo xtask clippy --package somehal:7/7 checks passedcargo xtask clippy --package ax-driver:39/39 checks passedcargo xtask clippy --package axplat-dyn:8/8 checks passedcargo test -p axbuild:410 passed, 0 failed
CI 状态:所有 check-runs 显示 conclusion: skipped,属于 fork PR 推送的正常行为,非 PR 引入的失败。
重复/冲突分析
- base 分支:
origin/dev已有 aarch64plat-dyn支持,但无 riscv64 动态平台配置。本 PR 填补此空白,不重复 - 检查了当前 open PR,均与本 PR 的驱动/平台/IRQ/FDT 层无重叠
未发现 duplicate、superseded 或 conflict-risk 的相关 PR。
小建议(非阻塞)
STACK_SIZE从 16KB 增至 256KB,如有条件可记录实际使用深度后续优化register_local_irq中S_EXT => return false可加一行注释说明意图,方便后续维护page_table_entry的set_extended_flags重构后删掉了 Device/Normal 属性说明注释,建议保留简要属性描述
Powered by mimo-v2.5-pro
) * Add RISC-V support and IRQ handling improvements - Implemented IRQ handling for RISC-V architecture, including local IRQ registration and handling. - Introduced a virtual IRQ injector for hypervisor support. - Enhanced the IRQ interface to accommodate RISC-V specific requirements. - Added PLIC (Platform-Level Interrupt Controller) support for RISC-V, including initialization and IRQ management. - Updated the build system to support RISC-V targets and dynamic platform features. - Modified various configuration files to enable RISC-V features and ensure compatibility with existing systems. - Improved QEMU configuration for RISC-V to handle dynamic root filesystem patches. * fix(axvisor): enable riscv64 qemu platform feature in CI * fix(axvisor): boot riscv64 dynamic hv * feat(riscv64): support dynamic platform drivers * fix(ax-driver): correct feature handling for plat-static and plat-dyn * fix(somehal): use runtime CPU id for riscv64 PLIC context * fix(build): replace pci driver feature with plat-dyn in configuration * Refactor platform feature configurations across various board TOML files - Removed "plat-dyn" features from multiple configurations to streamline platform feature management. - Updated related build scripts to ensure compatibility with the new feature structure. - Adjusted tests to reflect the removal of deprecated features and ensure proper functionality. - Consolidated platform feature handling in build scripts to improve clarity and maintainability. * fix(build): remove unnecessary parameter from build_cargo_args call * feat: add riscv_goldfish dependency and support for Goldfish RTC * refactor(smp): replace cpu_idx with early_current_cpu_idx for better boot-time CPU identification * feat(build): add starry-kernel/input feature to the build configuration * refactor(axruntime): remove alloc feature, make it unconditional (rcore-os#985) alloc is needed by every consumer of axruntime. Remove the alloc feature entirely and make ax-alloc a required dependency. Propagating changes to axfeat to remove the now-unnecessary alloc forwarding from 15 features. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> * Remove range-alloc-arceos crate and its associated files (rcore-os#991) - Deleted LICENSE, LICENSE.APACHE, LICENSE.MIT, README.md, README_CN.md, and src/lib.rs files. - Removed tests and examples related to the range allocator functionality. * Refactor linker scripts and CI configuration (rcore-os#992) * refactor(linker-scripts): remove unused linker scripts for hello, irq, and smp kernels * refactor(ci): switch clippy and std tests to self-hosted runners * feat(deps): update spin to version 0.12.0 and bump other dependencies * feat: remove riscv64-qemu-virt references and update platform support in configuration --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Co-authored-by: ZCShou <72115@163.com>
背景
本 PR 补齐 RISC-V64
plat-dyn路径,并把ax-driver的平台发现模式收敛为显式的plat-static/plat-dyn。目标是让 QEMU virt、Axvisor RISC-V64 默认测试和 LicheeRV Nano SG2002 都走动态平台启动、FDT probe、IRQ/SMP/块设备初始化流程。修改内容
ax-driver增加plat-static/plat-dyn两个模式,移除旧的pci、fdt、pci-fdtfeature;PCI 和 INTC 作为基础能力保留,FDT 动态 probe 只在plat-dyn下编译。ax-driver/plat-static与ax-driver/plat-dyn时,build script 不再 panic,而是按plat-dyn优先输出cfg(plat_dyn),避免目标riscv64imac-unknown-none-elf下特性合并导致分析失败。somehal::driver::rdrive_setup()在运行时按 FDT 优先、ACPI RSDP 次之选择动态 source;无 source 时跳过 rdrive probe 并记录 warning。rdif_intc::Intc注册进rdrive,解析reg、riscv,ndev和interrupts-extended,为 FDT 设备提供 phandle IRQ specifier 到IrqId的转换。rdrive,同时新增ax_riscv_plic::PlicIrqHandler作为Send + Sync的无锁 IRQ handler;trap 回调只用该 handler 执行 claim/complete,不持有rdrive设备锁。ax_plat::percpu::this_cpu_id,并保留someboothart-id 映射作为早期初始化 fallback,避免调度后tp被线程上下文覆盖时在外部中断路径 panic。thead-maefeature,用于 T-Head MAE 非标准 PTE memory attribute;SG2002 dynamic 路径启用,QEMU rv64 dynamic 不启用。plat-dyn,并同步静态平台与测试配置里的ax-driver/plat-static/ax-driver/plat-dynfeature。axbuild对 dynamic platform、PIE rv64 target、Starry/Axvisor rootfs 参数处理和相关单测。upstream/dev后适配 Starry 入口改为经ax-runtime路由,并补齐 rv64somebootlinker 的.tdata/.tbssTLS 边界符号,满足 upstreamaxhal::tls符号契约。实现逻辑
pci/fdtfeature 组合出不可预期的半动态状态。plat-dyn是覆盖plat-static的更具体平台模式;当 Cargo/rust-analyzer 合并 features 时优先选择 dynamic cfg,比直接 panic 更适合 workspace 分析和 CI 检查。somehal::driver::rdrive_setup(),而不是继续用编译期 feature 分叉。rdif-intc/rdrive;中断入口的 claim/complete 需要无锁、可重入、低开销路径,所以抽出只含 MMIO base 和 context 映射的PlicIrqHandler,形态上对应 GIC 的 trap/CPU interface 静态操作对象。someboot通过tp保存 hart id;进入 ArceOS 运行期后tp会被任务/TLS 上下文使用,所以 PLIC 运行期中断必须使用 ax-percpu 的逻辑 CPU id,并用 ready mask 避开 secondary CPU 尚未完成 per-CPU 初始化的窗口。ERRATA_THEAD_MAE语义,而不是使用sg2002或sg200x这类板级名称。someboot提供的主链接脚本;合并 upstream TLS 初始化后,由 rv64 linker script 统一导出 TLS load/bss 边界,避免各平台在上层脚本里补零散符号。验证
cargo fmtgit diff --checkcargo check -p ax-driver --features plat-static,plat-dyn --target riscv64imac-unknown-none-elfcargo rustc -p ax-driver --features plat-static,plat-dyn --target riscv64imac-unknown-none-elf -- --print cfg:确认仅输出plat_dyncargo xtask clippy --package ax-riscv-plic:1/1 checks passedcargo xtask clippy --package someboot:7/7 checks passedcargo xtask clippy --package somehal:7/7 checks passedcargo xtask clippy --package ax-driver:39/39 checks passedcargo xtask clippy --package ax-runtime:21/21 checks passedcargo xtask clippy --package axplat-dyn:8/8 checks passedcargo xtask clippy --package starryos:12/12 checks passedcargo test -p axbuild:409 passedcargo xtask starry test qemu --arch riscv64 -c smoke:通过,匹配All tests passed!cargo xtask axvisor test qemu --arch riscv64:通过,SMP4 host + guest Linux 启动,匹配guest test pass!cargo xtask starry test board --board licheerv-nano-sg2002 -c boot:通过,进入riscv64-plat-dyn,SG2002 placeholder 映射 41 个 region,cvsd识别 MBR/rootfs 并挂载 ext4,最终匹配STARRY_SG2002_BOOT_OK