usb gadget uvc driver的code分析

本文深入剖析USB gadget侧的UVC驱动,探讨如何利用v4l2框架注册video_device,并详细阐述了从v4l2视频缓冲区到USB请求缓冲区的拷贝过程,以及支持未压缩YUV和H.264压缩视频数据的传输。文章通过一系列步骤介绍了webcam的初始化和改造方案,提供了开源测试应用程序的GitHub链接,帮助读者理解和实现USB Gadget UVC驱动。

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涉及的文件


二,uvc device 的定义


三,右侧是一般的gadget设备驱动架构

### Linux USB Gadget UVC 摄像头设置指南 Linux USB Gadget 子系统允许设备作为 USB 主机的外围设备运行,UVCUSB Video Class)摄像头功能是其常见应用之一。通过配置 UVC Gadget,可以将嵌入式设备模拟为 USB 视频设备,从而在主机端识别为标准摄像头。 #### 1. 内核配置 确保 Linux 内核支持 UVC Gadget 功能。通常需要启用以下配置选项: - `CONFIG_USB_GADGET`:启用 USB Gadget 支持 - `CONFIG_USB_G_VIDEO`:启用 UVC Gadget 模块 - `CONFIG_USB_CONFIGFS`:通过 ConfigFS 动态配置 Gadget - `CONFIG_USB_CONFIGFS_UVC`:启用 UVC 功能支持 可以通过以下命令检查当前内核是否启用这些选项: ```bash grep CONFIG_USB_G_VIDEO /boot/config-$(uname -r) ``` 如果使用的是模块化构建,需加载 `uvc_gadget` 模块: ```bash modprobe uvc_gadget ``` #### 2. 使用 ConfigFS 配置 UVC Gadget ConfigFS 提供了一种用户空间配置 USB Gadget 的方式。首先挂载 ConfigFS: ```bash mount -t configfs none /sys/kernel/config ``` 创建 UVC Gadget 实例: ```bash mkdir /sys/kernel/config/usb_gadget/myuvc cd /sys/kernel/config/usb_gadget/myuvc ``` 设置基本属性(例如厂商 ID、产品 ID): ```bash echo 0x1d6b > idVendor # Linux Foundation echo 0x0101 > idProduct # UVC Gadget echo 0x0200 > bcdDevice # USB 2.0 echo 0x0200 > bcdUSB # USB 2.0 ``` 创建字符串描述符: ```bash mkdir strings/0x409 echo "1234567890" > strings/0x409/serialnumber echo "MyCompany" > strings/0x409/manufacturer echo "MyUVCDevice" > strings/0x409/product ``` 创建配置并启用 UVC 功能: ```bash mkdir configs/c.1 mkdir functions/uvc.0 ln -s functions/uvc.0 configs/c.1/ ``` 最后绑定 UDC(USB Device Controller): ```bash ls /sys/class/udc > UDC ``` #### 3. 启动 UVC 摄像头服务 可以使用 `uvc-gadget` 工具或 `usb_webcam` 工具来启动 UVC 摄像头服务。例如: ```bash usb_webcam -e 2 -t 9 -b # 启动 bulk 模式 ``` 或使用 isoc 模式(适用于 USB 2.0): ```bash usb_webcam -e 2 -m 2 -t 10 ``` #### 4. 验证摄像头功能 在连接的主机端,可以使用 `ls /dev/video*` 查看是否生成了新的视频设备节点。使用 `v4l2-ctl` 或 `ffmpeg` 等工具验证视频流输出: ```bash v4l2-ctl --device=/dev/video0 --all ffmpeg -f v4l2 -i /dev/video0 output.mp4 ``` #### 5. 停止服务与清理 如需停止服务,可卸载 UDC 并删除 ConfigFS 中的配置: ```bash echo "" > UDC cd .. rm -rf myuvc ``` ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值