static int __init uvc_init(void)
result = usb_register(&uvc_driver.driver);
uvc_probe
uvc_register_chains
uvc_register_terms
uvc_register_video
vdev->fops = &uvc_fops;//ops--------------------------------------------> v4l2_file_operations uvc_fops{
vdev = video_device_alloc(); uvc_v4l2_ioctl
ret = video_register_device(vdev, VFL_TYPE_GRABBER, -1); uvc_v4l2_do_ioctl
case VIDIOC_QUERYCAP: //在设备枚举时分析描述符设置的
case VIDIOC_ENUM_FMT: //
format = &stream->format[fmt->index];//设备被枚举时设置
case VIDIOC_TRY_FMT://
case VIDIOC_S_FMT:
case VIDIOC_G_FMT:
case VIDIOC_TRY_FMT:
return uvc_v4l2_try_format(stream, arg, &probe, NULL, NULL);
v4l2_ioctl_ops
result = usb_register(&uvc_driver.driver);
uvc_probe
uvc_register_chains
uvc_register_terms
uvc_register_video
vdev->fops = &uvc_fops;//ops--------------------------------------------> v4l2_file_operations uvc_fops{
vdev = video_device_alloc(); uvc_v4l2_ioctl
ret = video_register_device(vdev, VFL_TYPE_GRABBER, -1); uvc_v4l2_do_ioctl
case VIDIOC_QUERYCAP: //在设备枚举时分析描述符设置的
case VIDIOC_ENUM_FMT: //
format = &stream->format[fmt->index];//设备被枚举时设置
case VIDIOC_TRY_FMT://
case VIDIOC_S_FMT:
case VIDIOC_G_FMT:
case VIDIOC_TRY_FMT:
return uvc_v4l2_try_format(stream, arg, &probe, NULL, NULL);
v4l2_ioctl_ops