2016-09-18 93 views
1

我正在学习通过v4l2-ctl配置视频设备的v4l2 API。几年前的代码样本实际上已经过时,一些定义不再适用。有一种从v4l2-utils中显示的kerhel请求所有API的新方法。我试图将v4l2-utils的一些代码合并到我的代码中。然而,我是从编译器得到一个错误:缺少包括从v4l2,Linux vs uapi/linux

camera.hpp:1038:8: error: 'struct v4l2_ext_controls' has no member named 'which' 

ctrls.which = V4L2_CTRL_ID2WHICH(qctrl.id);

和:

camera.hpp:1038:43: error: 'V4L2_CTRL_ID2WHICH' was not declared in this scope 

ctrls.which = V4L2_CTRL_ID2WHICH(qctrl.id);

该字段和定义位于Linux源代码树中的一个文件中:/usr/src/linux-4.6.3-gentoo/include/uapi/linux/videodev2.h,但该文件不包含在I指定:

#include <linux/videodev2.h> 

什么是伏都教让编译器包含正确的文件?

我一直在研究v4l2-utils源代码,但无法弄清楚。

非常感谢。

回答

1

位于/ usr/include中的文件已过期。我为4.3内核安装了头文件,并且需要更高版本的头文件。我的gentoo安装解决方案是为sys-kernel/linux-headers添加一个关键字并安装最新的头文件(4.7)。

事实证明,当安装到/ usr/include中时,UAPI文件将成为头文件。我可能已经在我的/ usr/src/linux目录中创建了headers_install,但我不确定这是否比安装linux-headers ebuild更“正确”。我担心冲突。

希望这可以帮助别人...