分类: LINUX
2010-06-01 22:01:40
最近一直忙着作些小实验,头些天做的一些笔记没有来得及整理。先放在word里了,这会实在不 是特别想看书,把没有来得及写上的东西补一下。
和spcaview简单介绍
Linux内核中集成了对0V511系列摄像头的支持,但没有包含对我的摄像头的支持,本文选用了开源驱动spca5xx,这个驱动提供了对大部分主流
摄像头的支持。 gspca和spca5xx是一个系列的,它用于
spcaview是一个我非常喜欢的应用程序,可以作为浏览采集到的图像接口。当然它更强大的不是这一点,spcaview 是 Linux网络客户端
监控工具,当然也能用于本地测试摄像头用。如果用于网络监控的摄像头,还必须要有spcaserv,本文只用它来监视本地摄像头。通过spcaview 可以进行数据流的采集,可
以实现单帧采集,连续帧采集。对于数据流的采集,可以在服务器端,也可以在客户端。当然服务器端和客户端都得有桌面环境。 spcaview 工具可以过 -o 参数把数据流传到一个文件中。也可以采用压缩数据流的办法,要用到-z参数。程序源码中有详
细的使用说明。
和spcaview在X86 机器上的编译使用
编译环境仍然是在VMware虚拟机的客户操作系统Redhat9.0下面。下面列出详细的编译和安装步骤。
n 下载源代 码,不论安装什么软件,这个总是必须的。我下载的软件版本分别为:spca5xx-20051212.tar.gz和spcaview-20051127.tar.gz,也有更新一些的版本,这里我用的是这个。还有一个用到的压缩包
gspcav1-20071224.tar.gz,
这个是为了修改某些结构体而使用的。
n
解压缩上
面两个压缩包,这里假设这两个文件都在/root/tmp目录下面。可以执行命令如下进行解压缩,为了方便,我以root帐户登录:
[root@localhost
tmp]# tar zxvf spca5xx-20051212.tar.gz
[root@localhost
tmp]# tar zxvf spcaview-20051227.tar.gz
执行完这两个命令后将在/root/tmp目录下面产生两个目录,spca5xx-20051212和spcaview-20051227。
n
编译spcaview,编译这个程序不会出现问题,可以直接通过,方法是先进到文件夹spcaview-20051227下面,执行终端命令make,
[root@localhost
spcaview-20051227]# make
[root@localhost
spcaview-20051227]# make install
执行完这两个步骤,就已经把spcaview安装到系统中了,可以在终端执行命令spcaview,将会弹出一个窗口,如果摄
像头驱动Ok,应该就可以成功看到采集到的图像了。如果要安装成网络服务器的形式,可以参考README文件。本文
只是安装成本地监控来使用
n
编译spca5xx,这个是图像采集设备的驱动程序,也就是摄像头的驱动。编译这个程序的过程中,遇到了不少问题,不过最后都解决了。 这里先说明一下编译的整个过程,稍后说明安装过程中出现的问题。
这个驱动程序已经可以在Redhat9.0的原装内核
另外还要修改所有的判断Linux版本行的条件编译语句中的
#if
LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,22),修改为
#if
LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)。
要让中星微的厂商ID和产品ID为 (0x
static
__u16 tas5130cxx_start_data[][3] = {
{0xa0, 0x0001, 0x0000}, //00,00,01,cc,
{0xa0, 0x0002, 0x0008}, //00,08,02,cc,
。。。。。。。。。。。。。。。。。。。。。。//省略的数据部分。
{0xa0, 0x0008, 0x0250}, //02,50,08,cc,
{0xa0, 0x0008, 0x0301}, //03,01,08,cc,
{0xa0, 0x0060, 0x
{0xa0, 0x0061, 0x0116}, //01,16,61,cc,
{0xa0, 0x0065, 0x0118}, //01,18,65,cc
/********************/
{0, 0, 0}
};,既然不知道这些数据什么意思怎么修改呢,这个我当时也很无奈。后来想到可以借助于gspca驱动,在现在
的linux发行版中好多都有。ubuntu
linux就集成了这个驱动程序。经过验证,在ubuntu下面是可以
支持我的摄像头的,所以我就把gspca的源代码下载下来,把其中相应的代码拷贝了一份,然后替换掉相应的结构体里的数据就可以了。
3 实 验过程中出现的问题
这里列出的问题并不是每个人都一样。因为我的 摄像头不一定和你的一样。我的摄像头,奥尼产的。
问 题一:spcaview窗口没有显示,是黑屏的。
通过检测USB接口发现用的是中星微的DSP控制器,传感器芯片型号开始没有办法
获得,当我把程序编译好,驱动装上以后,可以看到USB摄像头有反应了,找到了视频设备,但显示框是黑色的。也就是没有图像。去google了一下,有些人也碰到了相似问
题。因为这种现象跟摄像头的控制器和传感器芯片有关,所以这样的帖子不是特别多。只好自己想办法了。因为我装了个Ubuntu的虚拟机,所以我想应该在比较高
一点的版本上进行测试,经过实验结果发现自己的Ubuntu系统是可以捕获到自己的zc305b摄像头图像的。这就给了我希
望。我把gspca(Ubuntu上用的是这个)和spca5xx的源代码进行比较。当然不是胡乱进行比较了。因为我用了一个sonix的摄像头在Redhat9上成功抓取了图像,所以我想
一定是传感器的问题,有可能是对zc30b内部这个传感器没有搞对。发现把spca5xx.c和spca5xx.h中原来的SENSOR_TAS
问题二:如何解决Redhat9.0自带内核2.4.20-8编译失 败和spcaview打不开v4l设备的问题。
刚开始把代码下载下来的 时候兴致冲冲的编译一下,发现编译都通不过,只好又去网上google一下。发现有几个兄弟是通过升级内核版本来实现的。都是通过看Readme文件,觉 得不一定支持这个内核版本号。还有些同僚说可能是Redhat公司对内核打了自己的补丁。这些话有对有错。下面解释一下。
查看源代码发现有//#define RH9_REMAP 1 这句话说明是可以Redhat9下面编译的,先把这句代码的注释去掉,编译一下,发现可以通过了。可是把摄像头 插上,还是打不开设备。解决了编译的问题还得解决摄像头的其他问题。我们要让自己的摄像头正常显示图像才好。我开始的想法就是把编译时出现的一些警告去 掉。这里要说明一下,通过升级内核的方法是比较简单的。我是升级到2.4.26,升级并编译完之后,对于许多摄像头来说都是可以直接用的。如果出现黑屏就 要考虑上面提到的解决办法。这部分主要是讲不升级内核,如何在Redhat9自带内核下面的编译。仔细读一下代码,发现里面好多版本判断的语句根本没有包 括2.4.20,这也就难怪我们没有办法打开摄像头设备了。后来经过实验,把所有的2.4.22的内核版本判断该成2.4.20就OK了。注意一 处:spca5xx.c文件的8548行开始。
这里显然把22改为20后就不合适了。那么如何把想要的版本包含进来呢。我把这里的22 没有改,把20改成18就可以了。读代码可能感觉第二个地方不改好象也包括2.4.20-8了。但经过实验是不行的。我也有点糊涂。不过关键是自己的目的 达到了,很开心。
通过这个实验,学习的自己一些知识和方法:
n 要学会做 对比,这次对Ubuntu和Redhat的对比起了关键作用。这也是一个很好的方法,因为现在用的一些系统肯 定都是升级过的,如果在新环境下能成功,这样就可以给个很好的借鉴。
n 要有耐 心,其实这个东西我开始没有头绪,google.不到内容,很郁闷。但坚持就对了。
n 对于驱动 有了更好的理解。在开发领域自己还是个生手,对好多东西的理解都很抽象,通过这次学习,包括对代码的一些分析,学到了很多东西,特别是USB接口摄像头驱动的层次。
转自:http://blog.csdn.net/yanglijing/archive/2008/10/19/3081158.aspx