Virtio Gpu驱动移植
计划
移植准备分两步完成:首先是在 rCore-N 的源码树里面集成进 virtio-drivers 中关于 gpu 的部分,然后是根据前一步对驱动的熟悉,考虑哪些部分可以异步实现,准备是在赵方亮老师的共享调度器基础上来实现异步。
将 virtio-driver 移植到 rCore-N
首先要做的是让 virtio-drivers 能在 rCore-N 里面正常运行,借此熟悉 virtio gpu 的原理和具体实现。
没有直接采用在 Cargo.toml 中引用 virtio-drivers 的方式原因有二:
- 后续想要在此基础上改成异步,先直接集成源码后续修改感觉方便些。
- virtio-drivers 本身只提供了和硬件( 这里是 qemu )打交道的部分,和应用程序交道的部分是以 example 的形式给出的,而我们的目标是给定一个用户空间可用的完整驱动。
关于驱动的定义
先清晰一下驱动程序的概念:驱动程序本身可以位于操作系统内核或是用户空间,对riscv系统来说,即可以执行在S(M)态,也可以在U态执行。驱动程序各组成部分,按服务对象不同,可以粗略分为面向设备的部分和面向用户程序的部分。面对设备的部分根据硬件提供的参数完成硬件的初始化、启动、停止、探测、移除等工作,后续我们将这部分代码放在device的部分。面向用户程序的部分主要提供接口给用户程序调用,完成控制和使用相关的功能,这部分代码准备放在driver目录。
virtio gpu 设备
virtio gpu 设备,在 qemu 中是使用 mmio 的方式挂载到我们的操作系统里面的。因此它依赖于 virt mmio设备。目前 device 部分的目录结构如下:
其中 virtio gpu 相关的部分有 bus/virtio、graphics和 plic.rs。
bus/virtio :bus目录存放各种总线设备的驱动,目前仅virtio,后续可扩展到其他,诸如spi、usb等等。virtio目录下有以下内容:
- virtio_impl: 当前os下,virtio设备通用的实现。
- Dma: