Comprensione dei driver di dispositivo Linux della webcam


11

Per quanto ne so, il driver del dispositivo è una parte del software in grado di comunicare con un tipo particolare di dispositivo collegato a un computer.

Nel caso di una webcam USB, il driver responsabile è UVC che supporta qualsiasi dispositivo conforme UVC. Ciò significa che consente al sistema operativo o ad altri programmi per computer di accedere alle funzioni hardware senza la necessità di conoscere i dettagli precisi dell'hardware utilizzato.

Per questo motivo, ho installato il driver del dispositivo UVC Linux eseguendo:

opkg install kernel-module-uvcvideo

Webcam è stato riconosciuto dal kernel Linux: dev/video0. Tuttavia, non ero ancora in grado di eseguire lo streaming video con FFmpeg, poiché mancava l'API V4L2. Ho installato V4L2, configurando il kernel.

Le mie domande sono:

  • In che modo i driver UVC e V4L2 sono collegati insieme?
  • Qual è lo scopo dell'API V4L2?
  • Se non avessi installato prima UVC, sarebbe installato con V4L2?

LinuxTV fa riferimento: L'implementazione del driver uvcvideo è aderente solo all'API V4L2 . Ciò significa che UVC fa parte dell'API V4L2?

Risposte:


7

La classe video USB (UVC) è una specifica a cui si suppone che le webcam USB, ecc. In questo modo, possono essere utilizzati su qualsiasi sistema che implementa il supporto per dispositivi conformi agli UVC.

V4L2 è il sottosistema video del kernel Linux da cui dipende l'implementazione UVC di Linux. In altre parole, nel kernel il supporto UVC richiede V4L2, ma non viceversa.

L'API V4L2 si riferisce a un'interfaccia di programmazione dello spazio utente , documentata qui .


Se ho capito, il kernel senza V4L2, non può supportare i dispositivi compatibili UVC, anche se è installato il driver uvc.
Deprappare il

2
Sì. I driver fanno parte del kernel; sebbene possano essere compilati come moduli separati, questi sono compilati usando un sorgente del kernel. Se questa non è la stessa versione del kernel in esecuzione, non funzioneranno e se non vengono compilati dalla stessa configurazione, potrebbero esserci incoerenze significative. Ad esempio, se non si dispone del core audio (ALSA) incorporato nel kernel (o disponibile come modulo), un driver hardware modulare per una scheda audio è inutile.
Riccioli d'oro,

13

E 'incredibile quanto la documentazione si possono trovare per Video4Linux2 - e nessuno di esso spiega in realtà ciò che Video4Linux è .

Innanzitutto, Video4Linux2 è un framework di driver Linux . I driver del framework in realtà non controllano direttamente i dispositivi. Forniscono invece un modello astratto di una qualche classe di dispositivi, in questo caso i dispositivi video da utilizzare per le applicazioni. I framework dei driver offrono tre vantaggi principali:

  1. Fornire un'API unificata per le applicazioni da utilizzare con una gamma molto ampia di dispositivi fisici, sia connessi tramite USB, PCIe, MIPI, Ethernet o altri tipi di bus di trasporto dati
  2. Nel kernel, i framework contengono il tipo di codice necessario in quasi tutti i driver di dispositivo di una determinata classe, riducendo così notevolmente il volume di codice disparato
  3. Nel kernel, i framework forniscono un progetto per la scrittura di nuovi driver di livello inferiore che controllano effettivamente l'hardware, semplificando così lo sviluppo dei driver.

Quindi, il driver V4L2 è un driver di alto livello che guida il driver UVC, che guida il driver USB che potrebbe guidare un driver hardware anche di livello inferiore.

Questo modello Matryoshka è molto comune nell'albero dei driver del kernel Linux. V4L2 è uno degli esempi più complessi perché alcuni dispositivi con videocamera richiedono l'accesso a grandi gruppi di sotto-dispositivi in più livelli che controllano la videocamera e indirizzano l'output della videocamera tra vari componenti come i processori di immagini.

Puoi ancora accedere al driver UVC direttamente dallo spazio utente usando un file dispositivo e chiamate di sistema "ioctl", senza passare attraverso il driver V4L2, e puoi ancora accedere al driver USB sottostante direttamente dallo spazio utente usando il suo file dispositivo e "ioctl" s.

Essendo un framework generale che fornisce funzionalità comuni a una vasta gamma di dispositivi, V4L2 non offre tutte le funzionalità che il driver UVC potrebbe fornire (supponendo che il tuo dispositivo fornisca effettivamente più funzionalità UVC di quanto sia necessario per supportare V4L2) .

Quindi, se avessi un dispositivo UVC che fornisce tutte le funzioni specificate nella specifica UVC, quindi per utilizzare effettivamente alcune di queste funzioni dovrai accedere direttamente al driver UVC attraverso un file del dispositivo e un sistema "ioctl" chiama, supponendo che il driver UVC del kernel Linux supporti effettivamente tutte le specifiche UVC.

Tuttavia, il significato di

L'implementazione del driver uvcvideo è aderente solo all'API V4L2

è che nell'attuale driver UVC del kernel Linux in realtà non fornisce alcun supporto di funzione UVC più di quanto sia necessario per V4L2.

Il supporto V4L2 nel kernel non fornisce da solo supporto UVC o USB o supporto hardware USB di livello inferiore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.