2016-09-18 73 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更「正確」。我擔心衝突。

希望這可以幫助別人...