vmware+redhat9 摄像头驱动安装方法一

redhat9 下摄像头驱动程序spca5xx和gspca安装

 

方法一:直接在2.4.20内核上安装spca55xx

方法二:升级2.4.20内核到2.6.18然后编译安装摄像头驱动gspca

两种方法我都试过,都可以成功

 

方法一:直接在2.4.20内核上安装spca55xx

 

 spca5xx、gspcat和spcaview简单介绍

      Linux内核中集成了对0V511系列摄像头的支持,但没有包含对我的摄像头的支持,本文选用了开源驱动spca5xx,这个驱动提供了对大部分主流摄像头的支持。 gspcaspca5xx是一个系列的,它用于2.6.17以上的内核版本,以前的版本使用spca5xx驱动程序。spca5xxLinux下常用的摄像头驱动, 这是一个通用驱动,可以在google里搜索并下载这个驱动程序。http://spca50x.sourceforge.net/spca50x.php 这个网站上有这个程序支持的摄像头和图像传感器信息。这个驱动程序也是基于上面的video4linux的。关于这个驱动的安装以及驱动要求的版本和支持的摄像头驱动等更详细的信息可以在你下载的安装包里找。

      spcaview是一个我非常喜欢的应用程序,可以作为浏览采集到的图像接口。当然它更强大的不是这一点,spcaview Linux网络客户端监控工具,当然也能用于本地测试摄像头用。如果用于网络监控的摄像头,还必须要有spcaserv,本文只用它来监视本地摄像头。通过spcaview 可以进行数据流的采集,可以实现单帧采集,连续帧采集。对于数据流的采集,可以在服务器端,也可以在客户端。当然服务器端和客户端都得有桌面环境。 spcaview 工具可以过 -o 参数把数据流传到一个文件中。也可以采用压缩数据流的办法,要用到-z参数。程序源码中有详细的使用说明。

spca5xxspcaviewX86 机器上的编译使用

编译环境仍然是在VMware虚拟机的客户操作系统Redhat9.0下面。下面列出详细的编译和安装步骤。

n     下载源代码,不论安装什么软件,这个总是必须的。我下载的软件版本分别为:spca5xx-20051212.tar.gzspcaview-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-20051212spcaview-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的原装内核2.4.20-8下成功编译并运行。要在这个内核下成功编译需要修改一些文件。首先修改一下/root/tmp/spca5xx-20051212/drivers/usb/spca5xx.c文件,终端下利用VI编辑器,在这个文件把84程序行 //#define RH9_REMAP 1前面的//去掉,也就是把语句行的注释去掉,让其有效。

另外还要修改所有的判断Linux版本行的条件编译语句中的

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,22),修改为

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)

      要让中星微的厂商ID和产品ID (0x0ac80x305b) 的摄像头工作还必须修改文件/root/tmp/spca5xx-20051212/drivers/usb/tas5130c.h,如果是其他的摄像头有可能需要更改这个文件,有可能不需要,要看你的厂商ID和产品ID对应的数据是否正确。我的摄像头刚好就是上面的中星微的一款产品,结果不能正常驱动。这里我并不是特别理解,这些数据的含义,只是以结构体的形式定义了一些16进制数据。我列出其中一个结构体的一部分如下:

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, 0x01a8},           //01,a8,60,cc,

    {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.cspca5xx.h中原来的SENSOR_TAS5130C改为SENSOR_TAS5130C_VF0250,并且把头文件的数据结果一个tas3150c开头的数组也都改成tas5130c_vf0250开头的。另外为了编译通过,还需要改sonix.het61x511.h,主要是这两个文件里都用到了tas3150c.h这个头文件的这些数据结构。结果真的成功了,已经可以成功用我的摄像头抓取图像了。当然这里的方法是我刚开始编译成功时使用的,实际上不用这么麻烦。可以按照第2部分的方法,复制一份结构体数据就可以了,这样就用不着麻烦的去改那么多地方了。这里我写下来,部分出于自己笔记的习惯。

问题二:如何解决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行开始。

  1.                                                                                 
  2. #if LINUX_VERSION_CODE > KERNEL_VERSION(2,4,22)
  3. static struct usb_driver spca5xx_driver = {
  4.   .owner = THIS_MODULE,
  5.   .name = "spca5xx",
  6.   .id_table = device_table,
  7.   .probe = spca5xx_probe,
  8.   .disconnect = spca5xx_disconnect
  9. };
  10. #else
  11. static struct usb_driver spca5xx_driver = {
  12. #if LINUX_VERSION_CODE > KERNEL_VERSION(2,4,20)
  13.           THIS_MODULE,
  14. #endif
  15.         "spca5xx",
  16.         spca5xx_probe,
  17.         spca5xx_disconnect,
  18.         {NULL,NULL}
  19. };
  20. #endif

这里显然把22改为20后就不合适了。那么如何把想要的版本包含进来呢。我把这里的22没有改,把20改成18就可以了。读代码可能感觉第二个地方不改好象也包括2.4.20-8了。但经过实验是不行的。我也有点糊涂。不过关键是自己的目的达到了,很开心。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值