Noções básicas sobre os drivers de dispositivo Linux da webcam


11

Até onde eu sei, o driver de dispositivo é uma parte do SW capaz de se comunicar com um tipo específico de dispositivo conectado a um computador.

No caso de uma webcam USB, o driver responsável é o UVC que suporta qualquer dispositivo compatível com UVC. Isso significa que permite que o SO ou outro programa de computador acesse as funções de hardware sem precisar saber detalhes precisos do hardware que está sendo usado.

Por esse motivo, instalei o driver de dispositivo UVC Linux executando:

opkg install kernel-module-uvcvideo

Webcam tem sido reconhecida por kernel do Linux: dev/video0. No entanto, eu ainda não era capaz de executar streaming de vídeo com o FFmpeg, pois estava sentindo falta da API V4L2. Eu instalei o V4L2, configurando o kernel.

Minhas consultas são:

  • Como o driver UVC e o V4L2 estão ligados?
  • Qual é o objetivo da API V4L2?
  • Se eu não tivesse instalado o UVC primeiro, ele seria instalado com o V4L2?

LinuxTV refere-se: A implementação do driver uvcvideo é aderente apenas à API V4L2 . Isso significa que o UVC faz parte da API V4L2?

Respostas:


7

A classe de vídeo USB (UVC) é uma especificação com a qual as webcams USB etc. devem estar em conformidade. Dessa forma, eles podem ser usados ​​em qualquer sistema que implemente suporte para dispositivos compatíveis com UVC.

V4L2 é o subsistema de vídeo do kernel do linux do qual depende a implementação UVC do linux. Em outras palavras, no kernel, o suporte a UVC requer V4L2, mas não o contrário.

A API V4L2 refere-se a uma interface de programação do espaço do usuário , documentada aqui .


Se eu entendi, o kernel sem V4L2 não pode suportar dispositivos compatíveis com UVC, mesmo se o driver uvc estiver instalado.
dempap

2
Sim. Drivers fazem parte do kernel; embora possam ser compilados como módulos separados, eles são compilados usando uma fonte de kernel. Se essa não for a mesma versão de origem do seu kernel em execução, eles não funcionarão e, se não forem compilados a partir da mesma configuração, pode haver inconsistências significativas. Por exemplo, se você não possui o núcleo de som (ALSA) embutido no kernel (ou disponível como um módulo), um driver de hardware modular para uma placa de som é inútil.
goldilocks

13

É incrível a quantidade de documentação que você pode encontrar para o Video4Linux2 - e nada explica realmente o que é o Video4Linux .

Primeiro, o Video4Linux2 é uma estrutura de driver Linux . Na verdade, os drivers de estrutura não controlam os dispositivos diretamente. Em vez disso, eles fornecem um modelo abstrato de alguma classe de dispositivo, neste caso, dispositivos de vídeo para uso dos aplicativos. As estruturas de driver fornecem três benefícios principais:

  1. Forneça uma API unificada para os aplicativos usarem com uma ampla gama de dispositivos físicos, conectados por USB, PCIe, MIPI, Ethernet ou outro tipo de barramento de transporte de dados
  2. No kernel, as estruturas contêm o tipo de código necessário em quase todos os drivers de dispositivos de uma classe específica, reduzindo assim muito o volume de códigos díspares.
  3. No kernel, as estruturas fornecem um plano para escrever novos drivers de nível inferior que realmente controlam o hardware, simplificando o desenvolvimento do driver.

Portanto, o driver V4L2 é um driver de alto nível que aciona o driver UVC, que aciona o driver USB que pode estar executando um driver de hardware de nível ainda mais baixo.

Esse modelo Matryoshka é muito comum na árvore de drivers do kernel do Linux. V4L2 é um dos exemplos mais complexos, porque alguns dispositivos de câmera exigem acesso a grandes grupos de sub-dispositivos em várias camadas que controlam a câmera e direcionam a saída da câmera entre vários componentes, como processadores de imagem.

Você ainda pode acessar o driver UVC diretamente do espaço do usuário usando um arquivo de dispositivo e chamadas do sistema "ioctl", sem passar pelo driver V4L2, e ainda pode acessar o driver USB subjacente diretamente do espaço do usuário usando seu arquivo de dispositivo e "ioctl" s.

Sendo uma estrutura geral que fornece funcionalidade comum a uma ampla variedade de dispositivos, o V4L2 não fornece toda a funcionalidade que o driver UVC poderia fornecer (supondo que seu dispositivo realmente forneça mais funcionalidade UVC do que o necessário para suportar o V4L2) .

Portanto, se você tiver um dispositivo UVC que forneça todas as funções especificadas na especificação UVC, para usar algumas dessas funções, será necessário acessar o driver UVC diretamente através de um arquivo de dispositivo e sistema "ioctl" chamadas, supondo que o driver UVC do kernel do Linux realmente suporte todas as especificações UVC.

No entanto, o significado de

A implementação do driver uvcvideo é aderente apenas à API V4L2

é que, no atual driver UVC do kernel do Linux, na verdade, não há mais suporte à função UVC do que o necessário para o V4L2.

O suporte à V4L2 no kernel por si só não fornece suporte a UVC ou USB ou suporte a hardware USB de nível inferior.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.