Linux V4L2架构

V4L2即VideoLinux2,它是Linux内核中关于视频设备的内核驱动框架,为上层访问底层的视频设备提供了统一的接口。凡是内核中的子系统都有抽象底层硬件的差异,为上层提供统一的接口和提取出公共代码避免代码冗余等好处。

V4L2支持三类设备:视频输入输出设备、VBI设备和radio设备,分别会在/dev目录下产生videoX、radioX和vbiX设备节点。我们常见的视频 输入设备主要是摄像头。


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

字符设备驱动程序核心:V4L2本身就是一个字符设备,具有字符设备所有的特性,暴露接口给用户空间。

V4L2 驱动核心:主要是构建一个内核中标准视频设备驱动的框架,为视频操作提供统一的接口函数。

平台V4L2设备驱动:在V4L2框架下,根据平台自身的特性实现与平台相关的V4L2驱动部分,包括注册video_device和v4l2_dev。

具体的sensor驱动:主要上电、提供工作时钟、视频图像裁剪、流IO开启等,实现各种设备控制方法供上层调用并注册v4l2_subdev。


USB摄像头设备驱动(uvc_driver.c)

uvc_init();

usb_register(driver);

uvc_driver实例

发现内核有与uvc_ids匹配的USB摄像头就会调用uvc_probe函数,uvc_ids是usb_device_id类型。


uvc_probe函数

当内核发现当前插入的USB摄像头被匹配后,最终就会调用uvc_probe函数。

uvc_probe()

v4l2_device_register()

uvc_register_chains()

uvc_register_terms()

uvc_register_video()

video_device_alloc() //分配video_device结构体

设置video_device v4l2_file_operations成员,里面包含各种函数指针

video_register_device() //注册一个video_devices结构体

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值