Compreendendo os drivers de dispositivo Linux da webcam

8

Até onde eu sei, o driver de dispositivo é uma parte do software que é 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 conhecer detalhes precisos do hardware que está sendo usado.

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

opkg install kernel-module-uvcvideo

A webcam foi reconhecida pelo kernel do Linux: dev/video0 . No entanto, eu ainda não era capaz de realizar streaming de vídeo com o FFmpeg, pois estava faltando a API V4L2. Eu instalei o V4L2, configurando o kernel.

Minhas consultas são:

  • Como o driver UVC e o V4L2 são vinculados?
  • Qual é o objetivo da API V4L2?
  • Se eu não instalei 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 é parte da API V4L2?

    
por dempap 25.02.2014 / 19:08

2 respostas

4

A classe de vídeo USB (UVC) é uma especificação para 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.

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

A API V4L2 refere-se a uma interface de programação userspace , documentada here .

    
por 25.02.2014 / 19:30
8

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

Primeiro, o Video4Linux2 é um driver framework do Linux. Os drivers do Framework não controlam dispositivos diretamente. Em vez disso, eles fornecem um modelo abstrato de alguma classe de dispositivo, neste caso, dispositivos de vídeo para aplicativos a serem usados. Os frameworks de drivers fornecem três benefícios principais:

  1. Fornece uma API unificada para aplicativos para uso com uma ampla variedade de dispositivos físicos, sejam 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 dispositivo de uma determinada classe, reduzindo assim bastante o volume de código diferente
  3. No kernel, os frameworks fornecem um plano para escrever novos drivers de baixo nível que realmente controlam o hardware, simplificando assim 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 acionando um driver de hardware de nível ainda menor.

Este modelo Matryoshka é muito comum na árvore de drivers do kernel do Linux. A V4L2 é um dos exemplos mais complexos porque alguns dispositivos de câmera requerem 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. / p>

Ainda é possível acessar o driver UVC diretamente do userspace usando um arquivo de dispositivo e chamadas de sistema "ioctl", sem passar pelo driver V4L2, e ainda é possível acessar o driver USB subjacente diretamente do userspace usando seu arquivo de dispositivo e "ioctl "s.

Sendo uma estrutura geral que fornece funcionalidade comum a uma ampla gama de dispositivos, a V4L2 não oferece a todas a funcionalidade que o driver UVC poderia fornecer (supondo que o seu dispositivo realmente forneça mais funcionalidade UVC do que é 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 por meio de um arquivo de dispositivo e " ioctl "chamadas de sistema, assumindo que o driver UVC do kernel Linux na verdade suporta toda a especificação UVC.

No entanto, o significado de

The uvcvideo driver implementation is adherent only to the V4L2 API

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

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

    
por 21.08.2016 / 16:25