一个面向 ARM64 的 mini 操作系统实验项目。目标是参考 Linux 0.11 的结构和学习路径,从最小内核开始,逐步实现中断、内存管理、进程、系统调用、文件系统和 shell,最终移植到 Raspberry Pi 等真实硬件上运行。
第一阶段先支持 QEMU ARM64 virt 机器:
- ARM64 裸机启动入口
- 清空 BSS
- 设置内核栈
- 初始化 PL011 UART
- 最小日志/printf 模块
- ARM64 异常向量表
- GICv2 IRQ 分发
- ARM generic timer
- 每秒打印 timer tick
.
├── Makefile
├── linker.ld
└── src
├── boot.S
├── drivers
│ └── uart.c
├── include
│ ├── irq.h
│ ├── log.h
│ ├── timer.h
│ └── uart.h
└── kernel
├── exception.S
├── irq.c
├── log.c
├── main.c
└── timer.c
macOS 上建议安装:
brew install llvm lld qemu如果 clang 或 llvm-objcopy 不在 PATH 中,可以把 Homebrew LLVM 加入 PATH:
export PATH="$(brew --prefix llvm)/bin:$PATH"make生成物:
build/minios-arm.elf:QEMU 调试用 ELFbuild/kernel8.img:后续 Raspberry Pi 启动镜像
make run预期输出:
[info] miniOS ARM64 booting...
[info] initializing interrupts and timer
[info] timer frequency 62500000 Hz
[info] timer interrupt enabled
[info] tick 1
[info] tick 2
退出 QEMU:
Ctrl-A X
- QEMU ARM64 最小启动和 UART 输出。
- 移植到 Raspberry Pi 3B / Zero 2 W,生成
kernel8.img上板启动。 - 加入异常向量和定时器中断。
- 实现物理页分配和 ARM64 页表,开启 MMU。
- 实现内核线程和简单调度器。
- 加入 EL0 用户态、系统调用和第一个用户程序。
- 实现 ramfs、init 和简易 shell。
本项目不直接移植 Linux 0.11 的 x86 代码,而是借鉴它的学习路径和内核结构。Linux 0.11 的启动、中断、分页和任务切换代码都强绑定 x86,树莓派使用 ARM64,需要重新实现底层架构相关部分。