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:
- 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
- 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
- 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.