1. 程式人生 > >UVC攝像頭移植成功

UVC攝像頭移植成功

我的攝像頭終於出現影象了!

李遲按:本文章不是教程,不是心得總結,而是記錄我在做畢業設計過程中遇到的一些問題,以及怎麼去解決

(有些還是沒有解決)。可能帶有牢騷,可能帶有某些讓人不悅的話。希望大家見諒。

今晚很高興,搗鼓了幾天,鬱悶了幾天的事,今天解決了一些了。起碼我能在linux下看到攝像頭的影象了。

提起USB攝像在linux下的使用,無論是百度還是Google,出現的多數是法國人寫的一個通用驅動程式,即spca5xx,

我也是找了很久才找到,——因為在網上看到的那個網站已經不能登陸了,就是說不再維護了(這個後來再作說明),所以

找了很久。可惜不能用。因為我make都不通過,出現的錯誤如下:

make -C /lib/modules/`uname -r`/build SUBDIRS=/usr/local/gspcav1-20071224 CC=cc modules

make[1]: Entering directory `/usr/src/linux-2.6.30.2'

CC [M] /usr/local/gspcav1-20071224/gspca_core.o

/usr/local/gspcav1-20071224/gspca_core.c:54:27: error: asm/semaphore.h: No such file or directory

In file included from /usr/local/gspcav1-20071224/gspca_core.c:845:

/usr/local/gspcav1-20071224/utils/spcausb.h: In function ‘spca5xxRegRead’:

/usr/local/gspcav1-20071224/utils/spcausb.h:95: error: implicit declaration of function ‘info’

/usr/local/gspcav1-20071224/utils/spcausb.h: In function ‘spca_set_interface’:

/usr/local/gspcav1-20071224/utils/spcausb.h:278: error: implicit declaration of function ‘warn’

In file included from /usr/local/gspcav1-20071224/gspca_core.c:853:

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h: In function ‘sp5xxfw2_init’:

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:122: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:136: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:141: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:148: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:176: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h: In function ‘sp5xxfw2_start’:

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:214: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/Sunplus-jpeg/sp5xxfw2.h:230: error: called object ‘info’ is not a function

/usr/local/gspcav1-20071224/gspca_core.c: In function ‘spca5xx_ioctl’:

/usr/local/gspcav1-20071224/gspca_core.c:2463: error: implicit declaration of function ‘video_usercopy’

/usr/local/gspcav1-20071224/gspca_core.c: At top level:

/usr/local/gspcav1-20071224/gspca_core.c:2609: error: unknown field ‘owner’ specified in initializer

/usr/local/gspcav1-20071224/gspca_core.c:2609: warning: initialization from incompatible pointer type

/usr/local/gspcav1-20071224/gspca_core.c:2611: error: unknown field ‘type’ specified in initializer

/usr/local/gspcav1-20071224/gspca_core.c:2615: warning: initialization from incompatible pointer type

/usr/local/gspcav1-20071224/gspca_core.c: In function ‘spca50x_create_sysfs’:

/usr/local/gspcav1-20071224/gspca_core.c:2769: error: implicit declaration of function ‘video_device_create_file’

/usr/local/gspcav1-20071224/gspca_core.c:2780: error: implicit declaration of function ‘video_device_remove_file’

/usr/local/gspcav1-20071224/gspca_core.c: In function ‘spca5xx_probe’:

/usr/local/gspcav1-20071224/gspca_core.c:4301: error: incompatible types in assignment

make[2]: *** [/usr/local/gspcav1-20071224/gspca_core.o] Error 1

make[1]: *** [_module_/usr/local/gspcav1-20071224] Error 2

make[1]: Leaving directory `/usr/src/linux-2.6.30.2'

make: *** [default] Error 2

以我現在的能力,我不能解決,我google過,但得不到好的解決方法。

更重要的是,現在想找一個幾年前驅動支援的攝像頭很難啊!現在都流行免驅了——根據OS相關理論,這是不成功的,

裝置沒有驅動哪能訪問?他們說的是使用者免去安裝驅動程式這一步驟,——是這個“免驅”。我買的攝像頭不

在spca5xx支援範圍之中。我好容易找到一個,是小郭用的,攝像頭ID剛好是上述驅動所支援的。當時很興

奮,心想,萬事俱備,只差編譯、測試了。可惜,以失敗告終。錯誤如上所述。

我試的幾個版本為spca5xx-20060501和gspcav1-20071224,都不行。

在網上找了那麼多文章看,但一個也行不通。我不知大家的感受是什麼,反正我很鬱悶,很無奈。

後來,在插入我買的攝像頭時,使用了lsusb,將ID那一行復制到google中,一不小心,發現了一個

我在配置核心時也碰到過,但沒有注意,沒想到如此有用!後來在一個網站中找到有關使用UVC驅動攝像頭的

文章,地址忘了,我也不知是怎麼搜尋到的。此外還下載一個觀看影象的小軟體(補充一下:luvcview 或者cheese[debian自帶])。

結果成了!可以顯示影象了!下面寫一下過程:

至於從哪個版本開始核心支援UVC,官方的話是“Linux 2.6.26 and newer includes the Linux UVC driver natively.”

1、檢視攝像頭ID:

[[email protected] dev]# lsusb

Bus 002 Device 013: ID 0ac8:3313 Z-Star Microelectronics Corp.

0xc8:3313在UVC中支援了。

2、插入攝像頭後,就可以在/dev/下檢視是否有video裝置檔案:

[[email protected] dev]# ls | grep video

video

video0

其中,video是video0的連線。如果沒有再現,可能UVC沒有配置到核心中,重新配置就可以了

(大致在Device DriversàMultimedia devicesàVideo capture adaptersàV4L USB devices下面)。如果核心配置了,

還是不出現,可以使用modprobe uvcvideo來載入該模組。

3、先看看攝像頭的相關資訊:

lshal | grep Cam

出現:

info.product = 'Vega USB 2.0 Camera.' (string)

usb_device.product = 'Vega USB 2.0 Camera.' (string)

usb.interface.description = 'Vega USB 2.0 Camera.' (string)

info.product = 'Vega USB 2.0 Camera.' (string)

input.product = 'Vega USB 2.0 Camera.' (string)

info.product = 'Vega USB 2.0 Camera.' (string)

對USB有研究的,就很熟悉這些欄位。

再看一下系統能不能識別出攝像頭:

[[email protected] log]# dmesg | grep Cam

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

input: Vega USB 2.0 Camera. as /class/input/input6

usb 2-7: Product: Vega USB 2.0 Camera.

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

input: Vega USB 2.0 Camera. as /class/input/input7

usb 2-7: Product: Vega USB 2.0 Camera.

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

input: Vega USB 2.0 Camera. as /class/input/input8

usb 2-7: Product: Vega USB 2.0 Camera.

[[email protected] ~]# dmesg | grep video

pci 0000:05:00.0: Boot video device

Linux video capture interface: v2.00

usbcore: registered new interface driver uvcvideo

uvcvideo 2-7:1.0: usb_probe_interface

uvcvideo 2-7:1.0: usb_probe_interface - got id

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

uvcvideo 2-7:1.0: usb_probe_interface

uvcvideo 2-7:1.0: usb_probe_interface - got id

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

uvcvideo 2-7:1.0: usb_probe_interface

uvcvideo 2-7:1.0: usb_probe_interface - got id

uvcvideo: Found UVC 1.00 device Vega USB 2.0 Camera. (0ac8:3313)

哈哈,識別出來了!可以測試了。

4、我使用的軟體是luvcview,這個軟體google就可以找到的。安裝過程很簡單,——make,make install就可以了。(哈哈,這裡才說)

下面這個過程是測試過程,從看到影象到結束的過程:

[[email protected] dev]# luvcview -d /dev/video0 -f yuv -s 640x480   (直接執行luvcview也可)

uvcview verion 0.1.4

size width: 640 height: 480

Video driver: x11

A window manager is available

video /dev/video0

Stop asked

Clean Up done Quit

[[email protected] dev]#

解釋命令:

-d 裝置名,這裡/dev/video或/dev/video0都可以,因為它們都是一個檔案

-f 格式,有yuv和jpg兩種,後者測試不行

-s 大小,能支援的最大尺度可能由luvcview決定,也可能由攝像頭決定,(應該是後者,暫沒有研究)

更具體的參見luvcview目錄下的README檔案。

另外,如果沒有插入攝像頭,即使modprobe uvcvideo也不會出現/dev/video裝置檔案;插入攝像頭,即使沒有modprobe uvcvideo,

也會出現/dev/video裝置檔案,當然這是我的測試,沒有代表性,也沒有理論根據的。

注:

1、UVC:USB Video Class

2、gspcav不是不再維護,而是在某一版本開始已經納入核心了,至於哪個版本(2.6.26),就不太清楚了。特此說明。

3、這次畢業設計所不再編譯gspca到核心中了。不支援它,直接使用UVC。

第一張圖:紅旗6.2,核心2.6.28.8

USB Camera攝像頭 - BEYOND ME - BEYOND ME500)this.width=500;" width="500" border="0">

虛擬機器FC9,核心2.6.30

USB Camera攝像頭 - BEYOND ME - BEYOND ME500)this.width=500;" width="500" border="0">

發表於: 2010-03-19,修改於:

我跟作者經歷簡直太相似了,起先搞了好幾天真是有點摸不著頭腦,哈哈!!

相關推薦

UVC攝像頭移植成功

我的攝像頭終於出現影象了! 李遲按:本文章不是教程,不是心得總結,而是記錄我在做畢業設計過程中遇到的一些問題,以及怎麼去解決 (有些還是沒有解決)。可能帶有牢騷,可能帶有某些讓人不悅的話。希望大家見諒。 今晚很高興,搗鼓了幾天,鬱悶了幾天的事,今天解決了一些了。起

UVC攝像頭移植總結

第一步:首先檢視自己攝像頭ID,判斷是否UVC支援。如果你能在http://linux-uvc.berlios.de/找到你的攝像頭的ID,即UVC支援的,那麼就可以 在linux下使用了。 1、檢視攝像頭ID: [[email protected] de

iTOP-4412開發板-QtE4.7-UVC攝像頭使用例程

只有一個 tftp 命令 文件拷貝 用例 qmake 添加 攝像頭 更新 本文檔主要介紹 迅為iTOP-4412 開發板 QtE4.7 系統下 UVC 攝像頭的使用過程。 工程文件是:“iTOP-4412-QtE4.7-UVC_V1.0”(註意版本更新)。用戶可以直接運行

Windows平臺使用DirectShow獲取UVC攝像頭上按鍵後的抓拍圖

什麼是UVC攝像頭,UVC是什麼意思? UVC是一種標準的USB視訊裝置協議,就是傳說中的免驅攝像頭。UVC是Usb Video Class的簡稱。 Windows平臺上UVC驅動文件 DirectShow是微軟公司在ActiveMovie和Video for

樹莓派+UVC攝像頭+網路監控

電腦上觀看樹莓派的USB攝像頭影象 想在自家房間搭建個USB攝像頭。城中村還是比較亂的。路人吵吵吵。不信任那些人的德行,自好自行做好準備一套好 裝好拆的裝置。想看他們時候,可以立馬安裝裝置。 硬體上:樹莓派Zero W,USB攝像頭。路由器。膝上型電腦。 樹莓派上:

簡述基於V4L2驅動框架的UVC攝像頭驅動(只用於獲取資料,不具備控制功能)

分析的是韋東山第三期視訊中的從零編寫USB攝像頭驅動裡的程式碼 1)入口函式: 註冊一個usb_driver結構體:usb_register裡面有什麼內容?根據id_table進行匹配 :表示它能支援哪些裝置當接上能夠支援的裝置的時候,會呼叫probe函式2)在probe函

雙目視覺嵌入式移植中Opencv程式移植時問題及解決,移植成功啦,哈哈

我用的是Cmake,最終成功,把路徑下生成的so檔案拷到開發板的  /lib檔案下。 遇到問題多看文章,多試幾次最終一定會成功。 現在就可以編譯程式啦: <span style="font-size:18px;">#include <cv.h>

基於AT91SAM9X35EK的嵌入式Linux+UBI根檔案系統移植成功

AT91Bootstrap 3.6.0  NAND: Done to load image U-Boot 2014.04 (Feb 15 2016 - 14:56:42) CPU: AT91SAM9X35 Crystal frequency:       12 MHz CPU clock        :  

uvc攝像頭程式碼解析7

13.uvc視訊初始化 13.1 uvc資料流控制 [cpp  struct uvc_streaming_control {       __u16 bmHint;       __u8  bFormatIndex; //視訊格式索引       __u8  b

ubuntu下使用UVC攝像頭

導師讓學習opencv程式設計,想用Qt但是發現windows上Qt使用directshow非常麻煩,就想到linux上程式設計,於是買一普通攝像頭,回來一看,插在ubuntu電腦上沒有反應,知道視驅動的問題,開始探尋如何在ubuntu上使用。 具體操作如下: 首先使用lsu

uvc攝像頭程式碼解析5

8.初始化uvc控制 8.1 重要結構體 struct uvc_control { //uvc控制 struct uvc_entity *entity; //uvc實體 struct uvc_control_info info; //uvc控制資訊 __u8 ind

Linux uvc攝像頭驅動初探

本文基於AM6C平臺Linux3.0.8核心。 1.drivers/media/video/uvc/Makefile uvcvideo-objs := uvc_driver.o uvc_queue.o uvc_v4l2.o uvc_video.o uvc_ctrl.o

[RK3399][Android7.1]除錯筆記 --- 只使用UVC攝像頭

rk3399平臺可以支援多種不同介面的Camera,如MIPI, DVP, UVC camera。 對於DVP,MIPI的Camera,對應的配置是放在cam_board.xml的。 因此如果只使用UVC Camera,那麼只要移除此檔案就可以了。 改

香橙派PC筆記-05-編譯linux核心和UVC攝像頭驅動筆記

香橙派PC筆記-05-編譯linux核心和UVC攝像頭驅動筆記 我的筆記和資料全共享在雲盤: 沒有密碼,歡迎下載~~~~~~ 材料: 香橙派:orangepi PC TF卡:用原來的三星8G CLASS 10 TF卡裝LUBUNTU 電源介面卡:1A的帶

uvc攝像頭程式碼解析6

10.掃描視訊裝置鏈和註冊視訊裝置 10.1 uvc視訊鏈 struct uvc_video_chain { //uvc視訊鏈 struct uvc_device *dev; //uvc裝置 struct list_head list; //uvc視訊鏈連結串列

UVC 攝像頭驅動(三)配置攝像頭,實時資料採集

  前面分析了 UVC 攝像頭的硬體模型和描述符,對於一個 usb 攝像頭來說,內部大概分為一個 VC 介面和一個 VS 介面,VC 介面內部有許多 unit 和 terminal 用來“控制”攝像頭,比如我們可以通過 Process unit 設定白平衡、曝光

uvc攝像頭程式碼解析之描述符

module_init(uvc_init); //1.模組入口 2.初始化函式 static int __init uvc_init(void) // 2.初始化函式 { int result; result = usb_register(&uvc_driver.driver); // 3

攝像頭移植簡述(mtk)

這裡以mt6737t為例1、編譯攝像頭驅動    device/lentek/xxxxxx/ProjectConfig.mk    kernel-3.18/arch/arm64/configs/xxxxx_defconfig    kernel-3.18/drivers/mi

UVC攝像頭(3)應用層——webcam程式

完成UVC完成webcam.ko模組驅動後還需要一個程式帶動驅動 需要的模組: webcam.ko dwc_otg.ko wdt.ko 平臺:海思某晶片 int main(int argc, char* argv[]) { struct

米聯客(MSXBO)USB3.0 UVC攝像頭實現基於FT602Q晶片方案

USB3.0 UVC攝像頭實現基於FT602Q晶片方案 USB3.0介面晶片FT602Q支援UVC協議,可以很方便的實現一個US