这是情况。我/dev/video0
在 VMware 服务器上有一个视频设备,我想从虚拟机中访问该设备。但是,无论出于何种原因,我都无法将设备直接连接到 VM,它必须连接到主机。
由于在 unix 哲学下,一切都只是一个文件,我可以/dev
在两台主机之间使用 NFS、Samba、sshfs 或其他协议共享设备,以便一台服务器上的 linux 可以访问不同服务器上的设备吗?
不。
您可以通过 NFS 或其他一些网络文件系统导出设备文件。但是设备文件的含义取决于您打开它的机器。如果您/dev/video0
通过 NFS 从服务器机器导出到客户端机器,客户端机器只会看到“字符设备 81:0”,并将其解释为自己的视频捕获设备。客户端机器甚至不需要与服务器分配相同的设备编号;例如,OpenBSD 客户端会看到与伪终端驱动程序相同的文件,因为这就是 OpenBSD 下的 char 81:0 。
你所要求的会很好,但也很难。客户端上的每个请求都必须转发到服务器,反之亦然。个别驱动程序必须有特定的支持。例如,一些驱动程序依赖于进程和内核之间的共享内存,并且在许多情况下支持跨网络透明将是困难和昂贵的。我不知道视频捕获驱动程序是否确实使用共享内存,但鉴于它可能会异步传输大量数据,我希望它会这样做。
Linux 对网络块设备有一些特定的支持。它们不依赖于网络文件系统;设备文件仅存在于客户端,服务器上的守护进程模拟物理块设备(它可能会将操作中继到真实物理设备或从真实物理设备中继操作,但通常它读取和写入图像文件)。
您应该寻找特定于视频捕获的解决方案。尝试在物理设备所连接的机器上尽可能多地运行数据密集型部分。或者找一个支持从虚拟机内部直接访问物理设备的虚拟机解决方案(我不知道是否有任何主机/访客解决方案;基于管理程序的解决方案更有可能)。