NoobKernel¶
一个用于学习操作系统内核开发的 RISC-V 64 位裸机内核项目。
项目简介¶
NoobKernel 是一个从零开始构建的 RISC-V 64 位操作系统内核,旨在帮助开发者深入理解内核开发的核心概念和技术细节。项目采用模块化设计,结构清晰,适合作为学习操作系统原理的教学案例。
特性¶
已实现功能¶
- 内存管理
- 物理内存管理器(page 结构数组)
- Buddy 分配器(支持 4KB~8MB 连续内存分配)
- Slab 分配器(高效的小对象内存分配)
- 内核虚拟内存管理(Sv39 三级页表)
- VMA(虚拟内存区域)管理
-
块设备缓冲区缓存(bcache)
-
硬件抽象层
- RISC-V CSR 寄存器操作封装
- SBI(Supervisor Binary Interface)调用接口
- PLIC 中断控制器驱动
- VirtIO 块设备驱动
-
定时器管理
-
进程管理
- 进程结构体与生命周期管理
- 内核线程创建与退出
- 进程上下文切换
- 运行队列与调度器
-
多核 CPU 支持(SMP)
-
中断与异常
- 内核态中断处理(kernelvec)
- 用户态中断处理(trampoline)
- 定时器中断调度
-
外部中断分发(VirtIO 等)
-
同步机制
- 自旋锁(spinlock)
- 原子操作(atomic)
-
内存屏障(barrier)
-
文件系统
- VFS(虚拟文件系统)框架
- inode/dentry/file 抽象
- ramfs 内存文件系统
-
文件描述符表管理
-
基础工具库
- 标准类型定义(stdint.h)
- 双向循环链表(list.h)
- 哈希表(hashtable.h)
- 基数树(radix_tree.h)
- 位图操作(bitmap.h)
- 字符串操作(string.h)
- 日志系统(log.h)
待实现功能¶
- 用户态进程支持
- 系统调用接口(POSIX 兼容)
- 进程间通信(管道、信号量、共享内存)
- 异步 I/O
- 更多文件系统(ext2、FAT32 等)
目录结构¶
NoobKernel/
├── src/ # 源代码
│ ├── boot/ # 启动模块
│ ├── mm/ # 内存管理
│ ├── hal/ # 硬件抽象层
│ ├── task/ # 进程管理
│ ├── trap/ # 中断处理
│ ├── sync/ # 同步机制
│ ├── fs/ # 文件系统
│ ├── syscall/ # 系统调用(待实现)
│ ├── ipc/ # 进程间通信(待实现)
│ ├── async/ # 异步机制(待实现)
│ └── misc/ # 基础工具库
├── include/ # 头文件
│ ├── platform/ # 平台相关配置
│ ├── mm/ # 内存管理头文件
│ ├── hal/ # 硬件抽象层头文件
│ ├── task/ # 进程管理头文件
│ ├── trap/ # 中断处理头文件
│ ├── sync/ # 同步机制头文件
│ ├── fs/ # 文件系统头文件
│ ├── misc/ # 基础工具库头文件
│ └── config.h # 全局配置
├── scripts/ # 辅助脚本
│ └── kernel.ld # 链接脚本
├── Makefile # 主 Makefile
├── rules.mk # 编译规则
快速开始¶
环境要求¶
- RISC-V 64 位交叉编译工具链(riscv64-unknown-elf-gcc)
- QEMU riscv64 模拟器
- Python 3
- Make
编译与运行¶
# 编译内核
make
# 在 QEMU 中运行
make run
# 带 GDB 调试运行
make debug
详细的环境搭建和编译说明请参阅 开发环境搭建 和 编译与运行。
学习路径¶
推荐的学习顺序:
- 入门阶段:阅读 开发环境搭建,搭建开发环境
- 理解架构:阅读 架构总览,了解整体结构
- 深入模块:按顺序阅读模块文档:
- 启动模块 - 了解内核如何启动
- 内存管理 - 理解内存分配机制
- 硬件抽象层 - 学习硬件接口抽象
- 进程管理 - 理解进程与调度
- 中断处理 - 学习中断机制
- 文件系统 - 理解 VFS 框架
技术架构¶
NoobKernel 采用层次化设计:
┌─────────────────────────────────────┐
│ 应用层(待实现) │
├─────────────────────────────────────┤
│ 系统调用层 │
├─────────────────────────────────────┤
│ 文件系统 │ 进程管理 │ 同步机制 │
├─────────────────────────────────────┤
│ 内存管理 (MM) │
├─────────────────────────────────────┤
│ 中断处理 │ 硬件抽象层 │
├─────────────────────────────────────┤
│ 基础工具库 (misc) │
├─────────────────────────────────────┤
│ 硬件平台 (QEMU virt) │
└─────────────────────────────────────┘
参考资源¶
- RISC-V 规范
- xv6-riscv - MIT 教学操作系统
- Linux 内核 - 参考 VFS 和内存管理设计
- Operating Systems: Three Easy Pieces - 操作系统教材