一个v4l2设备 是这么确定被注册的

/*
    我们先看 注册函数 : video_register_device()
        它调用了 __video_register_device()
*/
static inline int __must_check video_register_device(struct video_device *vdev,int type, int nr)
{
	return __video_register_device(vdev, type, nr, 1, vdev->fops->owner);
}

__video_register_device(....)
{
    .....
    ....
        /*flags : unsigned long flags ,
          #define V4L2_FL_REGISTERED ( 0 )
          设置flags的第 0 位,为 1.
          
         在其他需要取出这个video_device的位置,会判断这个flags的第 0 位。
        */  
        set_bit(V4L2_FL_REGISTERED, &vdev->flags);
        //获取锁 ---- 访问临界区 ----- 释放锁
	mutex_lock(&videodev_lock);
	video_device[vdev->minor] = vdev; //把上面设置好的video_device 依据次设备号位索引放入数组video_device
	mutex_unlock(&videodev_lock);
}

/*
    看下面一个函数
*/
static int v4l2_open(struct inode *inode, struct file *filp)
{
    struct video_device *vdev;
    mutex_lock(&videodev_lock);
    //依据次设备号 从video_device[ ]中 获取对应的video_device
    vdev = video_devdata(filp);
    .....
    if (vdev->fops->open) {
        ....
        
        /**
        static inline int video_is_registered(struct video_device *vdev)
        {
            返回 flags的第  0 位,
            因为 在注册video_device的时候,这个flags的第 0 位,已经被 设置成 1
            如果 flags的第 0 位 是 0的话,下面的代码就会出错返回
            test_bit(V4L2_FL_REGISTERED, &vdev->flags);
        }
            
        */
        if (video_is_registered(vdev)){
              ret = vdev->fops->open(filp);  //调用具体设备的fops的open函数
        }else                                //如果时vivi中,这个vdev就是vivi_template,
        {                                    //fops 就是 vivi_fops   
              ret = -ENODEV;                 //如果时 uvc,那么这个fops的open 就是uvc_v4l2_open
        }		 
	......						  		
    }
}

http://blog.csdn.net/wangpengqi/article/category/1288083


http://blog.csdn.net/wind19/article/details/12975173


http://wenku.baidu.com/link?url=SrGqty7yIFeBAj6JXi1rUV4nLdeY_LU8_0pelJa_dPc4HdOLziZ-E9qw3dlln6s4M0qSHRcjIeRgVIqAwqZoSfa6N_3nOelDH71R2eMT1Ne


http://blog.csdn.net/sunlylorn/article/details/6313278

http://blog.csdn.net/yusiguyuan/article/details/22936707


http://m.blog.csdn.net/article/details?id=49745149


你可能感兴趣的:(一个v4l2设备 是这么确定被注册的)