2.V4L2框架-框架简介


由于在工作中涉及到摄像头驱动以及摄像头应用,通过查阅网上资料以及自己的理解,现对V4L2驱动框架进行一个小结,若有错误,帮忙指正,共同学习,谢谢!

一.前言

V4L2 是专门为 linux 设备设计的一套视频框架,其主体框架在 linux 内核,可以理解为是整个 linux 系统上面的视频源捕获驱动框架。其广泛应用在嵌入式设备以及移动端、个人电脑设备上面,市面上的编码产品类如:SDV、手机、IPC、行车记录仪都会用到这个框架来进行视频采集。

二.架构

V4L2驱动属于字符设备驱动,且属于相对复杂的字符设备驱动,对于一个字符设备,我们的编写步骤一般为:

(1) 构造一个file_operation,编写系统调用函数open,read,ioctl等

(2) 在入口函数注册主次设备号,cdev,class,device等

(3) 卸载函数

而对复杂的字符设备驱动,一般采用一种分层的结构,比如input输入子系统框架

img

(1)上层为事件处理层(Event handler):主要与用户空间进行交互,内核已经实现

(2)中间层为核心层(Input core):承上启下,为驱动层提供输入设备注册和操作接口。通知事件层对输入事件进行处理,内核已经实现,主要作用为:构造file_operation(open read ioctl),注册,入口函数,出口函数

(3)硬件相关层(Input Driver):供核心层的file_operation使用,这一部分需要用户来实现**(重要),**当应用层发生系统调用的时候,先来到核心层,核心层再通过相关回调函数调用硬件相关层的驱动函数

三.V4L2驱动架构

img

从图中可以看出V4L驱动框架也分为核心层与硬件相关层

(1) V4L2核心层:核心层主要负责注册字符设备,由内核提供,暴露open,read,wite等接口给用户空间,为视频操作提供统一接口函数

(2) 平台V4L2驱动:根据每一个硬件平台的不同特性实现,包括向V4L2核心层注册Video_device以及V4L2_device,在V4L2_device中管理一个v4l2_subdev链表,用户空间发生系统调用时,首先调用V4L2核心层函数,再通过调用平台V4L2驱动再通过v4l2_subdev_call调v4l2_subdev中提供的相关操作

(3)具体子设备的驱动:主要实现设置分辨率,提供上电时钟,视频流开启关闭等一系列操作供给上层使用,并注册v4l2_subdev

四.主要结构体

v4l2驱动框架主要的对象有video_device、v4l2_device、v4l2_subdev、videobuf

  • video_device:一个字符设备,为用户空间提供设备节点(dev/videoX),提供驱动与应用交互的系统调用函数
  • v4l2_device:表示一个v4l2设备的实例,由其可以引出一个子设备结构体v4l2_subdev,其中有多少个输入设备就有多少video_device结构体,比如一个高清摄像头,作为一个整体,看作是一个v4l2_device,其包含ISP,MIPI等对应输入子设备v4l2_subdev,它们都属于这一个v4l2_device之下
  • v4l2_subdev:目前 v4l2驱动 随着需求以及硬件的变化越来越复杂,v4l2驱动需要支持音频,视频,解码,编码等ic,使得大部分 v4l2设备都包含了多个子设备IC,例如 解编码器,传感器,摄像头控制器等等,所以在/dev目录下不仅仅要建立v4l2的节点,还需要建立各个IC的设备节点,如fb,i2c,input,alsa等设备节点,通常这些IC通过i2c总线与主板连接,以上设备统称为 sub-devices 子设备,代表实实在在的camera等传感器设备,通常指挂在i2c总线。驱动需要与子设备进行通信,这些子设备一般情况下就是音频处理,编解码器等,camera常见的子设备有传感器和摄像头控制器,为了方便代码管理,内核 v4l2 提供了一个统一的接口给这些子设备,即 v4l2_subdev 结构体

参考文章:
https://blog.csdn.net/m0_46525308/article/details/115446496
https://blog.csdn.net/weixin_45244289/article/details/109157258

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值