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包含五个子系统
内核源代码结构
参考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
基本功能&文档
初赛文档
决赛文档
项目成员
吉林大学
指导老师
- 胡俊成 jchu@jlu.edu.cn