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
  • #3
Closed
Open
Issue created Apr 02, 2026 by 孙浩宇@shyliuliMaintainer

子 issue #3:Boot 启动与早期初始化

子 issue #3 (closed):Boot 启动与早期初始化

描述

实现 LoongArch64 的启动流程,能在 QEMU 上输出 "Hello World" 并进入 rust_main。

依赖

  • #2 (closed)(编译基础设施与架构骨架完成)

需要实现的文件

文件 说明
kernel/src/arch/loongarch64/boot/entry.S LoongArch 启动汇编入口:设置栈、配置 DMW、跳转到 Rust
kernel/src/arch/loongarch64/boot/linker.ld LoongArch 链接脚本(定义内存布局、导出段符号)
kernel/src/arch/loongarch64/io.rs UART 16550 串口输出实现(QEMU virt 串口地址:0x1FE001E0)
kernel/src/arch/loongarch64/mod.rs rust_main 真正的初始化流程(BSS 清零→堆初始化→串口初始化→打印)
kernel/src/arch/loongarch64/memory.rs clear_bss() 实现

关键技术点

  • 启动地址: QEMU virt 平台内核直接加载到 0x9000000000200000(通过 DMW 映射的物理地址 0x00200000 附近)
  • DMW(直接映射窗口)配置:
    • CSR.DMW0: 通常配置为 0x9000000000000000 映射到物理 0x0(非缓存一致/缓存一致)
    • CSR.DMW1: 可配置第二个窗口用于 I/O 空间
    • 通过 DMW 实现内核地址空间的固定映射,无需早期页表
  • 栈初始化: 在汇编中设置 $sp 指向预分配的 boot stack
  • BSS 清零: 使用 linker script 导出的 sbss/ebss 符号
  • 串口输出: QEMU virt 的 16550 UART 兼容串口
  • QEMU 启动命令:
    qemu-system-loongarch64 -machine virt -nographic -kernel kernel-la -m 1G

参考

  • QEMU LoongArch virt 平台文档
  • Linux Kernel arch/loongarch/kernel/head.S
  • PolyHAL 的 loongarch64 boot 实现
  • 龙芯架构参考手册卷一 - 地址空间章节

完成标准

make run ARCH=loongarch64 在 QEMU 中:

  1. 串口输出可见文字(至少 "Hello World")
  2. 内核进入 rust_main 不 panic
  3. 能正常调用 arch::cpu::halt() 进入循环

父任务:#1

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