Posso compartilhar um dispositivo de under / dev entre hosts?

7

Aqui está a situação. Eu tenho um dispositivo de vídeo /dev/video0 em um servidor VMware e quero acessar este dispositivo de dentro de uma máquina virtual. No entanto, por alguma razão, não consigo conectar o dispositivo diretamente à VM, ele deve estar conectado ao host.

Como na filosofia unix tudo é realmente apenas um arquivo, posso compartilhar um dispositivo em /dev usando NFS, Samba, sshfs ou algum outro protocolo entre dois hosts, para que um linux em um servidor possa acessar dispositivos em um diferente servidor?

    
por Josh 18.12.2010 / 19:00

2 respostas

9

Não.

Você pode exportar um arquivo de dispositivo através do NFS ou de outros sistemas de arquivos da rede. Mas o significado do arquivo do dispositivo depende da máquina em que você o abre. Se você exportar /dev/video0 sobre NFS de uma máquina servidora para uma máquina cliente, a máquina cliente verá apenas o “dispositivo de caractere 81: 0” e a interpretará como seu próprio dispositivo de captura de vídeo. A máquina cliente nem precisa ter a mesma atribuição de número de dispositivo que o servidor; por exemplo, um cliente OpenBSD veria o mesmo arquivo que o driver pseudo-terminal , porque é isso que o char 81: 0 está no OpenBSD.

O que você está pedindo seria muito bom, mas também muito difícil. Cada pedido no cliente teria que ser encaminhado para o servidor e vice-versa. Teria que haver suporte específico em drivers individuais. Por exemplo, alguns drivers dependem da memória compartilhada entre o processo e o kernel, e o suporte transparente em toda a rede seria difícil e proibitivamente caro em muitos casos. Não sei se o driver de captura de vídeo usa memória compartilhada, mas, como é provável que ele transfira grandes quantidades de dados de forma assíncrona, espero que isso ocorra.

O Linux tem algum suporte específico para dispositivos de bloqueio de rede . Eles não dependem de um sistema de arquivos de rede; o arquivo de dispositivo existe apenas no cliente e um daemon no servidor emula um dispositivo de bloco físico (ele pode retransmitir as operações para e de um dispositivo físico real, mas geralmente lê e grava em um arquivo de imagem).

Você deve procurar uma solução específica para captura de vídeo. Tente executar o máximo da parte de uso intensivo de dados na máquina à qual o dispositivo físico está conectado. Ou encontre uma solução de máquina virtual que ofereça suporte ao acesso direto ao dispositivo físico de dentro da máquina virtual (não sei se qualquer solução de host / convidado oferece; soluções com base em hipervisor são mais prováveis).

    
por 18.12.2010 / 20:53
4

Além da resposta de Gilles - contanto que você não pretenda fazer ioctls em arquivo, é simplesmente um fluxo. Então, se você correu de convidado

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

/ dev / fakevideo0 se comportará como um buffor, portanto, se você ler a partir dele, obterá fluxo da câmera.

    
por 18.12.2010 / 21:06

Tags