usb gadget g_webcam uvc gadget调试

开发板连接了一个USB camera,想通过UVC gadget将摄像头输出到PC上。


内核关于gadget的测试说明 gadget-testing.txt 中提到:

# uvc-gadget -u /dev/video<uvc video node #> -v /dev/video<vivid video node #>

where uvc-gadget is this program: http://git.ideasonboard.org/uvc-gadget.git

with these patches: http://www.spinics.net/lists/linux-usb/msg99220.html

 

这里有一份整理好的测试代码,可以将开发板上的camera通过USB OTG连接到PC,在PC端显示摄像头图像:

 

https://github.com/wlhe/uvc-gadget.git

 

需要注意的是,代码中默认只支持360p和720p的分辨率大小,如果摄像头的分辨率不一样,需要修改代码中中支持的分辨率,另外,还需要在修改驱动webcam.c中添加新的分辨率,如我的摄像头分辨率是640x480,这里说明内核中分辨率的添加方法:

 

1.添加新的描述符:

 

static const struct UVC_FRAME_UNCOMPRESSED(1) uvc_frame_yuv_640x480 = {
    .bLength        = UVC_DT_FRAME_UNCOMPRESSED_SIZE(1),
    .bDescriptorType    = USB_DT_CS_INTERFACE,
    .bDescriptorSubType    = UVC_VS_FRAME_UNCOMPRESSED,
    .bFrameIndex        = 2,
    .bmCapabilities        = 0,
    .wWidth            = cpu_to_le16(640),
    .wHeight        = cpu_to_le16(480),
    .dwMinBitRate        = cpu_to_le32(147456000),
    .dwMaxBitRate        = cpu_to_le32(147456000),
    .dwMaxVideoFrameBufferSize    = cpu_to_le32(614400),
    .dwDefaultFrameInterval    = cpu_to_le32(333333),
    .bFrameIntervalType    = 1,
    .dwFrameInterval[0]    = cpu_to_le32(333333),

};

其中dwMaxBitRate=dwMinBitRate= wWidth*wHeight*2*FrameRate,dwDefaultFrameInterval=333333,表示间隔为33.3333ms,即FrameRate=30。另外注意bFrameIndex的设定,一定要按顺序来设定。同时uvc_format_yuv的bNumFrameDescriptors也要相应更改

 

2. 在uvc_fs_streaming_cls ,uvc_hs_streaming_cls,uvc_ss_streaming_cls中添加新的描述

3.安装 g_webcam.ko 驱动,先运行./uvc-gadget -u /dev/video1 -v /dev/video0 -f 0 -r 0 ,再连接usb到pc, 打开camera应用即可看到图像。

 

补充:

      内核驱动里面默认支持360p帧率为30f,720p帧率为2f,720p的帧率过低导致win10的camera应用一直不显示720p的分辨率选项,将帧率调整为15就可以了

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
linux usb gadget set_alt 是一个命令,用于设置 Linux 系统中的 USB 外设(gadget)的接口的当前功能(alt)。 在 Linux 系统中,USB 外设可以被模拟成各种不同的功能(比如 USB 鼠标、键盘、存储等)。每个功能可以有多个接口,而每个接口又可以有多个备用接口。备用接口代表了该接口的不同功能或配置。set_alt 命令用于切换外设的当前接口,从而切换外设的功能或配置。 set_alt 命令的基本用法是: ``` bash set_alt [USB 外设的路径] [接口号] [备用接口号] ``` 其中, - [USB 外设的路径] 是指要设置的 USB 外设的路径。这个路径通常位于/sys/kernel/config/usb_gadget/目录下,其中会存在与 USB 外设相关的文件和目录结构。 - [接口号] 是指要设置的接口的号码。一般来说,一个 USB 外设可以有多个接口,号码从 0 开始递增。 - [备用接口号] 是指要设置的备用接口的号码。每个接口可以有多个备用接口,号码从 0 开始递增。 使用 set_alt 命令可以方便地在运行时更改 USB 外设的功能,而不需要重新加载整个外设驱动。这种灵活性在需要通过 USB 连接不同类型的外设时非常有用,比如在使用嵌入式系统开发板上模拟不同的 USB 设备。 需要注意的是,使用 set_alt 命令需要有足够的权限,并且需要正确了解 USB 外设的路径、接口和备用接口的号码。此外,还应该根据具体的外设和驱动文档来了解如何正确配置备用接口的功能。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值