嵌入式板上使用USB摄像头问题

本文讲述了作者在嵌入式板上使用USB摄像头遇到的问题及解决过程。首先,ov511不支持特定分辨率导致花屏,但已找到替代方案。接着,针对zc0301p摄像头,作者发现LE版驱动不支持所需功能,决定移植完整版spca5xx驱动。在SUSE Linux 9.3上成功编译但不支持特定分辨率,而在Red Hat Linux 9上编译失败。作者深入研究发现Red Hat内核改动导致不兼容,并提供了不同版本的解决办法,包括补丁和内核更新选项。
摘要由CSDN通过智能技术生成

前阶段我所说的ov511(网眼3000)在我自己写的程序以240x320方式下截图花屏,是因为ov511不支持此分辨率,已经在pc上用其他视频程序证实。现在我的程序可以良好的工作在240x240模式以RGB565方式输出图像,并且直接显示在液晶屏上。屏幕下方一段240x80的空间用来显示一些信息(说白了就是显示些字),因为摄像头模块只是我所要做的一部分。

最近刚新买了一个中星微芯片zc0301p的摄像头,碰到了一些问题,如下:
PC平台:装了3系统,SUSE Linux 9.3(2.6核),Red Hat Linux 9(2.4.20-8),Windows XP
嵌入式平台:华恒HHARM9-EDU-R2

1.首先在嵌入式平台试了spca5xx-LE驱动,可以驱动。移植的Servfox可以工作,spcaview可以接收到图像,但会掉帧。但这还不是首要问题。

2.我自己写的程序无法使用,运行到设置图像格式(RGB565或RGB24)时出错,说不支持此参数。原因在于:(摘自驱动程序主页http://mxhaard.free.fr/spca5le.html)
The spca5xx-LE design is very different from the spca5xx full package(LE版的驱动和完全版的差很多)。
The memory in use are the most smaller as possible(LE版的驱动会尽量减少内存的使用)
The spcadecoder is reduce and only raw jpeg webcam are used.(驱动模块只支持输出原始jpeg格式)

3.明显LE的驱动不符合我的要求。我所要做的是:我已经有了自己的摄像头应用程序,只想在驱动方面多支持一些市面上常用摄像头。(如果只能支持现在已经基本灭绝的几款摄像头,那还有什么意义)

4.那么只能移植完整版的驱动到实验箱了。问题来了,按照spca5xx完整版的INSTALL安装指南,在SuSE 9.3上轻松编译安装(也就只是make;make install而已)。用我自己写的程序测试可以驱动并成功截图,但分辨率不支持240x240(shit!难道我还得改程序),只支持640x480和320x240,并且240x320也不支持。难道要把输出的320x240图像,旋转90度,再显示在lcd上,那可真够麻烦的。

5.安装指南里并没有讲如何移植,难道只要在编译的时候指定gcc为armv4l-unknown-gcc就可以?(试过,失败)或者像LE版驱动一样,复制到usb驱动文件夹,建个spca5xx文件夹,修改makefile和config.in?(试过,仍然不行,make modules可以生成驱动模块,但insmod时出错,说找不到支持的核心版本),谁能给出一个详细的移植过程(要的是完整版的spca5xx驱动)

6.在Red Hat9上编译失败(解决办法在后面,但是我并没有去试,因为我的SuSE已经可以用了),原因在于:
这里引用一个大牛的说法(原文连接http://blog.wulei.net/2006/04/10/62.html#more-62):"RedHat 的内核是非标准内核,他将 remap_page_range从4个参数擅自更改为5个参数。然而这5个参数的remmap_page_range是内核2.5.0中使用的 ,2.6中也已经弃用了。换句话说,就是RedHat linux己制造了不兼容!!!感觉这种手段和xxx何其相似!!!在此严重鄙视一下Redhat.也就是如果你选择了redhat的产品,要么掏钱去请求其服务,要么自己解决问题。而隔绝了和其他linux社区的帮助。于是我决定抛弃其提供的内核,升级到标准内核。于是,开始疯狂的下载内核,编译内核,试图通过这种方式来解决这个不兼容的问题。我尝试 redhat自己的2.4.21的更高版本2.4.21-40.EL, 但是编译spca之后发现出现的错误更加多, 说明现在redhat自己的内核已经离标准愈来愈远了。太息之余,我想试试标准的内核能否工作。我于是在kernel.org下载并编译了2.4.32和2.4.31,这两个内核都可以完全正确的编译spca5xx 驱动。但是严重的是,我的其他软件变的非常不稳定,而且系统自带的mysql和我的XFree86完全启动不了。这再次印证了RedHat的非标准作风。证实了其试图将用户帮定在其平台的野心。我决心以后一定皈依到debian门下。但是我目前还得想办法解决。"

请继续看:"通过阅读我有了一个重要的发现在05年初期的开发版中,很多人都说只要将RH9_REMMAP宏定义打开就可以了。于是我决定试试这个时候的版本。于是下载了spca5xx20050111版本,结果出乎我意料,真的可以运行了!!!但是,效果非常差。没有我实验的在2.6内核下的那么好。但是我终于有了一个可用的版本。现在有好的开始了。我终于能找到门路了。我只要从这个版本开始跟踪开发,就能知道到底是什么导致了在我们的系统上不能成功。于是我陆续下载了20050319和20050419,结果发现前者是可以运行的,后者开始出错。好了,我现在十分满意,通过对这两个版本的比较,我就能搞清楚问题所在了。"

原因真相大白:"于是我通过emacs的ediff对比阅读了这两个版本的spca5xx.c文件。原来不光是remap_page_range这一个函数的问题,而是围绕这个问题的一些程序的架构。估计是从20050419以后由于大部分人都从redhat 9转到了Fedra结果着个问题就不重要了,因此该驱动在redhat下的分支已经没有人维护了,才导致了代码的不兼容。"

解决方法:此大牛提供了一个patch,放在最后吧,需要注意的是他的系统是redhat企业版,内核:2.4.21-4.EL i686,不过spca5xx在sourceforge也提供了它的解决方法,如下:
Q:I'm using Redhat 9, and the driver won't compile!(我用Redhat9,但驱动无法成功编译)
A:This problem is caused by the fact that Redhat has tweaked the default kernel included in Redhat 9(redhat公司修改了默认的内核), to solve this problem get different kernel(想要解决这个问题,要么下载新的内核(源代码)), or do this:(要么只能……自己看吧)
Download the CVS version of the driver, and add #define RH9_REMAP 1 to the top of spca50x.c. then compile and install.
原文连接http://spca50x.sourceforge.net/spca50x.php?page=faq#5

=================================================================================
总结:1.我需要完整版的spca5xx驱动详细的移植过程(如果你有耐心看到这里,就一定有耐心再写一篇文章出来,大侠们,快点跳出来吧)
2.spca5xx-LE驱动只支持输出jpeg格式图像
3.许多2.6核的linux系统编译spca5xx完整版会很顺利(有些甚至直接就支持)
4.Red hat 9编译完整版spca5xx时,版本号在20050319之前的可能不会出错(但效果很差),而之后的会出错。出错有解决办法(并且这些方法没有经过我自己的验证,所以不保证能用):第一种方法:去www.kernel.org下载官方的核心源代码编译。第二种方法:spca5xx开发站点提供的做法Download the CVS version of the driver, and add #define RH9_REMAP 1 to the top of spca50x.c. then compile and install.  第三种方法:把下面的内容(源自http://blog.wulei.net/2006/04/10/62.html#more-62)存成spca5xx20060402.patch,然后将该文件放在解压后的spca5xx20060402/目录下,执行patch -p1 < spca5xx20060402.patch
===========

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值