2 个版本
0.0.2 | 2024 年 8 月 3 日 |
---|---|
0.0.1 | 2024 年 3 月 18 日 |
#613 在 硬件支持
134 每月下载量
210KB
4.5K SLoC
本crate包含主机端辅助工具以编写virtio-media设备以及完整的设备实现。
辅助工具和设备都是VMM独立的,并且依赖于实现了一些特质以在给定的VMM上操作。这意味着实现特定设备和在给定的VMM上支持所有virtio-media设备是两个完全正交的任务。添加对VMM的支持使得所有依赖于此crate的设备都可用。相反,使用此crate编写新设备使得它对所有支持的VMM都可用。
VMM需要实现的特质
- 描述符链必须实现其设备可读和可写部分的
Read
和Write
。这允许设备读取命令并写入响应。 - 事件队列必须实现
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