usb gadget uvc driver的code分析

uvc的linux driver分为host侧和gadget侧两个driver。host侧的driver在v4l2框架下,而设备侧的driver在usb/gadget文件夹下。gadget侧的uvc driver,利用v4l2框架去注册video_device,向应用层提供调用接口。同时,它完成v4l2 video buffer拷贝到usb request下的buffer下,然后利用uvc实现的协议进行video的传输,可以传输不压缩的yuv数据,也可以传输经过H.264压缩过的视频数据。

下面讲解一下usb gadget uvc driver,即webcam的实现code。

一,uvc涉及的文件

usb gadget uvc driver的code分析_第1张图片

二,uvc device 的定义

usb gadget uvc driver的code分析_第2张图片

三,右侧是一般的gadget设备驱动架构。左侧是usb_gadget设备作为video_device的上层接口。

usb gadget uvc driver的code分析_第3张图片

四,webcam的初始化。

usb gadget uvc driver的code分析_第4张图片

五,

usb gadget uvc driver的code分析_第5张图片

六,

usb gadget uvc driver的code分析_第6张图片

七,

usb gadget uvc driver的code分析_第7张图片

八,uvc下v4l2 buffer和usb request下的buffer的copy关系。

usb gadget uvc driver的code分析_第8张图片

九,改造方案的架构。

usb gadget uvc driver的code分析_第9张图片


  十,改造方案的实现。

usb gadget uvc driver的code分析_第10张图片

最后的两个图片,会修改。基本方案改成,采用网上的free software的test app,源码放在我的github上,网址如下:https://github.com/lintwins/uvc-gadget.git

可以通过以下命令在linux系统上下载:git clone https://github.com/lintwins/uvc-gadget.git

调试成功的板子,接上win7 pc,然后使用AMCap软件,开启预览,如下图所示:



你可能感兴趣的:(linux,kernel,driver)