📄️ Lab 0:实验环境配置
实验环境
📄️ Lab 1:内核启动和 Printf 的实现
内核启动
📄️ Lab 2:MMU 设置和内存管理
设计内存布局
📄️ Lab 3:异常处理和进程管理
时钟中断
📄️ Lab 4:系统调用 / IPC 和 Fork
系统调用
📄️ Lab 5:文件系统
Lab 5 需要驱动 SD 卡,直接用两位学长中的 Sd.c 和 Sd.h就行。怎么用呢?我们需要像 MOS 一样,生成“磁盘”镜像文件,也就是 Sd 卡的镜像文件,生成镜像文件之后,就需要调整文件系统进程与镜像文件的交互方式,这里要调用 Sd.c 中的 sdRead 和 sdWrite,需要封装成系统调用,其他部分的代码几乎不需要做什么改动。
📄️ 后记
遗憾的是,最终并没有如我当初期盼的那样,在我自己的 FibOS 操作系统上运行 Shell,但这确实是我值得纪念的第一次移植经历。其实任务刚发布时,有不少小伙伴都希望来参与这项任务,甚至移植群的人数达到了一百余号人,可慢慢地,笔者发现身边仍在坚持的伙伴越来越少,不知道最终有没有超过三个,而移植的难度又越来越大,其实这种感觉真的挺绝望、挺孤独的,让我在受阻时无数遍想找退路,想要放弃,后悔当初为什么要参与进来,因为除了助教,几乎没有人可以交流,除了 riscv 标准和开源代码,也没有什么保姆级教程来学习。但想了想,还是咬牙坚持吧,毕竟当初选择 riscv,有很大原因就是因为它没有指导书,而没有指导书,就很可能没什么人做,没什么人做我就想做。最后陪我走下来的是另外两位移植 arm 的兄弟以及耐心解答了我无数问题的陈学长、郭学长。虽然很明显,我在 riscv 移植上取得的成果远远不如那两位兄弟,他们不仅运行了 Shell,还成功驱动起显示器来运行 Shell。比起他们,我的成果着实有些许寒酸。但毕竟我在其上面投入了很多,很多经历也被其消耗,这个学期我一大半的焦虑或许都来自于移植这项任务,另一小部分来源于龙芯杯,特别是近几天,我知道队友在等着我回去写核心,而移植几天又没什么进展,导致我整夜整夜地睡不着觉,昼夜颠倒,可能躺在床上两三点觉得睡不着起来写代码,因为我觉得我离通过文件系统就差临门一脚,而只要通过文件系统,我就有可能起来 Shell,但这一脚在答辩前也没有踢出去。