Linux uvc驱动分析
一、ioctl调用流程
1.common/drivers/media/video/uvc/uvc_driver.c
module_init(uvc_init);
static int __init uvc_init(void){
result = usb_register(&uvc_driver.driver);
}
struct uvc_driver uvc_driver = {
.driver = {
.name = "uvcvideo",
.probe = uvc_probe,
.disconnect = uvc_disconnect,
.suspend = uvc_suspend,
.resume = uvc_resume,
.reset_resume = uvc_reset_resume,
.id_table = uvc_ids,
.supports_autosuspend = 1,
},
};
static int uvc_probe(struct usb_interface *intf, const struct usb_device_id *id){
uvc_register_chains(dev)
}
static int uvc_register_chains(struct uvc_device *dev){
ret = uvc_register_terms(dev, chain);
}
static int uvc_register_terms(struct uvc_device *dev, struct uvc_video_chain *chain){
ret = uvc_register_video(dev, stream);
}
static int uvc_register_video(struct uvc_device *dev,struct uvc_streaming *s