clang-format
尹健徽 authored
810a22c6

10183_BOOT OS Kernel

概述

10183_BOOT Kernel是由吉林大学三名本科生共同开发的基于xv6的RISCV64操作系统内核,提供了部分linux系统调用。

在初赛阶段,我们修改原有的xv6的文件系统(类似 Unix)并移植了FAT32文件系统,完成了评测所需的全部系统调用。

初赛

  • 移植FAT32

  • 支持openSBI引导启动

  • 官方测例 102/102

决赛一阶段/二阶段

  • 移植ext4文件系统
  • busybox
  • libctest
  • VisionFive上板

感兴趣的优化点

  • 将xv6的宏内核转为微内核
  • 设计一套优雅的VFS接口,兼容FAT32和EXT4文件系统以及更加现代的文件系统
  • 优化页分配、淘汰算法
  • 优化任务调度(目前是简单的RR,或许可以像rCore整个stride优先级调度?)

系统架构

10183_BOOT包含五个子系统

arch

内核源代码结构

参考linux目录划分

.
├── Makefile
├── block
├── busybox_unstripped
├── docs
│   ├── final
│   ├── img
│   └── pre
├── drivers
├── fs
│   ├── fat32
│   ├── lwext4
│   └── vfs
├── include
│   ├── block
│   ├── defs.h
│   ├── fs
│   │   ├── fat32
│   │   ├── lwext4
│   │   └── vfs
│   ├── init
│   │   └── sbi.h
│   ├── ipc
│   │   └── signal.h
│   ├── kernel
│   │   ├── atomic
│   │   ├── ...
│   ├── mm
│   ├── platform
│   │   ├── qemu
│   │   └── visionfive
│   ├── syscall
├── init
├── ipc
├── kernel

├── lib
├── linkscript
├── mm
├── platform
│   ├── qemu
│   └── visionfive
├── scripts
├── sdcard.img
├── target
├── test
└── user

include/目录包含了建立内核代码时所需的大部分包含文件,并按照模块划分

init/ 子目录包含了内核的初始化代码,这是内核开始工作的起点

drivers/ 目录包含了内核中所有的设备驱动程序,包括block,net,console

fs/ 目录包含了所有文件系统的代码,包括ext4,fat32, vfs模块的代码

mm/ 目录包含了所有的内存管理代码

ipc/ 目录包含了进程间通信的代码

kernel/ 目录包含了主内核代码,包括进程管理,原子操作,系统调用

lib/ 目录包含常用库函数,如string.c,printf.c

platform/ 目录包含与平台相关的代码,分为qemu部分和VisionFive2部分。

user/ 目录中包含用户程序

环境与配置

  • 交叉编译器 riscv64-unknown-elf-gcc
  • QEMU模拟器 qemu-riscv64,最好是7.0以上,开发时遇到过低版本无法运行的问题
  • RISC-V GCC编译链

快速开始

  • 需要事先准备好文件系统镜像,并在qemu启动参数中指定路径

在QEMU上运行,默认CPU为4

make run

Debug,需要配置好文件.gdbinit.tmpl-riscv 和 .gdbinit

# 终端1
make qemu-gdb
# 终端2
gdb-multiarch -x .gdbinit
# 后续建议开启 layout 方便调试,命令是 layout split 

基本功能&文档

初赛文档

决赛文档

项目成员

吉林大学

指导老师

参考