LINUX下 V4L2 摄像头设备初始化问题
来源:互联网 发布:荧光笔四件套淘宝有吗 编辑:程序博客网 时间:2024/05/16 11:32
原文地址: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
- LINUX下 V4L2 摄像头设备初始化问题
- 摄像头设备初始化问题
- Linux下 摄像头 V4L2曝光时间控制
- linux下通过V4L2驱动USB摄像头
- Linux V4L2摄像头采集
- Linux摄像头V4L2编程
- linux下的V4L2提取USB摄像头图像(一)
- C语言高级应用---操作linux下V4L2摄像头应用程序
- Linux下用V4L2采集摄像头图像和视频
- Linux下使用ioctl设置v4l2摄像头参数--------案例二
- linux下cuda设备初始化
- Linux V4L2 摄像头视频采集
- Linux V4L2 摄像头视频采集
- Linux V4L2 摄像头视频采集
- Linux V4L2 摄像头视频采集
- Linux V4L2 摄像头视频采集
- Linux V4L2 摄像头视频采集
- Linux V4L2 摄像头视频采集
- google maps android v2开发基础(四)
- Lua做为c++程序的配置文件
- 第11条:考虑实现Comparable接口
- Android App集成支付宝
- C++随机数生成方法
- LINUX下 V4L2 摄像头设备初始化问题
- HDU 1513 Palindrome dp
- 种子搜索神器到底神在哪里?
- 实习瓶颈期
- 【最大匹配】Chessboard POJ2446
- android 系统详细介绍 你对这个小机器人了解多少 呢?
- 安装完Oracle后 使用dbca创建数据库 弹出ORA-01092: ORACLE 实例终止,强制断开连接
- java面试关于数学除法面试题两例
- 【Android基础】Activity的启动模式(android:launchMode)