====== 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