oskernel: add initial arch layer for riscv64 wrappers
This reverts commit 129a7747fce86b本 MR 在 oskernel/ 中引入初始 arch/ 架构分层,为后续支持 LoongArch64 的 kernel-la 做准备。
本次改动只做架构边界整理和低风险 wrapper 封装,不修改 EXT4、runner、syscall 语义逻辑,不修改 baseline-rcore。当前仍只有 RISC-V 参与实际编译和运行,LoongArch64 仅建立目录和 TODO 占位。
主要改动
- 新增 arch 目录结构
新增:
oskernel/os/src/arch/ mod.rs riscv64/ loongarch64/
其中:
arch/mod.rs 通过 #[cfg(target_arch = "riscv64")] 默认导出 arch/riscv64 arch/riscv64/ 提供当前 RISC-V 架构相关 wrapper arch/loongarch64/ 仅建立占位文件,暂不参与 RISC-V 编译 2. RISC-V 侧封装低风险架构接口
当前已封装接口:
pub fn shutdown() -> !; pub fn shutdown_failure() -> !; pub fn init_console(); pub fn console_putchar(c: u8); pub fn init_timer(); pub fn current_time() -> usize; pub fn set_next_timer(); pub fn init_trap();
这些 wrapper 内部继续调用原有 RISC-V 实现,包括:
SBI shutdown / failure shutdown UART init / putchar RISC-V time CSR timer interrupt 初始化 原 trap::init() 3. main 启动路径接入 arch wrapper
oskernel/os/src/main.rs 中启动初始化路径调整为:
arch::init_console(); arch::init_trap(); arch::init_timer(); arch::shutdown();
保持现有 RISC-V 行为不变。
- 通用层改为通过 arch 转发
以下模块中的 shutdown / console / timer 调用改为走 crate::arch::*:
oskernel/os/src/console.rs oskernel/os/src/timer.rs oskernel/os/src/lang_items.rs oskernel/os/src/task/mod.rs oskernel/os/src/fs/inode.rs 5. 新增架构状态文档
新增:
docs/ARCH_STATUS.md
记录内容包括:
当前 arch 分层状态 已封装 RISC-V wrapper 必须放入 arch/ 的架构相关内容 不迁移到 arch/ 的架构无关内容 后续 LoongArch64 最小启动目标 本轮验证结果 本 MR 不包含的内容
本 MR 不做以下修改:
不修改 EXT4 解析逻辑 不修改 VFS / 文件路径读取语义 不修改 runner 脚本解析和测试调度逻辑 不修改 syscall 语义实现 不修改文件描述符表 不实现 LoongArch64 启动 不实现 LoongArch64 trap / syscall / 页表 / 上下文切换 不修改 baseline-rcore 后续计划
下一阶段 LoongArch64 方向计划:
增加 kernel-la 构建目标 实现 LoongArch64 最小启动入口 实现 LoongArch64 串口输出 实现 LoongArch64 主动 shutdown 保持 RISC-V kernel-rv 当前行为和日志检查不回退
RISC-V 主线仍继续推进:
完整扫描 /glibc、/musl 自动发现 *_testcode.sh 串行执行测试脚本 继续补齐 syscall / runner 执行闭环 验证结果
已执行:
cd oskernel make kernel-rv
cd .. QEMU=$(which qemu-system-riscv64) bash scripts/run_ours.sh python3 scripts/check_ours_log.py --log logs/ours/qemu.log --strict-syscalls
验证结果:
make kernel-rv 通过 成功生成 oskernel/kernel-rv strict syscall trace 检查通过 logs/ours/exit_code.txt = 0 日志仍包含 EXT4 读取 /glibc/basic_testcode.sh runner 仍能解析第一条 busybox echo 命令 wait4 仍能成功回收 child:[runner] wait4 ret = 1 注意事项
当前日志没有出现独立的 busybox echo 输出行,只能看到 runner 解析出的:
OS COMP TEST GROUP START basic-glibc
同时 child 后续仍会触发已有 illegal instruction 并以 -4 退出。使用旧 os.bin 对照运行也呈现相同行为,因此判断该现象不是本 MR 的 arch 分层引入的变化。
本 MR 的目标是架构分层准备,不改变当前执行语义。09b77ada461b82f563d2c65305.