欢迎来到天天文库
浏览记录
ID:48024318
大小:124.00 KB
页数:42页
时间:2020-01-29
《通用摄像头驱动源码分析附有详细注释.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、通用摄像头驱动源码分析,附有详细注释!摄像头驱动实现源码分析Spac5xx的实现是按照标准的USBVIDEO设备的驱动框架编写(其具体的驱动框架可参照/usr/src/linux/drivers/usb/usbvideo.c文件),整个源程序由四个主体部分组成:设备模块的初始化模块和卸载模块,上层软件接口模块,数据传输模块。具体的模块分析如下:一.初始化设备模块:该驱动采用了显式的模块初始化和消除函数,即调用module_init来初始化一个模块,并在卸载时调用moduel-exit函数(此二函数在2.3.13内核开始支
2、持)。其具体实现如下:1.模块初始化:module_init(usb_spca5xx_init);staticint__initusb_spca5xx_init(void){#ifdefCONFIG_PROC_FSproc_spca50x_create();//建立PROC设备文件#endif/*CONFIG_PROC_FS*/if(usb_register(&spca5xx_driver)<0)//注册USB设备驱动return-1;info("spca5xxdriver%sregistered
3、",version);return0;}2.模块卸载:module_exit(usb_spca5xx_exit);taticvoid__exitusb_spca5xx_exit(void){usb_deregister(&spca5xx_driver);//注销USB设备驱动info("driverspca5xxderegistered");#ifdefCONFIG_PROC_FSproc_spca50x_destroy();//撤消PROC设备文件#endif/*CONFIG_PR
4、OC_FS*/}关键数据结构://USB驱动结构,即插即用功能的实现staticstructusb_driverspca5xx_driver={"spca5xx",spca5xx_probe,//注册设备自我侦测功能spca5xx_disconnect,//注册设备自我断开功能{NULL,NULL}};用两个函数调用spca5xx_probe和spca5xx_disconnect来支持USB设备的即插即用功能:spca5xx_probe具体实现如下:staticvoid*spca5xx_probe(s
5、tructusb_device*dev,unsignedintifnum,conststructusb_device_id*id){structusb_interface_descriptor*interface;//USB设备接口描述符structusb_spca50x*spca50x;//物理设备数据结构interr_probe;inti;if(dev->descriptor.bNumConfigurations!=1)//探测设备是不是可配置gotonodevice;if(ifnum>0)gotonod
6、evice;interface=&dev->actconfig->interface[ifnum].altsetting[0];MOD_INC_USE_COUNT;interface=&intf->altsetting[0].desc;if(interface->bInterfaceNumber>0)gotonodevice;if((spca50x=kmalloc(sizeof(structusb_spca50x),GFP_KERNEL))==NULL)//分配物理地址空间{
7、err("couldn'tkmallocspca50xstruct");gotoerror;}memset(spca50x,0,sizeof(structusb_spca50x));spca50x->dev=dev;if((err_probe=spcaDetectCamera(spca50x))<0)//具体物理设备查找,匹配厂商号,设备号(在子程序中){err("Devicesnotfound!!");gotoerror;}PDEBUG(0,"Cam
8、eratype%s",Plist[spca50x->cameratype].namefor(i=0;i<SPCA50X_NUMFRAMES;i++)init_waitqueue_head(&spca50x->frame[i].wq);//初始化帧等待队列init_waitqueue
此文档下载收益归作者所有