LINUX下 V4L2 網路攝影機裝置初始化問題

來源:互聯網
上載者:User

 原文地址:http://user.qzone.qq.com/490054348/infocenter#!app=2&via=QZ.HashRefresh&pos=1362544013

核心選擇 uvc模組選項,編譯好核心下載使用後,一直在使用的時候報如下錯誤:
 

錯誤的:

usb 1-1: new full speed USB device using s3c2410-ohci and address 7

usb 1-1: configuration #1 chosen from 1 choice

uvcvideo: Found UVC 1.00 device USB2.0 Camera (1e4e:0102)

uvcvideo: Failed to query (1) UVC control 2 (unit 0) : -32 (exp. 26).

uvcvideo: Failed to initialize the device (-5).

usb 1-1: USB disconnect, address 7

 

然後在網上找了很多方法,

1:什麼先編譯其他模組,後編譯uvc模組啥的等。

2:由於自己嘗試在自己電腦上fedora17上完全可以使用,沒有保錯。所以我就把我電腦核心版本3.4的源碼中的uvc模組拿出來單做,在載入到開發版核心2.6.26中。還是一樣報錯。

 

好吧!那我就看核心錯誤代碼,跟蹤原始碼找結果吧!!先定位在drivers/media/video/uvc下面的幾個檔案裡。然後搜尋錯誤提示。定位在uvc_video.c和uvc_driver.c這兩個裡面。

最後簡單通過設定列印資訊核心一步一步找到局部的小流程。

uvc_driver.c檔案的驅動註冊時:

uvc_register_video()

         -àuvc_video_init()

                   -àuvc_set_video_ctrl()

                            -à__uvc_query_ctrl()

在__uvc_query_ctrl()中有如下內容:

 

if (ret != size) {

                   uvc_printk(KERN_ERR, "Failed to query (%u) UVC control %u "

                            "(unit %u) : %d (exp. %u).\n", query, cs, unit, ret,

                            size);

                   return -EIO;

         }

這裡存在一個return –EIO;這個-EIO就是錯誤返回碼-5.

        

下面根據我設定的資訊(我在核心裡自己設定的,親)來分析這段過程,資訊如下:

usb 1-1: new full speed USB device using s3c2410-ohci and address 4

usb 1-1: configuration #1 chosen from 1 choice

uvcvideo: Found UVC 1.00 device USB2.0 Camera (1e4e:0102)

uvcvideo: before uvc_video_init(&dev->video)

uvcvideo: loveywm1

uvcvideo: uvc_get_video_ctrl().query111==135

uvcvideo: query==135;size==26

uvcvideo: ret==26;size==26

uvcvideo: ret==26;size==26

uvcvideo: loveywm2

uvcvideo: loveywm3

uvcvideo: uvc_set_video_ctrl().sixe==26

uvcvideo: query==1;size==26

uvcvideo: ret==-32;size==26

uvcvideo: ret==-32;size==26

uvcvideo: Failed to query (1) UVC control 2 (unit 0) : -32 (exp. 26).

uvcvideo: loveywm4

uvcvideo: loveywm5

input: USB2.0 Camera as /class/input/input1

evbug.c: Connected device: "USB2.0 Camera", usb-s3c24xx-1

 

思路:在這個過程中,一共調用了兩次__uvc_query_ctrl(),第一次是查詢uvc_get_video_ctrl();其判斷依據是列印的query111==135(query就是命令字,自信查看),這裡沒有保錯;第二次是設定uvc_set_video_ctrl().其判斷依據是列印的query111==1.然後就報錯返回了!!至於為什麼錯,我沒有繼續跟下去,反正就是在設定資訊發生了問題。

         於是我就想,那我就不設定了,你報錯我就不理你。所以臨時解決辦法就出來了。

 

解決方案:

         屏蔽傳回值。在函數中做如下修改

static int __uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 unit,

                            __u8 intfnum, __u8 cs, void *data, __u16 size,

                            int timeout)

{

         __u8 type = USB_TYPE_CLASS | USB_RECIP_INTERFACE;

         unsigned int pipe;

         int ret;

 

         pipe = (query & 0x80) ? usb_rcvctrlpipe(dev->udev, 0)

                                  : usb_sndctrlpipe(dev->udev, 0);

         type |= (query & 0x80) ? USB_DIR_IN : USB_DIR_OUT;

 

         ret = usb_control_msg(dev->udev, pipe, query, type, cs << 8,

                            unit << 8 | intfnum, data, size, timeout);

         uvc_printk(KERN_ERR, "ret==%d;size==%d\n",ret,size);

 

         if (ret != size) {

                   uvc_printk(KERN_ERR, "Failed to query (%u) UVC control %u "

                            "(unit %u) : %d (exp. %u).\n", query, cs, unit, ret,

                            size);

                   return -EIO; //此處是我屏蔽的,由於在初始化裝置時發生錯誤,就返回錯誤碼,導致不能繼續初始化,那麼就在此不讓他返回錯誤碼,實際結果也不影響裝置使用。

         }

 

         return 0;

}

 

反正可以用了!!插入裝置時出現如下提示:

input: USB2.0 Camera as /class/input/input1

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.