五、写一个USB摄像头驱动程序
大体框架如下所示:
1.构造一个usb_driver
2.设置
2.1. 分配video_device:video_device_alloc
2.2. 设置
fops
ioctl_ops (里面需要设置11项)
如果要用内核提供的缓冲区操作函数,还需要构造一个videobuf_queue_ops
2.3. 注册: video_register_device
id_table: 表示支持哪些USB设备
3.注册: usb_register
-----------------------------------------------------
UVC: USB Video Class
UVC驱动:drivers\media\video\uvc\
uvc_driver.c分析:
1. usb_register(&uvc_driver.driver);
2. uvc_probe
uvc_register_video
vdev = video_device_alloc();
vdev->fops = &uvc_fops;
video_register_device
分析一个驱动程序最好的方法就是跟踪应用程序对它的调用过程
在www.usb.org下载 uvc specification, UVC规格书
UVC 1.5 Class specification.pdf : 有详细描述
USB_Video_Example 1.5.pdf : 有示例
12页拓扑图可看出:
USB摄像头内部分成两部分,一部分叫
VideoContro Interface:视频控制接口,一部分为:
VideoSteaming Interface:视频流接口
通过VideoControl Interface来
控制,
通过VideoStreaming Interface来读
视频数据,
VC里含有多个Unit/Terminal等功能模块,可以通过访问这些模块进行控制,比如调亮度
UC内部抽象出了2个概念:
Unit: