Comprendre les pilotes de périphériques Linux de webcam

11

Pour autant que je sache, le pilote de périphérique fait partie de SW qui est capable de communiquer avec un type particulier de périphérique connecté à un ordinateur.

Dans le cas d'une webcam USB, le pilote responsable est UVC qui prend en charge tout appareil compatible UVC. Cela signifie que le système d'exploitation ou un autre programme informatique peut accéder aux fonctions matérielles sans avoir besoin de connaître les détails précis du matériel utilisé.

Pour cette raison, j'ai installé le pilote de périphérique UVC Linux en exécutant:

opkg install kernel-module-uvcvideo

Webcam a été reconnu par le noyau Linux: dev/video0. Cependant, je ne pouvais toujours pas effectuer de streaming vidéo avec FFmpeg, car il me manquait l'API V4L2. J'ai installé V4L2, en configurant le noyau.

Mes requêtes sont:

  • Comment le pilote UVC et le V4L2 sont-ils liés?
  • Quel est le but de l'API V4L2?
  • Si je n'ai pas installé UVC en premier, il serait installé avec V4L2?

LinuxTV fait référence: L'implémentation du pilote uvcvideo est adhérente uniquement à l'API V4L2 . Cela signifie que UVC fait partie de l'API V4L2?

dempap
la source

Réponses:

7

La classe vidéo USB (UVC) est une spécification à laquelle les webcams USB, etc., sont censées se conformer. De cette façon, ils peuvent être utilisés sur n'importe quel système qui implémente la prise en charge des appareils conformes aux UVC.

V4L2 est le sous-système vidéo du noyau linux dont dépend l'implémentation UVC linux. En d'autres termes, dans le noyau, le support UVC nécessite V4L2, mais pas l'inverse.

L'API V4L2 fait référence à une interface de programmation en espace utilisateur , documentée ici .

boucle d'or
la source
Si j'ai bien compris, le noyau sans V4L2, ne peut pas prendre en charge les appareils compatibles UVC, même si le pilote uvc est installé.
dempap
2
Oui. Les pilotes font partie du noyau; bien qu'ils puissent être compilés en modules séparés, ils sont compilés à l'aide d'une source du noyau. Si ce n'est pas la même version source que votre noyau en cours d'exécution, ils ne fonctionneront pas et s'ils ne sont pas compilés à partir de la même configuration, il peut y avoir des incohérences importantes. Par exemple, si vous n'avez pas le noyau sonore (ALSA) intégré dans le noyau (ou disponible en tant que module), alors un pilote matériel modulaire pour une carte son est inutile.
goldilocks
13

Il est étonnant de voir combien la documentation que vous pouvez trouver pour Video4Linux2 - et rien de tout cela explique en fait ce que Video4Linux est .

Tout d'abord, Video4Linux2 est un framework de pilotes Linux . Les pilotes de framework ne contrôlent pas directement les périphériques directement. Au lieu de cela, ils fournissent un modèle abstrait d'une certaine classe de périphérique, dans ce cas des périphériques vidéo pour les applications à utiliser. Les frameworks de pilotes offrent trois avantages principaux:

  1. Fournir une API unifiée pour les applications à utiliser avec une très large gamme de périphériques physiques, qu'ils soient connectés par USB, PCIe, MIPI, Ethernet ou tout autre type de bus de transport de données
  2. Dans le noyau, les frameworks contiennent le type de code qui est nécessaire dans presque tous les pilotes de périphériques d'une classe particulière, réduisant ainsi considérablement le volume de code disparate
  3. Dans le noyau, les frameworks fournissent un modèle pour l'écriture de nouveaux pilotes de niveau inférieur qui contrôlent réellement le matériel, simplifiant ainsi le développement des pilotes.

Ainsi, le pilote V4L2 est un pilote de haut niveau qui pilote le pilote UVC, qui pilote le pilote USB qui pourrait piloter un pilote matériel encore plus bas.

Ce modèle Matryoshka est très courant dans l'arborescence des pilotes du noyau Linux. La V4L2 est l'un des exemples les plus complexes car certains appareils photo nécessitent d'accéder à de grands groupes de sous-appareils en plusieurs couches qui contrôlent l'appareil photo et acheminent la sortie de l'appareil photo entre divers composants tels que les processeurs d'images.

Vous pouvez toujours accéder au pilote UVC directement à partir de l'espace utilisateur à l'aide d'un fichier de périphérique et des appels système "ioctl", sans passer par le pilote V4L2, et vous pouvez toujours accéder au pilote USB sous-jacent directement à partir de l'espace utilisateur à l'aide de son fichier de périphérique et de "ioctl".

Étant un cadre général qui fournit des fonctionnalités communes à une large gamme d'appareils, V4L2 ne vous fournit pas toutes les fonctionnalités que le pilote UVC pourrait fournir (en supposant que votre appareil fournit réellement plus de fonctionnalités UVC que nécessaire pour prendre en charge V4L2) .

Donc, si vous deviez avoir un périphérique UVC qui fournit toutes les fonctions spécifiées dans la spécification UVC, alors pour utiliser réellement certaines de ces fonctions, vous devrez accéder au pilote UVC directement via un fichier de périphérique et un système "ioctl". , en supposant que le pilote UVC du noyau Linux prend en charge toutes les spécifications UVC.

Cependant, la signification de

L'implémentation du pilote uvcvideo est conforme uniquement à l'API V4L2

est que dans le pilote actuel du noyau Linux UVC ne fournit en fait pas plus de support de fonction UVC que ce qui est nécessaire pour V4L2.

La prise en charge de V4L2 dans le noyau ne fournit pas en soi une prise en charge UVC ou USB ou une prise en charge matérielle USB de niveau inférieur.

Jonathan Ben-Avraham
la source