Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • O OSKernel2026-NameNotFound
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 8
    • Issues 8
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • NameNotFound
  • OSKernel2026-NameNotFound
  • Issues
  • #2
Closed
Open
Issue created Apr 02, 2026 by 孙浩宇@shyliuliMaintainer

子 issue #2:构建系统与 target 基础设施

子 issue #2 (closed):编译基础设施与架构抽象解耦

描述

为 LoongArch64 搭建 cargo check 级别 可编译的最小骨架,同时完成 trapframe 依赖解耦。不要求链接通过,不要求能运行。

前置条件

  • 安装内建 target:rustup target add loongarch64-unknown-none
  • 将 trapframe-rs vendor 到仓库内 crate/trapframe/,通过 [patch] 接管依赖

需要修改的文件

构建系统

文件 动作 说明
kernel/Makefile 修改 添加 ifeq ($(ARCH), loongarch64) 分支:设置 target、qemu 路径、QEMU 选项
kernel/build.rs 修改 添加 loongarch64 条件:cargo:rustc-cfg=loongarch64、linker script 路径
kernel/Cargo.toml 修改 添加 [target.'cfg(target_arch = "loongarch64")'.dependencies] 段
kernel/src/lib.rs 修改 添加 #[cfg(target_arch = "loongarch64")] #[path = "arch/loongarch64/mod.rs"] pub mod arch;

trapframe 解耦

文件 动作 说明
crate/trapframe/ 新建 vendor trapframe-rs,添加 loongarch64 类型定义(TrapFrame/UserContext/GeneralRegs 结构体,无需汇编实现)
kernel/Cargo.toml 修改 trapframe 改为 path 依赖或通过 [patch] 指向本地

架构骨架模块(全部新建,函数体均为 stub)

文件 导出接口
kernel/src/arch/loongarch64/mod.rs 声明所有子模块,定义 rust_main 入口桩
kernel/src/arch/loongarch64/cpu.rs id(), halt(), exit_in_qemu(), reboot(), send_ipi(), set_cpu_id()
kernel/src/arch/loongarch64/interrupt/mod.rs enable(), disable_and_store(), restore(), wait_for_interrupt(), ack(), timer(), enable_irq(), get_trap_num(), handle_user_page_fault_ext(), handle_reserved_inst()
kernel/src/arch/loongarch64/interrupt/consts.rs 异常号常量 + 判断函数 (Syscall, Timer, is_page_fault() 等)
kernel/src/arch/loongarch64/paging.rs PageTableImpl (实现 PageTable/PageTableExt trait)、PageEntry
kernel/src/arch/loongarch64/memory.rs init(), init_other(), clear_bss(), get_page_fault_addr(), set_page_table()
kernel/src/arch/loongarch64/fp.rs FpState (new/save/restore)
kernel/src/arch/loongarch64/signal.rs MachineContext, RET_CODE, set_signal_handler()
kernel/src/arch/loongarch64/syscall.rs LoongArch 系统调用号常量 (~295个 SYS_*)
kernel/src/arch/loongarch64/timer.rs timer_now(), get_cycle(), init(), set_next()
kernel/src/arch/loongarch64/io.rs putfmt()
kernel/src/arch/loongarch64/consts.rs PHYSICAL_MEMORY_OFFSET, KERNEL_OFFSET, KERNEL_HEAP_SIZE, MEMORY_OFFSET, MEMORY_END, USER_STACK_*, ARCH 等
kernel/src/arch/loongarch64/rand.rs rand() -> u64
kernel/src/arch/loongarch64/board/mod.rs init(), init_external_interrupt() stub
kernel/src/arch/loongarch64/boot/ 空入口汇编占位 + linker script 占位
kernel/src/arch/loongarch64/compiler_rt.rs abort()

关键设计决策

  1. target 选择: 使用内建 loongarch64-unknown-none,不自定义 JSON(等遇到 ABI/code model 问题再新增)
  2. trapframe 策略: vendor 到仓库内,为 loongarch64 添加类型定义分支;通用代码暂不迁移 import 路径(留给后续 issue)
  3. stub 原则: 所有函数体 todo!() 或返回默认值,只追求类型检查和 cargo check 通过

完成标准

ARCH=loongarch64 BOARD=qemu cargo check --target loongarch64-unknown-none

编译通过(允许 warning,不允许 error)

不包含(属于后续 issue)

  • 任何真正的硬件交互实现
  • trap entry/exit 汇编
  • 页表格式实现
  • 上下文保存/恢复
  • QEMU 启动

父任务:#1

Edited Apr 04, 2026 by 孙浩宇
Assignee
Assign to
Time tracking