spca5xx和spcaview简单介绍
Linux内核中集成了对0V511系列摄像头的支持,但没有包含对我的摄像头的支持,本文选用了开源驱动pca5xx-20060501.tar.gz,这个驱动提供了对大部分主流摄像头的支持。 gspcav1-20070110.tar.gz和pca5xx-20060501.tar.gz是一个系列的,它用于2.6.17以上的内核版本,以前的版本使用spca5xx驱动程序。spca5xx在Linux下常用的摄像头驱动, 这是一个通用驱动,可以在google里搜索并下载这个驱动程序。http://spca50x.sourceforge.net/spca50x.php 这个网站上有这个程序支持的摄像头和图像传感器信息。这个驱动程序也是基于上面的video4linux的。关于这个驱动的安装以及驱动要求的版本和支持的摄像头驱动等更详细的信息可以在你下载的安装包里找。
spcaview是一个我非常喜欢的应用程序,可以作为浏览采集到的图像接口。当然它更强大的不是这一点,spcaview 是 Linux网络客户端监控工具,当然也能用于本地测试摄像头用。如果用于网络监控的摄像头,还必须要有spcaserv,本文只用它来监视本地摄像头。通过spcaview 可以进行数据流的采集,可以实现单帧采集,连续帧采集。对于数据流的采集,可以在服务器端,也可以在客户端。当然服务器端和客户端都得有桌面环境。 spcaview 工具可以过 -o 参数把数据流传到一个文件中。也可以采用压缩数据流的办法,要用到-z参数。程序源码中有详细的使用说明。
一:下载libsdl库, 我下的源码包为SDL-1.2.14.tar.gz ( spcaview 等要用到这些库才能正确编译)
[root@localhost ~]# tar zxvf SDL-1.2.14.tar.gz
[root@localhost ~]# cd SDL-1.2.14
[root@localhost SDL-1.2.14]# ./configure ; make ;make install
二:安装:spca5xx-20060501.tar.gz(我的是FC9更新的内核为2.6.32.2,本身带有摄像头的驱动,接上有/dev/video0设备信息)跳过直接安装spcaview
1.动态加载安装
[root@localhost ~]# tar zxvf spca5xx-20060501.tar.gz
[root@localhost ~]# cd spca5xx-20060501
[root@localhost spca5xx-20060501]# make
[root@localhost spca5xx-20060501]# make install
[root@localhost spca5xx-20060501]# depmod -a
[root@localhost spca5xx-20060501]# modprobe spca5xx
看看驱动模块挂载好了没有?
[root@localhost spca5xx-20060501]# lsmod |grep spca5xx
spca5xx 659792 0
videodev 6912 1 spca5xx
我们再查看一下设备/dev/video0是否存在?这时要接上USB摄像头
[root@localhost ~]# ls -lh /dev/video0
crw------- 1 root root 81, 0 03-25 14:38 /dev/video0
2:编译进内核:
1).修改 Makefile和Kconfig文件:
修改/usr/src/linux-2.6.16.19/drivers/usb/Makefile文件,在
obj-$(CONFIG_USB_W9968CF)+ = media/ 之后添加一行:
obj-$(CONFIG_USB_SPCA5XX)+ = media/
2).修改/usr/src/linux-2.6.16.19drivers/usb/media/Kconfig文件, 在config USB_OV511这一项后添加:
config USB_SPCA5XX
tristate "USB SPCA5XX Cameras support"
depends on USB && VIDEO_DEV
3).修改/usr/src/linux2.6.16.19/drivers/usb/media/Makefile,
在obj-$(CONFIG_USB_OV511) += OV511/后
添加:obj-$(CONFIG_USB_SPCA5XX) += spca5xx/
4).配置内核:
[root@localhost ~]# cd /usr/src/linux-2.6.16.19
[root@localhost linux-2.6.16.19]# make menuconfing
在出现的配置文件选项中,将以下几处选为M(表示加载)就行了:
(1)Deveces Support/Multimedia devices --->
<M> Video For Linux
(2)Deveces Support/USB support--->
<M> Support for Host-side USB
--- USB Host Controller Drivers
<M> OHCI HCD support
(3)--- USB Multimedia devices
<M> USB SPCA5XX Cameras support
5).在PC机上接上USB摄像头,查看一下设备/dev/video0是否存在:
[root@localhost spca5xx-20060501]# ls -lh /dev/video0
crw------- 1 root 81, 0 05-26 17:55 /dev/video0
若出现上面一行信息,则表明加载spca5xx成功,以后就可以直接用这个驱动了。
三、spcaview 安装:
1>.下载源码;
http://mxhaard.free.fr/spca50x/Download ,
我下载的是目前这个版本:spcaview-20061208.tar.gz
# tar zxvf spcaview-20061208.tar.gz
# cd spcaview-20061208
# make ; make install
3>配置可执行程序的路径:
可执行的工具被安装到 /usr/local/bin目录中,所以我们还要配置一下用户的环境变量PATH 。
配置命令执行路径,在当前用户家目录下的.bashrc文件中加入下面的一行:
export PATH=".:/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/X11R6/bin"
然后运行如下命令:
# source .bashrc
4>测试
使用SpcaView测试摄像头工作状态
# spcaview -d /dev/video0 -f jpg -s 320x24
如果您想看的图像分辨率,可以调整 -s后面的参数,比如 640x480
如果抓取数据流,尝试用下面的命令,比如我们把抓取的数据流存在一个linuxsir.org.avi文件中;如果想播放,就用mplayer就行,xine也可以。
使用SpcaView来抓出视频流:
# spcaview -f yuv -o spcaview.avi
移值:
在嵌入式系统安装USB摄像头驱动,实际就是一个程序移植过程。移植的基本过程和上述在PC机上安装过程类似,只是要将编译器有gcc换成arm-linux-gcc就
行了。
问题1./usr/include/asm/types.h:4:34: 错误:asm-generic/int-ll64.h:没有那个文件或目录
解决方法:用locate 查找int-ll64.h,然后将其复制到/usr/include/asm-generic目录中。
In file included from /usr/include/linux/joystick.h:30,
问题2
[root@localhost spca5xx-20060501]# make
Building SPCA5XX driver for 2.5/2.6 kernel.
Remember: you must have read/write access to your kernel source tree.
make -C /lib/modules/`uname -r`/build SUBDIRS=/usr/local/src/spca5xx-20060501 CC=cc modules
make[1]: Entering directory `/usr/src/linux-2.6.32.2'
ERROR: Kernel configuration is invalid.
include/linux/autoconf.h or include/config/auto.conf are missing.
Run 'make oldconfig && make prepare' on kernel src to fix it.
WARNING: Symbol version dump /usr/src/linux-2.6.32.2/Module.symvers
is missing; modules will have no dependencies and modversions.
Building modules, stage 2.
/usr/src/linux-2.6.32.2/scripts/Makefile.modpost:42: include/config/auto.conf: 没有那个文件或目录
make[2]: *** 没有规则可以创建目标“include/config/auto.conf”。 停止。
make[1]: *** [modules] 错误 2
make[1]: Leaving directory `/usr/src/linux-2.6.32.2'
make: *** [default] 错误 2
解决方法:Run 'make oldconfig && make prepare' on kernel src to fix it.
问题3:[root@localhost linux-2.6.32.2]# make menuconfig
HOSTCC scripts/basic/fixdep
在包含自 /usr/include/sys/socket.h:36 的文件中,
从 /usr/include/netinet/in.h:25,
从 /usr/include/arpa/inet.h:23,
从 scripts/basic/fixdep.c:116:
/usr/include/bits/socket.h:340:24: 错误:asm/socket.h:没有那个文件或目录
make[1]: *** [scripts/basic/fixdep] 错误 1
make: *** [scripts_basic] 错误 2
解决办法:将asm正确链接,
问题4[root@localhost spca5xx-20060501]# make
Building SPCA5XX driver for 2.5/2.6 kernel.
Remember: you must have read/write access to your kernel source tree.
make -C /lib/modules/`uname -r`/build SUBDIRS=/usr/local/src/spca5xx-20060501 CC=cc modules
make[1]: Entering directory `/usr/src/linux-2.6.32.2'
WARNING: Symbol version dump /usr/src/linux-2.6.32.2/Module.symvers
is missing; modules will have no dependencies and modversions.
scripts/Makefile.build:49: *** CFLAGS was changed in "/usr/local/src/spca5xx-20060501/Makefile". Fix it to use EXTRA_CFLAGS。 停止。
make[1]: *** [_module_/usr/local/src/spca5xx-20060501] 错误 2
make[1]: Leaving directory `/usr/src/linux-2.6.32.2'
make: *** [default] 错误 2
待解决:多看别人的makefile