开发计划与重大进展

计划

日期计划
7.5-7.11查看 Rocket 的实现,确定中断的实际响应逻辑和 PLIC 的功能;在 rCore-N 中完成用户态中断实现的信号
7.12-7.18分析 PLIC 的实现和如何工作,应如何操作 PLIC
7.19-7.25在 rCore-N 中实现内核对用户态中断的管理机制,实现基本的演示程序
7.26-8.1在 rCore-N 中实现用户态软件中断和时钟中断的应用,设计演示程序
8.2-8.8在 FPGA 中实现相同功能,对 rCore-N 进行多核改造
8.9-8.15继续完成 rCore-N 的多核改造,完善测试程序
8.16-8.18完善测试程序和文档

进展

2021-04-28

lvr-rust-bl 编写完成,成功在 FPGA 中运行 rustsbi 为依赖的 bootloader。

2021-05-25

解决在 QEMU 模拟器中循环进入用户态中断的问题,触发用户态软件中断可以正常进入和退出中断处理程序。

2021-07-11

修改 rustsbi-qemu,放通增加的串口与 PLIC 所在地址。

2021-07-12

讨论决定参考 sgmarz/osblog 使用 PLIC。

开始分析 QEMU 和 FPGA 中 PLIC 的实现方式,确定 PLIC 的大致使用方式。

2021-07-18

将操作 PLIC 的基本 rust 代码整理,拆为 rv-plic crate 以方便后期复用。

在 QEMU 中增加 PLIC 的用户态上下文,并在 rCore-N 中增加相应驱动。

在 rCore-N 中添加内核对用户态中断上下文的保存与恢复机制、用户态中断的默认处理函数,增加向内核注册中断的系统调用。

2021-07-22

将操作串口的基本 rust 代码整理,拆为 uart-rs 项目,方便内核和用户态的复用。

2021-07-25

在 QEMU 模拟器中增加串口,并将一个串口完全交由用户态进程控制,接收 PLIC 传入的用户态外部中断,并将数据再输回串口。

2021-07-27

用户态三种中断皆可用,内核使用中断来向用户态进程传递 IPC 信号。并且初步实现一个用户态进程向另一个控制串口的用户态进程发送信息并显示的示例程序。

2021-08-03

成功启动多核,但由于任务队列实现有误无法正常实现。

2021-08-04

在 verilator 模拟器中成功运行增加了 N 扩展支持的 FPGA 实现。发现模拟器会给寄存器赋随机初值,尝试修改相关初始化代码。

2021-08-11

在 QEMU 模拟器中基本完成 rCore-N 的多核改造,开始往 FPGA 上移植。初步完成 FPGA 中串口的用户态驱动。

2021-08-14

增加 (pid, task) 的映射表,并修改 find_task 的实现。

FPGA 中串口有 Uart Lite 换为 16550 以解决速率慢的问题。

解决多核的死锁问题,成功运行并退出编写的 uart_ext 示例程序。