UVC摄像头驱动程序框架

本文详细介绍了UVC(USB Video Class)摄像头的驱动程序框架,包括UVC拓扑结构、内核驱动注册过程以及ioctl函数的分析。通过分析,揭示了UVC摄像头在V4L2框架下的工作原理,重点讨论了视频控制接口和视频流接口的功能,以及如何通过ioctl函数进行设备控制和数据传输。
摘要由CSDN通过智能技术生成

前言

USB video class又称为USB video device class or UVC就是USB device class视频产品在不需要安装任何的驱动程序下即插即用,包括摄像头,数字摄影机,模拟视频转换器,电视卡及静态视频相机,V4L2就是用来管理UVC设备的并且能够提供视频相关的一些API
在这里插入图片描述
摄像头插入后内核打印出此信息,这是UVC机制的支持,即插即用不用我们自己写usb的驱动程序根据此信息可以定位到
drivers\media\usb\uvc\uvc_driver.c文件,该层为硬件相关层,根据以往的经验和平台设备驱动模型,该层肯定会分配,设置一个driver结构体,然后向上层核心层注册

struct uvc_driver uvc_driver = {
   
    .driver = {
   
        .name       = "uvcvideo",
        .probe      = uvc_probe,//支持的video设备插入就会进入
        .disconnect = uvc_disconnect,
        .suspend    = uvc_suspend,
        .resume     = uvc_resume,
        .reset_resume   = uvc_reset_resume,
        .id_table   = uvc_ids,//表示能够支持哪一些usb设备
        .supports_autosuspend = 1,
    },
};

该文件会去注册一个名字为uvc_driver的结构体,当匹配到usb设备时就会调用里面的uvc_probe函数

static int uvc_probe(struct usb_interface *intf,
             const struct usb_device_id *id)
{
   
    struct usb_device *udev = interface_to_usbdev(intf);
    struct uvc_device *dev;
    int ret;

    /*省略部分内容*/
    if ((dev = kzalloc(sizeof *dev, GFP_KERNEL)) == NULL)//【1】
        return -ENOMEM;
    /*省略部分内容*/
    dev->udev = usb_get_dev(udev);//【2】
    dev->intf = usb_get_intf(intf);
    dev->intfnum = intf->cur_altsetting->desc.bInterfaceNumber;
    dev->quirks = (uvc_quirks_param == -1)
            ? id->driver_info : uvc_quirks_param;
    /*省略部分内容*/
    /* Parse the Video Class control descriptor. */
    if (uvc_parse_control(dev) < 0) {
   //【3】
        uvc_trace(UVC_TRACE_PROBE, "Unable to parse UVC "
            "descriptors.\n");
        goto error;
    }
    uvc_printk(KERN_INFO, "Found UVC %u.%02x device %s (%04x:%04x)\n",
		dev->uvc_version >> 8, dev->uvc_version & 0xff,
		udev->product ? udev->product : "<unnamed>",8/*省略部分内容*/
    if (v4l2_device_register(&intf->dev, &dev->vdev) < 0)//【4】
        goto error;
    /* Initialize controls. */
    if (uvc_ctrl_init_device(dev) < 0)//【5】
        goto error
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值