我正在使用一个安装了linux的板。最终它将被用作USB网络摄像头。我构建了内核并添加了一个uvc驱动程序。
我正在跟踪these instructions进行测试。不幸的是,当我连接主机并运行应用程序时,会出现以下错误:v4l2_core: (jpeg decoder) error while decoding frame
我想在我的主机上测试application that I'm using。这有几个问题。
在我使用的Linux板上,当我执行modrobe g_webcam
时,一个新的视频设备出现在/dev
,/dev/video0
中。当我在我的主机Linux ubuntu 4.10.0-32-generic #36~16.04.1-Ubuntu SMP Wed Aug 9 09:19:02 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
上执行它时,什么都不会发生。我到处搜索,但找不到原因的答案。
那么,我如何在linux上创建视频设备,并用g_webcam
将其绑定到uvc gadget呢?
假设我们找到了第一步。执行uvc-gadget -u /dev/video<uvc video node #> -v /dev/video<vivid video node #>
后,如何从小工具读取数据?
如有任何帮助,我们将不胜感激。
最佳答案
当我在我的主机上执行它时,什么都不会发生
这是意料之中的。您的x86_64主机可能没有otg udc,因此无法在其中启用小工具。您可以检查主机上的modprobe g_webcam
来确认这一点,但无论如何,您不应该在主机上运行Linux ubuntu 4.10.0-32-generic #36~16.04.1-Ubuntu SMP Wed Aug 9 09:19:02 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
。
那么,我如何在linux上创建视频设备,并用dmesg
将其绑定到uvc gadget呢?
您的modprobe g_webcam
命令创建了输出视频设备。当您运行g_webcam
时,它知道要绑定到modprobe g_webcam
,从源代码可以看出这一点。
执行uvc-gadget
后,如何从小工具读取数据?
在主机上,首先确认/dev/video0
枚举正确(运行uvc-gadget -u /dev/video<uvc video node #> -v /dev/video<vivid video node #>
)。接下来,使用uvc相机查看器,如guvcview:/dev/videoX
不幸的是,当我连接主机并运行应用程序时,会出现以下错误:dmesg
你是不是在设备上而不是主机上发现了这个错误?我自己也没用过生动的,但不幸的是,在这两个方面都有很多问题。我建议您首先使用合成数据(sudo apt install guvcview
)而不是vivid,以及未压缩的yuyv而不是jpeg(v4l2_core: (jpeg decoder) error while decoding frame
)来隔离问题。前面可能有许多调试步骤,但这至少可以使您到达主机可以看到图像流的起点。
关于linux - 创建uvc设备并测试应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45806381/