通用摄像头驱动源码分析附有详细注释.pdf

通用摄像头驱动源码分析附有详细注释.pdf

ID:48024318

大小:124.00 KB

页数:42页

时间:2020-01-29

通用摄像头驱动源码分析附有详细注释.pdf_第1页
通用摄像头驱动源码分析附有详细注释.pdf_第2页
通用摄像头驱动源码分析附有详细注释.pdf_第3页
通用摄像头驱动源码分析附有详细注释.pdf_第4页
通用摄像头驱动源码分析附有详细注释.pdf_第5页
资源描述:

《通用摄像头驱动源码分析附有详细注释.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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。