-
Yinary authored
## 改动原因 仓库此前只有协作文档,没有代码。本 PR 引入双架构启动骨架,让内核在 riscv64 和 loongarch64 上都能编译、启动,通过启动自检后打印一行信息并经 QEMU 关机退出,为后续模块(调度、内存管理、系统调用)搭好最小地基。只做到"能启动",不含任何新功能。 ## 改动思路 - 硬件抽象层用 PolyHAL(crates.io 0.4.0)+ polyhal-boot / polyhal-trap,架构差异(早期页表、DTB 解析、多核拉起、trap 初始化)全部由其吸收,内核代码双架构共用。 - workspace 单 crate:`kernel/`;`make all` 一次构建两架构,产出仓库根目录 `kernel-rv` / `kernel-la`。 - 内核堆为固定 8 MiB 静态区(AGENTS.md 中 `static mut` 禁令的约定例外,帧分配器就绪前堆只能来自内核镜像),页帧分配用 buddy_system_allocator,并注册给 PolyHAL 供创建页表。 - 修复了参考实现 `add_frame_range` 的区域求交 bug:起点改为 `max(mm_start, _end)` 向上对齐到页,避免把不属于该区域的内存登记进分配器。 - 新增 CI(build.yml):格式检查 + 双架构构建,pull_request 与 push main 触发。 - 改编自 PolyHAL example 的 `build.rs`、`linker.lds`、`mm/frame.rs` 已在文件头声明来源,各依赖 crate 协议登记于 README 第三方代码声明表。 ## 测试结果 本地实测(QEMU:riscv64 9.2.1 / loongarch64 10.0.2): - `make clean && make all`:两架构编译通过,生成 kernel-rv / kernel-la - `timeout 60 make run-rv`:打印 `OuroOS v0.1.0 · riscv64 · boot hart N · 4 cpus · boot ok`,QEMU 自行退出(exit 0) - `timeout 60 make run-la`:同上(loongarch64) - `cargo fmt --all -- --check`:无输出 - clippy:riscv64 无 warning;loongarch64 仅 2 条来自 RUSTFLAGS(`-C target-feature=-lsx,-lasx`)的固有提示,非代码问题 - 回归测试:不适用(首个引入代码的 PR) - 未测试:build.yml 在 GitHub Actions 上的实际运行(YAML 语法已本地校验,本 PR 将首次触发) ## 影响与风险 - 除 README / AGENTS.md / CONTRIBUTING.md 三处文档小节外全部为新增文件,不修改已有内容,无回归风险。 - 已知问题:loongarch64 构建有 2 条 unstable target-feature warning(禁用 LSX/LASX 的必然产物,消除需改构建方案);内核堆固定 8 MiB,已标 TODO(yinary) 待从页帧分配器扩展。 - boot hart 编号随 QEMU 启动核变化,README 已注明。
After you've reviewed these contribution guidelines, you'll be all set to
contribute to this project.