Skip to content
  • Yinary's avatar
    feat(boot): 引入双架构启动骨架 (#2) · ffd629b8
    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 已注明。
    ffd629b8
After you've reviewed these contribution guidelines, you'll be all set to contribute to this project.