移植 r5u870 驱动程序,但 v4l2 合规性返回“VIDIO_QUERYCAP 失败,设备的 ioctl 不适当”

问题描述 投票:0回答:1

我正在尝试重新使用旧的笔记本电脑网络摄像头,它使用 USB 接口进行通信,是带有芯片组 r5u870 的理光相机。

我在 github 上找到了一个存储库,我分叉了,因为它不适用于最新的内核,我让它可以编译。

安装驱动程序后,它会识别网络摄像头,但当我使用应用程序访问视频流时,我收到错误VIDIO_QUERYCAP 失败,设备的 ioctl 不适当;这对我来说似乎很奇怪,因为我看到与 ioctl 相关的回调已连接,所以可能我错过了 v4l2 驱动程序的内部工作。

是否有任何资源可以帮助您了解 v4l2 驱动程序的故障点?或任何调试提示?

linux driver webcam v4l2
1个回答
0
投票

可能已经太晚了,但我还是会回答。

因此,该驱动程序的主要问题是过时的内核接口。驱动程序本身是在 2.6.X 时代编写的。从那时起,内核发生了很多变化。

前段时间我购买了一台UMPC VGN-UX。它使用其中一台相机。我开始尝试让相机工作并找到了这个模块。那时它已经坏了,组装失败并出现错误。

我首先尝试找出问题并修复驱动程序。我什至发现了一些问题并在这里写下了它们https://github.com/3pei/r5u870/issues/6和这里https://github.com/3pei/r5u870/issues/7

我开始深入挖掘并得出结论:querycap 错误根本不是主要问题。

内核文档指出此调用用于确定设备的功能。 https://www.kernel.org/doc/html/v5.10/userspace-api/media/v4l/vidioc-querycap.html

但是,正如我上面指出的,这不是主要问题。主要问题是过时的接口。特别是,该模块使用旧版 v4l1 调用,这些调用已被现代内核中的 v4l2 取代。 另外,如果我没记错的话,该模块的 V4L2 控件有问题。

因此,我阅读了《Linux Device Drivers》这本书,并开始重写模块,试图找到并修复错误。结果,该模块必须几乎完全重写,因为......它包含很多过时的代码。 您可以在这里获取我的模块版本https://notabug.org/64coreCPU/r5u870v2

它在或多或少的现代内核上编译和运行。至少在 5.X.X 线上。 它在我的相机上运行没有问题。不幸的是,我也没有所有的相机来检查和调试它们的操作。我没有力量和愿望去做的是与 DMA 合作。

© www.soinside.com 2019 - 2024. All rights reserved.