MinixRV64 Donz Build:一个可运行的RISC-V 64微内核教学系统
项目地址:GitHub - yangdongstation/MinixRV64: MinixRV64
项目定位:这是一个学习向的Unix风格操作系统,核心创新在于将 Minix微内核思想 (服务隔离、消息传递)与 Linux ABI用户态兼容 (musl libc、标准syscall)相结合。目标是在MilkV Duo开发板上打造一个既能教学又能运行真实Linux程序的微内核系统。
最新里程碑:Stage 2 进程管理框架完成!
2025年12月11日,项目完成了进程管理核心架构,实现了O(1)优先级调度器、完整的fork/exit机制和ELF加载框架。目前系统可在QEMU中启动,进入交互式Shell,支持16个命令和ramfs文件系统。当前功能完整度约40%,基础框架已能演示多任务切换。
核心设计:融合经典与现代
| 设计层面 | 采用方案 | 教学价值 |
|---|---|---|
| 内核架构 | Minix微内核 | 代码量小(~5k行),模块清晰,易理解IPC机制 |
| 系统调用 | Linux ABI兼容 | 直接使用musl libc,可运行为Linux编译的程序 |
| 硬件平台 | MilkV Duo CV1800B + QEMU | 支持真实硬件与虚拟化调试,降低学习门槛 |
| 内存模型 | 物理地址模式(当前) | 暂时禁用MMU,便于调试,Stage 3再引入Sv39 |
已实现功能(可直接演示)
基础架构:RISC-V S模式启动、中断异常处理、UART驱动(输入/输出均正常)
进程管理:64进程上限、PID分配器、task_struct(70+字段)、内核线程
O(1)调度器:active/expired优先级队列、时间片轮转、schedule()框架
VFS+ramfs:完整的路径解析、mkdir/ls/cat等16个Shell命令
ELF加载器:验证、段加载框架(待VFS集成后可直接加载用户程序)
启动效果:
✓ O(1) Scheduler
✓ Fork subsystem
Minix RV64 ready
✓ Shell
minix# ps
PID PPID STATE CMD
1 0 R [init]
2 0 S [idle]
3 1 R sh
当前挑战与求助点
内存管理:kmalloc存在bug,目前用静态数组workaround,急需修复slab allocator
调度器集成:O(1)调度器框架已完成,但未完全接入主循环,需review代码
Copy-on-Write:Fork缺少COW,直接复制页表,Stage 3需实现缺页异常处理
用户态支持:MMU和syscall用户态返回路径(eret_to_user)待完善
详见BUGS.md,欢迎社区开发者指导!
技术细节亮点
- 进程栈布局:8KB内核栈,
thread_info置于栈底,trapframe置于栈顶,符合Linux惯例 - 数据结构设计:
task_struct复用Linux字段布局,降低musl移植难度 - 构建系统:支持
make BOARD=qemu-virt与make BOARD=milkv-duo一键切换 - 调试友好:提供
make qemu-gdb+make gdb组合,GDB脚本自动加载符号
开发路线
- Stage 3:修复kmalloc、实现COW、Sv39页表、mmap/munmap
- Stage 4:用户态程序运行、信号处理、完整syscall表
- Stage 5:musl libc静态链接、动态链接框架
- Stage 6:EXT2/FAT32、网络协议栈、多核SMP
如何参与
适合人群:学习RISC-V架构、操作系统原理的开发者,希望为教学内核贡献代码
快速开始:
git clone https://github.com/yangdongstation/MinixRV64
make qemu # 2分钟内看到交互式Shell
贡献方向:
- 修复kmalloc/slab内存分配器(高优先级)
- 完善O(1)调度器与主循环的集成
- 实现Copy-on-Write Fork
- 添加更多Linux syscall兼容层
- 撰写中文/英文实验教程
许可证:BSD开源,基于Minix
项目状态:
活跃开发中 | 最后更新:2025-12-11 | Star:期待社区关注!
诚挚邀请RISC-V开发者社区审阅代码、提出建议!