v4l2框架函数调用关系

 
 

所有的设备节点和子设备节点都是通过__video_register_device()注册的

1.对于video设备节点:

用户空间ioctl(VIDIOC_S_FMT)
---> v4l2_fops.unlocked_ioctl [v4l2_ioctl] 字符设备函数集合,此函数主要是使用&vin->lock上锁,然后调用rvin_mc_fops.unlocked_ioctl,返回后释放锁
  ---> rvin_mc_fops.unlocked_ioctl 进行用户空间传下来的参数检查,然后调用下一级函数
    ---> __video_do_ioctl() 进行类型和合法性检查,然后调用下一级
      ---> v4l2_ioctls.v4l_s_ctrl() 所以直接从此位置开始看就可以
        --->rvin_mc_ioctl_ops.vidioc_s_ext_ctrls



2.对于v4l-subdev设备节点:
用户空间ioctl(VIDIOC_S_FMT)
--->v4l2_fops.unlocked_ioctl [v4l2_ioctl] 字符设备函数集合
  --->v4l2_subdev_fops.unlocked_ioctl [subdev_ioctl]

 

 2018-07-01 23:35:52

猜你喜欢

转载自www.cnblogs.com/hellokitty2/p/9250425.html