内核部分

Linux系统中视频输入设备主要包括以下四个部分:

  • 字符设备驱动:V4L2本身就是一个字符设备,具有字符设备所有的特性,暴露接口给用户空间;
  • V4L2驱动核心:主要是构建一个内核中标准视频设备驱动的框架,为视频操作提供统一的接口函数;
  • 平台V4L2设备驱动:在V4L2框架下,根据平台自身的特性实现与平台相关的V4L2驱动部分,包括注册video_device和v4l2_dev
  • 具体的sensor驱动:主要上电、提供工作时钟、视频图像裁剪、流IO开启等,实现各种设备控制方法供上层调用并注册v4l2_subdev

V4L2框架

v4L2的核心源码位于drivers/media/v4l2-core,根据功能可以划分为四类:

  • 字符设备模块:由v4l2-dev.c实现,主要作用申请字符主设备号、注册class和提供video device注册注销等相关函数;

  • V4L2基础框架:由v4l2-device.cv4l2-subdev.cv4l2-fh.cv4l2-ctrls.c等文件构建V4L2基础框架;

  • videobuf管理:由videobuf2-core.cvideobuf2-dma-contig.cvideobuf2-dma-sg.cvideobuf2-memops.cvideobuf2-vmalloc.cv4l2-mem2mem.c等文件实现,完成videobuffer的分配、管理和注销;

  • Ioctl框架:由v4l2-ioctl.c文件实现,构建V4L2ioctl的框架。

应用部分

请参见: https://notes.z-dd.net/2019/05/21/V4L2%E9%87%87%E9%9B%86%E8%A7%86%E9%A2%91/

参考

https://www.cnblogs.com/vedic/p/10763838.html