当前大学本科学生做OS实验的一个问题是对底层硬件不够了解,如果能够通过实践实现一个能运行OS的CPU模拟器,那在后续对CPU与OS的交互会理解更加清晰和透彻。如果这个模拟器还能提供相应的调试分析功能,那么会大大简化对OS学习和实验的难度。
为此,我们采用了如下的规划思路:
- 我们选择了能帮助OS设计实现的RISC-V硬件模拟平台
- 在软件编程语言方面,我们选择了Rust编程语言
- 尽量比较全面地支持与OS相关的硬件模块
当前项目实现源码:
2021全国大学生操作系统比赛的“OS功能设计”赛道
- 以小组为单位参赛,最多三人一个小组,且小组成员是来自同一所高校的本科生(2021年春季学期或之后本科毕业的大一~大四的学生)
- 如学生参加了多个项目,参赛学生选择一个自己参加的项目参与评奖
- 请遵循“2021全国大学生操作系统比赛”的章程和技术方案要求
李旸
初等~中等
- RV32/64I
- MADFC
- M/S/U priviledge
- Pass all riscv_tests
- CLINT and Timer
- HTIF console
- FDT generation
- Multi Cores
- Boot Linux(up)
- Emu mode binary
- Boot Linux(smp)
- PLIC
- VirtIO console
- VirtIO disk
- VirtIO network
- framebuffer
- VirtIO keyboard
- VirtIO mouse
- Cosimulation with HDL
- MIT license
在现有terminus的基础上,进一步完成如下目标:
- 该题目请参考trantor, 帮你一步一步实现自己的模拟器
- 与导师协商,形成一系列的小步骤,参考目前的代码,重新按小步骤实现RISC-V模拟器
- 在每个步骤完成后,能够有测试用例,并尽量与OS课程中涉及的内容相关
- 撰写实验设计与分析文档
- 对terminus增加基于OPENOCD+GDB的调试功能
- 能够使用cargo的测试框架通过riscv-test/debug 的所有test
- 能够通过GDB/LLDB来在terminus上对APP(U态)、OS(S态)、SBI(M态)进行源码级调试
- 能够跨U/S/M态综合调试APP/OS/SBI
- 撰写实验设计与分析文档
- 在SMP/多核模式下,能分析死锁情况
- 能记录并分析系统出现crash时,模拟器保存的最近的N条指令的机器执行状态,帮助定位出错原因
- 在SMP/多核模式下,能快速重现并分析同步互斥异常的情况
- 支持对Kendryte K210开发板的模拟
- 支持对SFIVE开发板的模拟
- 移植一种sbi实现,例如opensbi,到terminus仿真器
- 可以通过该sib实现 boot linux
- 可参考terminus_bl
- 在terminus上增加RVV
- 能够使用cargo的测试框架通过riscv-test 中的vector测试
- 通过ffi+dpi,使terminus可以运行在verilog/systemverilog环境中
- 可以在verilog/systemverilog环境中,控制terminus,指定特定core执行特定步长,可以出发terminus的中断,可以获取terminus的状态等
- 任选rtl simulator, 如verilator, vcs, xrun等
- 可以尝试实现verilog/systemverilog的device + terminus的协同仿真
- 可参考terminus_cosim, vfw_rs, mailbox_rs