Skip to content

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

详细的环境搭建和编译说明请参阅 开发环境搭建编译与运行

学习路径

推荐的学习顺序:

  1. 入门阶段:阅读 开发环境搭建,搭建开发环境
  2. 理解架构:阅读 架构总览,了解整体结构
  3. 深入模块:按顺序阅读模块文档:
  4. 启动模块 - 了解内核如何启动
  5. 内存管理 - 理解内存分配机制
  6. 硬件抽象层 - 学习硬件接口抽象
  7. 进程管理 - 理解进程与调度
  8. 中断处理 - 学习中断机制
  9. 文件系统 - 理解 VFS 框架

技术架构

NoobKernel 采用层次化设计:

┌─────────────────────────────────────┐
│           应用层(待实现)           │
├─────────────────────────────────────┤
│            系统调用层               │
├─────────────────────────────────────┤
│  文件系统 │ 进程管理 │ 同步机制     │
├─────────────────────────────────────┤
│         内存管理 (MM)               │
├─────────────────────────────────────┤
│      中断处理 │ 硬件抽象层          │
├─────────────────────────────────────┤
│         基础工具库 (misc)           │
├─────────────────────────────────────┤
│         硬件平台 (QEMU virt)        │
└─────────────────────────────────────┘

参考资源