2 个版本

0.0.2 2024 年 8 月 3 日
0.0.1 2024 年 3 月 18 日

#613硬件支持

Download history 122/week @ 2024-07-29 12/week @ 2024-08-05

134 每月下载量

BSD-3-Clause

210KB
4.5K SLoC

本crate包含主机端辅助工具以编写virtio-media设备以及完整的设备实现。

辅助工具和设备都是VMM独立的,并且依赖于实现了一些特质以在给定的VMM上操作。这意味着实现特定设备和在给定的VMM上支持所有virtio-media设备是两个完全正交的任务。添加对VMM的支持使得所有依赖于此crate的设备都可用。相反,使用此crate编写新设备使得它对所有支持的VMM都可用。

VMM需要实现的特质

  • 描述符链必须实现其设备可读和可写部分的 ReadWrite。这允许设备读取命令并写入响应。
  • 事件队列必须实现 VirtioMediaEventQueue 特质,以便设备可以向客户机发送事件。
  • 客户机内存必须通过 VirtioMediaGuestMemoryMapper 的实现来访问。
  • 如果主机支持将MMAP缓冲区映射到客户机地址空间,则可以选择实现...

这些特质允许任何实现 VirtioMediaDevice 的设备在任何实现它们的VMM上运行。

设备的结构

设备通过实现 VirtioMediaDevice 来提供创建和关闭会话的方法,以及使MMAP缓冲区对客户机可见的方法(如果支持)。它们通常还实现 VirtioMediaIoctlHandler 并使用 virtio_media_dispatch_ioctl 来简单地处理ioctls。

然后VMM使用 VirtioMediaDeviceRunner 来请求它处理命令队列上的命令。

通过遵循此模式,设备无需关心反序列化和验证virtio-media协议。相反,它们的相关方法在需要时调用,在验证后的输入上,而协议错误则在上游以对所有设备一致的方式处理。

此crate中当前包含的设备有

  • 一个代理任何主机V4L2设备的设备,位于 crate::v4l2_device_proxy 模块中。

依赖关系

~5MB
~107K SLoC