====== 13. Drivere video în Linux ======
===== Subiecte abordate =====
* Arhitectura subsistemului video în nucleul Linux (v4l2)
* Implementarea unui driver v4l2 (client pentru ''videodev'')
* Drivere pentru USB. UVC (//USB Video Class//)
===== Resurse utile =====
* [[http://lwn.net/Articles/203924/|LWN: The Video4Linux API: an introduction]]
* [[https://linuxtv.org/wiki/index.php/Developer_Section|LinuxTV Wiki: Developer Section]]
* [[https://linuxtv.org/wiki/index.php/Anatomy_of_a_V4L_driver|Anatomy of a V4L Driver]]
* [[https://linuxtv.org/downloads/v4l-dvb-apis-new/media/media_uapi.html|Linux Media Infrastructure userspace API]]
* [[https://linuxtv.org/downloads/v4l-dvb-apis-new/media/media_kapi.html|Media subsystem kernel internal API]]
* [[https://linuxtv.org/downloads/v4l-dvb-apis-new/media/v4l-drivers/index.html|Video4Linux (V4L) driver-specific documentation]]
* [[https://www.kernel.org/doc/Documentation/media/kapi/|Linux Kernel Documentation: Media KAPI]]
* [[https://github.com/umlaeute/v4l2loopback/|v4l2loopback - a kernel module to create V4L2 loopback devices]]
===== Arhivă de suport =====
Arhiva de suport pentru exerciții se găsește [[http://koala.cs.pub.ro/training/res/linux-kernel-dev/arc/cap-13-tasks.zip|aici]]. Descărcați arhiva și apoi decomprimați-o folosind comanda
unzip cap-13-tasks.zip
===== Demo-uri/Discuții =====
Anatomie a implementării driver-ului ''videodev'' (driverul intermediar sau server pentru infrastructura v4l2), parcurgerea funcțiilor și structurilor principale
Anatomie a implementării driver-ului ''vivi'' (//virtual video driver//)
Implementarea unui driver USB, parcurgerea funcțiilor și structurilor principale
Anatomie a implementării driver-ului ''uvcvideo'' (//USB Video Class//)
===== Exerciții =====
==== Implementare driver video virtual ====
Pornind de la modelul driver-ului [[http://lxr.free-electrons.com/source/drivers/media/platform/vivi.c?v=3.13|vivi]], implementați un driver video virtual minimal care să răspundă la investigația folosind comanda ''v4l2-ctl''.
Pentru a investiga dispozitivul ''video0'' se poate folosi comanda
v4l2-ctl --all
Pentru a investiga dispozitivul ''video1'' se poate folosi comanda
v4l2-ctl --all -d 1