GNU/Linux >> Linux Esercitazione >  >> Linux

Comprensione dei driver di dispositivo Linux della webcam

È incredibile quanta documentazione puoi trovare per Video4Linux2 - e nessuna di esse spiega effettivamente cosa Video4Linux è .

Innanzitutto, Video4Linux2 è un framework di driver Linux . I driver del framework in realtà non controllano direttamente i dispositivi. Invece, forniscono un modello astratto di qualche classe di dispositivo, in questo caso dispositivi video che le applicazioni possono utilizzare. I framework dei driver offrono tre vantaggi principali:

  1. Fornire un'API unificata per le applicazioni da utilizzare con un'ampia gamma di dispositivi fisici, collegati 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 particolare classe, riducendo così notevolmente il volume di codice eterogeneo
  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 di livello ancora inferiore.

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

È ancora possibile accedere al driver UVC direttamente dallo spazio utente utilizzando un file di dispositivo e chiamate di sistema "ioctl", senza passare attraverso il driver V4L2, e si può ancora accedere al driver USB sottostante direttamente dallo spazio utente utilizzando il suo file di dispositivo e "ioctl".

Essendo un framework generale che fornisce funzionalità comuni a un'ampia gamma di dispositivi, V4L2 non fornisce tutti delle funzionalità che il driver UVC potrebbe fornire (supponendo che il tuo dispositivo fornisca effettivamente più funzionalità UVC di quelle necessarie per supportare V4L2).

Quindi, se si dispone di un dispositivo UVC che fornisce tutte le funzioni specificate nella specifica UVC, per utilizzare effettivamente alcune di queste funzioni è necessario accedere direttamente al driver UVC tramite un file di dispositivo e il sistema "ioctl" chiamate, supponendo che il driver UVC del kernel Linux supporti effettivamente tutte le specifiche UVC.

Tuttavia, il significato di

L'implementazione del driver uvcvideo aderisce solo all'API V4L2

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

Il supporto V4L2 nel kernel non fornisce di per sé supporto UVC o USB o supporto hardware USB di livello inferiore.


La classe video USB (UVC) è una specifica a cui dovrebbero conformarsi le webcam USB, ecc. In questo modo, possono essere utilizzati su qualsiasi sistema che implementa il supporto per dispositivi conformi a 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 fa riferimento a uno spazio utente interfaccia di programmazione, documentata qui.


Linux
  1. Linux:come trovare il driver (modulo) associato a un dispositivo su Linux?

  2. Capire Linux Desktop?

  3. Comprensione degli identificatori dm-Multipath in Linux

  4. Come scrivere un driver di dispositivo a blocchi Linux in spazio utente?

  5. Driver del dispositivo del kernel Linux a DMA da un dispositivo nella memoria dello spazio utente

Come installare i driver NVIDIA su CentOS 7 Linux

Comprendere i permessi dei file Linux

Come installare i driver Nvidia su Linux Mint [Guida per principianti]

Comprensione dei processi su Linux

Come installare gli ultimi driver Nvidia su Linux Mint 16 Petra

Come scrivere su una webcam virtuale in Linux?