Puis-je partager un périphérique sous / dev à travers les hôtes?

Voici la situation. J'ai un périphérique video /dev/video0 sur un server VMware et je veux accéder à ce périphérique à partir d'une machine virtuelle. Cependant, pour une raison quelconque, je ne peux pas connecter le périphérique directement à la machine virtuelle, il doit être connecté à l'hôte.

Puisque sous la philosophie unix, tout est juste un file, est-ce que je peux partager un périphérique sous /dev utilisant NFS, Samba, sshfs ou un autre protocole entre deux hôtes, de sorte qu'un linux sur un server puisse accéder à des périphériques sur un autre server?

Non.

Vous pouvez exporter un file de périphérique via NFS ou d'autres filesystems réseau. Mais la signification du file de périphérique dépend de la machine sur laquelle vous l'ouvrez. Si vous exportez /dev/video0 via NFS d'une machine server vers une machine cliente, la machine cliente voit simplement "character device 81: 0" et l'interprète comme son propre périphérique de capture video. La machine client n'a même pas besoin d'avoir la même atsortingbution de numéro de périphérique que le server; Par exemple, un client OpenBSD verrait le même file que le pilote pseudo-terminal , car c'est ce que char 81: 0 est sous OpenBSD.

Ce que vous requestz serait très bien, mais aussi très dur. Chaque request sur le client devrait être transmise au server et vice versa. Il devrait y avoir un soutien spécifique dans les conducteurs individuels. Par exemple, certains pilotes countnt sur la memory partagée entre le process et le kernel, et la prise en charge transparente à travers le réseau serait difficile et coûteuse dans de nombreux cas. Je ne sais pas si le pilote de capture video utilise la memory partagée, mais étant donné qu'il est susceptible de transférer de grandes quantités de données de manière asynchronous, je m'attends à cela.

Linux a un support spécifique pour les périphériques de réseau . Ils ne s'appuient pas sur un système de files réseau; le file de périphérique existe uniquement sur le client et un démon sur le server émule un périphérique de bloc physique (il peut relayer les opérations vers et depuis un périphérique physique réel, mais il lit et écrit souvent dans un file image).

Vous devriez searchr une solution spécifique à la capture video. Essayez d'exécuter autant de parties intensives en données sur la machine à laquelle le périphérique physique est connecté. Vous pouvez également find une solution de machine virtuelle qui prend en charge l'access direct au périphérique physique à l'intérieur de la machine virtuelle (je ne sais pas si une solution hôte / invité est susceptible de l'être).

En plus de répondre Gilles – tant que vous n'avez pas l'intention de faire ioctls sur le file, il est tout simplement un stream. Donc, si vous avez couru de l'invité

 # mkfifo /dev/fakevideo0 # ssh host cat /dev/video0 > /dev/fakevideo0 

/ dev / fakevideo0 se comportera comme un buffor donc si vous lisez de lui, vous obtiendrez un stream depuis la camera.