您的位置:首页 > 其它

S3C2410中利用Servfox和Spcaview使用WEBCAM(适用于zc301芯片的摄像头)

2013-03-11 20:17 435 查看
S3C2410中利用serfox 和spcavie 使用摄像头



要用到的软件包

  摄像头驱动: http://mxhaard.free.fr/spca50x/embedded/KernelPatch/usb-2.4.31LE06.patch.tar.gz
  服务器视频采集: http://mxhaard.free.fr/spca50x/embedded/Servfox/servfox-R1_0_0.tar.gz
  客户端播放视频: ftp://ftp5.linuxeden.com/hardware/spcaview-20061208.tar.gz
  浏览器java plugs: http://software.lupaworld.com/data/upload/jre-1_5_0_06-linux-i586-rpm.bin
一、硬件平台:

  2410开发板

  摄像头:zc301p

二、软件平台:

  armLinux

三、驱动程序:

编译 zc301驱动

  主要的思路是重新编译内核,将对应的摄像头支持模块选上.

  但是LINUX内核中系统中没有ZC301P摄像头驱动,要下载对应的内核补丁,其补丁和驱动在http://mxhaard.free.fr/中有对应的驱动下载,此处用到的是:http://mxhaard.free.fr/spca50x/embedded/KernelPatch/usb-2.4.31LE06.patch.tar.gz,此patch是为令重编内核时,有spcaxx系列摄像头的支持。

(1)把它复制到/armlinux/kernel/driver/usb下,解压,打补丁.

  tar -xvzf usb-2.4.31.patch.gz

  patch -p1 < usb-2.4.31.patch

  此时就会在此目录下看到spca5xx文件夹了.不知是何原因,估计是KERNEL版本的原因,在/armlinux/kernel/driver/usb 的目录中的Makefile 和config.in中找不到对应的关键字,此时会有一些错误,并将错误放在Makefile.rej 和config.in.rej 两文件中,打开两个文件,分别将其中前面有+的文字加到 Makefile和config.in中

对应的分类中即可.

(2)编译内核,进入/armlinux/kernel,

  make menuconfig.

  在arm linux的kernel目录下make menuconfig,

  首先<*>选择Multimedia device->下的Video for linux,

  然后 USB support ---> USB Multimedia devices 选项下应该有

  <M> USB SPCA5XX Sunplus Vimicro Sonix Cameras,要把它配置成module。

  (3)make dep;make zImage;make modules.就会在/armlinux/kernel/arch/arm/boot下生成zImage,这就是我们生成最新的内核,将此内核通过终端下载到开发板中,/armlinux/kernel/driver/usb/spca5xx中生成spca5xx.o,spcadecoder.o,spca_core.o.这就是我们要的驱动.

 (4)用新内核启动,insmod这三个.o文件(可以不用加载spcadecoder.o),摄像

头就加载成功,也可用modprobe spca5xx.o 命令,此命令会自动去加载其要支持的.o文件.

  如果一切顺利的话,此时将在看到类似下面的信息,

Using /mydev/spca5xx.o

usb.c: registered new driver spca5xx

spca_core.c: USB SPCA5XX camera found. Type Vimicro Zc301P 0x301b

spca_core.c: spca5xx driver 00.57.06LE registered

  此时会在/dev/成生成 v4l/video0表明摄像头成功安装。

四、应用程序:

1、移植视频采集程序servfox

  移植此程序是最简单的,从http://mxhaard.free.fr/spca50x/embedded/Servfox/servfox-R1_0_0.tar.gz下载后,解压后,会发现在其目录中会有一个Makefile.arm文件,将此文件修改成Makefile,再make就可生成我们要用到的serfox程序了,将
此程序上传到我们的板中,运行就行了。

  另外在运行servfox前,一定要运行"mknod /dev/video0 c 81 0"这步,

  不写"mknod /dev/video0 c 81 0"这步,出现 ERROR opening V4L interface错误。

  # servfox -d /dev/video0 -s 320x240 -w 7070

  在服务器端运行servfox,图像大小为320x240,端口号为 7070

2、客户端spcaview

  到ftp://ftp5.linuxeden.com/hardware/spcaview-20061208.tar.gz下载spcaviev ,make生成目标文件,

  在PC上,spcaview –w 192.168.1.186:7070就可以看到摄像头采集来的图片了。Servfox和spcaview还有很多选项,可以通过spcaview –h 和servfox –h查阅,其中.

 解压后,还会产生<http-java-applet>,此是WEB客户端,将此客户端上传到开发板上的WEB文件夹中,则在浏览器输入 http://192.168.1.186/index-sample.html则可看到摄像头采集来的图片了。
web SERVER是移植 boa,移植方法略

3、web浏览器安装jre

  1、去这里:http://software.lupaworld.com/data/upload/jre-1_5_0_06-linux-i586-rpm.bin 下载最新自解压安装包,其自解压出来的rpm包是不能够直接使用的,要不就直接提供rpm包安装了;

  2、使用命令如下:

chmod +x ./jre-1_5_0_09-linux-i586-rpm.bin

./jre-1_5_0_09-linux-i586-rpm.bin

  按空格查看下面的条款,然后输入yes安装完毕后,进行下一步;

  3、 到firefox/lugins目录(在我的NeoShine-Linux下是 /usr/local/firefox/plugins)或者~/.mozilla/plugins下执行:

ln -s $JAVA_HOME/jre/plugin/i386/ns7/libjavaplugin_oji.so ./

  如果是安装的jre,可能命令语句如下:

  ln -s $JAVA_HOME/plugin/i386/ns7/libjavaplugin_oji.so

  如果是安装的jre就是jre文件夹地址。

  这样就安装完成了。可以在firefox地址栏里输入about:plugins查看是否安装成功。

  将连接创建在~/.mozilla/plugins下是放在当前用户下,不需要root权限,不影响其他用户。

  从视频的效果来看,是很流畅和清楚,比想象中要好。

eg:(2)

源代码下载:
http://www.mcuos.com/viewthread.php?tid=262&extra=page%3D1&page=1
相关问题讨论:
http://www.mcuos.com/viewthread.php?tid=256&extra=&page=1
http://yuruxiao.blog.sohu.com/56584795.html

http://blog.chinaunix.net/u/22630/showart_362806.html

http://www.sduw.com/www/1/2007-09/99.html

http://www.gd-emb.org/detail/id-46907.html

前几日,开发板上只能用ov511的摄像头,所以想构建嵌入式视频服务器只能用webcam-server。现在好了,开发板上可以用中星微的摄像头了,于是就想玩玩这个servfox了。其实这个没什么好说的就是down一个servfox,然后编译,就都ok了,:-)。

应用程序servfox和spcaview的使用方法:

步骤总结:

[color=#333333](1)Spcaview既可以做采集端,也可以做接收端。不过移植有点复杂^_^。所以采用servfox做为采集端,移植到arm上。修改servfox里的Makefile文件,很简单,只用将CC改成arm-linux-gcc,SERVFLAGS= -O2 -DLINUX $(WARNINGS) -I /home/linux-2.4/include即可。Make一下,就可以在板上运行啦。

(2)Spcaview直接make即可生成可执行文件spcaview。

(3)现在就可以工作啦。在开发板上servfox –d /dev/video0 –s 640x480 –w 192.168.0.12:7070

在PC上,spcaview –w 192.168.0.12:7070就可以看到摄像头采集来的图片啦。Servfox和spcaview还有很多选项,可以通过spcaview –h 和servfox –h查阅。[/color]

我在运行中遇到两个问题,一是servfox的设备必须是/dev/video0,直接用这个/dev/v4l/video0不行,提示v4l接口错误,不知为什么?没办法,只好满足它,就是建个链接了。(ln -s /dev/v4l/video0 /dev/video0).另一个是我的用mmap方法不行,必须要用read方法,否则段错误。解决方法就是运行servfox时加参数-g。

要用到的软件包:

摄像头驱动:

[color=#800080]http://mxhaard.free.fr/spca50x/e ... 31LE06.patch.tar.gz[/color]

服务器视频采集:

[color=#800080]http://mxhaard.free.fr/spca50x/e ... rvfox-R1_0_0.tar.gz[/color]

客户端播放视频:

[color=#800080]ftp://ftp5.linuxeden.com/hardware/spcaview-20061208.tar.gz[/color]

浏览器java plugs:

[color=#0000ff]http://software.lupaworld.com/da ... -linux-i586-rpm.bin[/color]

参考了华恒论坛上戴小鼠的帖子。

学习记录20070217_实现arm采集图像在PC上显示

我的环境

PC:操作系统用的FC5,内核是2.6.15,交叉编译器是3.4.1

开发板硬件:桓丰锐科的板子,CPU是s3c2410

开发板软件:bootloader是自己移植的u-boot,内核是自己移植的2.6.14.1,文件系统是自己移植的busybox-1.1.3

先说一下总体思路,

1、移植摄像头驱动

2、移植服务器端程序

3、编译客户端程序

1、移植摄像头驱动

这里移植的是spca5xx-le,网上有很多关关于移植摄像头驱动的文章,有关于2.4内核的,有关于2.6内核的,我参考的是这篇文章

http://www.ezso.cn/yyjysky/article.asp?id=47

跟他不一样的是,我一开始就把热插拔选上了。

移植过程中出现 了一些错误,困扰我时间最长的错误是硬件问题,我的开发板上有三个USB口,有两个主口,其中一个有问题,插了摄像头后没有反应,另外一个正常。一开始我总是把摄像头插在外面那个口上,老是没有反应后来插在里面那个口上,就好了。

2、移植服务器端程序

服务器端程序我用的是servfox,从这里下载

http://mxhaard.free.fr/spca50x/embedded/Servfox/servfox-R1_1_3.tar.gz

下载,解压,进入其目录,观察之,发现没有makefile,但有一个makefile.arm,还有一个makefile.386,于是将makefile.arm改名为makefile,然后输入命令

make

编译正常,没有出错,将可执行文件servfox复制到nfs共享目录,启动开发板,挂载nfs服务器,运行servfox,出错,提示为找到到该命令,老问题,以前遇到过类似问题,原因是该命令为动态链接,而开发板上没有相关的库文件,所以无法运行,需要静态链接。

回到PC,打开makefile,将所有用到arm-linux-gcc的地方,都加上一个参数-static,其实就三个地方。

然后重新编译,在开发板上运行,输入命令:

./servfox -d /dev/video0 -s 320x240 -w 7070

程序运行了,提示为

servfox version: 1.1.3 date: 11:12:2005 (C)

[email=mxhaard@magic.fr]mxhaard@magic.fr[/email]

wrong spca5xx device

Waiting .... for connection. CTrl_c to stop !!!!

Got connection from 192.168.141.234

可能有点小错误,先不管它。

3、编译客户端程序

客户端程序使用的是spcaview,下载地址为:

http://mxhaard.free.fr/spca50x/Download/spcaview-20061208.tar.gz

这个程序是在PC上运行的,解压后,直接编译就行,

make

生成可执行文件spcaview,运行之

./spcaview -g -s 320x240 -w 192.168.141.236:7070

就能看到图像了,不过图像不清楚,有花屏,上网查之,发现有人遇到过同样问题,在服务器端(开发板)运行

./servfox -d /dev/video0 -s 320x240 -w 7070

就可以看到图像了。

也可指定分辨率为640x480,但是不如320x240流畅。

我在这一步遇到过另外一个问题,即使用root用户的话,运行spcaview没有问题,但如果使用交叉编译用户arm时(为了编译方便,建立了一个arm用户),就会出错,提示为

Spcaview version: 1.1.7 date: 06:11:2006 (C)

[email=mxhaard@magic.fr]mxhaard@magic.fr[/email]

size width: 320 height: 240

using Server 192.168.141.236 Port 7070

Xlib: connection to ":0.0" refused by server

Xlib: No protocol specified

Xlib: connection to ":0.0" refused by server

Xlib: No protocol specified

Could not initialize SDL: No available video device.

不知什么原因,暂搁置,以后再研究。

下一步准备弄个视频服务器,实现可以在浏览器里直接看到图像。

有问题联系我,我们共同学习,我的邮箱是

[email=westdog@163.com]westdog@163.com[/email]

这两天照着网上的帖子,很辛苦的找到了所需要的源代码,具体流程如下:

1、修改drivers/usb/Makefile文件,在

obj-$(CONFIG_USB_W9968CF) += media/

之后添加一行:

obj-$(CONFIG_USB_SPCA5XX) += media/

2、修改drivers/usb/media/Kconfig文件,在最后添加:

config USB_SPCA5XX

tristate "USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras"

depends on USB && VIDEO_DEV

---help---

Say Y or M here if you want to use one of these webcams:

The built-in microphone is enabled by selecting USB Audio support.

This driver uses the Video For Linux API. You must say Y or M to

"Video For Linux" (under Character Devices) to use this driver.

Information on this API and pointers to "v4l" programs may be found

at .

To compile this driver as a module, choose M here: the

module will be called spca5xx.

3、修改drivers/usb/media/Makefile ,添加:

obj-$(CONFIG_USB_SPCA5XX) += spca5xx/

4、在usb/media目录下建立spca5xx目录

#mkdir drivers/usb/media/spca5xx

5、在drivers/usb/media/spca5xx添加如下文件:这些代码可以从

http://mxhaard.free.fr/spca50x/D

... 2.6.12.patch.tar.gz

中下载

(1)、cs2102.h

(2)、hdcs2020.h

(3)、hv7131b.h

(4)、hv7131c.h

(5)、icm105a.h

(6)、Makefile

(7)、Makefile.2.4

(8)、Makefile.org

(9)、pas106b.h

(10)、pb0330.h

(11)、sn9cxxx.h

(12)、sp5xxfw2.dat

(13)、sp5xxfw2.h

(14)、spca5xx.h

(15)、spcaCompat.h

(16)、spca_core.c

(17)、spcadecoder.c

(19)、spcadecoder.h

(20)、spcausb.h

(21)、tas5130c.h

(22)、zc3xx.h

6、配置内核

(1)Multimedia devices --->

Video For Linux

(2) USB support --->

Support for Host-side USB

--- USB Host Controller Drivers

OHCI HCD support

(3)--- USB Multimedia devices

USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras

7、编译内核及模块

#make uImage

#make modules

8、拷贝模块文件到开发板文件系统目录下

walker/

walker/module_file

以上两个目录为手动建立的目录

cp drivers/media/video/v4l1-compat.ko /friendly-arm/rootfs_netserv/home/walker/module_file

cp drivers/media/video/v4l2-common.ko /friendly-arm/rootfs_netserv/home/walker/module_file

cp drivers/media/video/videodev.ko /friendly-arm/rootfs_netserv/home/walker/module_file

cp drivers/usb/core/usbcore.ko /friendly-arm/rootfs_netserv/home/walker/module_file

cp drivers/usb/media/spca5xx/spca5xx.ko /friendly-arm/rootfs_netserv/home/walker/module_file

9、将USB摄像头插入开发板(注:必须先插入摄像头才能插入模块文件,否则系统会出现kernel oops)

10、重新启动开发板

11、插入模块文件(注:这里必须注意模块的插入顺序,这是因为模块的依赖关系)

/sbin/insmod /home/walker/usbcore.ko

/sbin/insmod /home/walker/ohci-hcd.ko

/sbin/insmod /home/walker/v4l1-compat.ko

/sbin/insmod /home/walker/v4l2-common.ko

/sbin/insmod /home/walker/videodev.ko

/sbin/insmod /home/walker/spca5xx.ko

这里再次多谢这篇帖子的作者写得这么详细。。

可以说没有什么问题。不知道为什么法国那个网站我上不去了,上面提到的源代码我是东一个西一个不同的论坛上下的。这里上传不了,如果有需要源码可以发邮件给我:

[email=dgw850329@126.com]dgw850329@126.com[/email]

末了,提出自己的问题,希望有经验的大侠能够指点指点,我的模块加载没问题,mknod /dev/video0 c 81 0之后运行serfox也没问题,但是在客户端用spcaview连接的时候就提示找不到设备,不知道是为什么? 我用的是cramfs文件系统,也就是说是只读文件系统,是不是由于这里的原因呢?

谢谢

哦 已经可以看到设备节点,我开始故意少加载一个模块,这时候运行servfox就会出现错误,但是当我所有模块加进去之后就没有出现错误,而且用cat /dev/v4l/video0 > /tmp/a.jpg 也可以获取,故此断定驱动应该是没有问题的。

由于我的主机是2.4内核,而armlinux是2.6.1内核,试了也不一样,所以就没有在主机上捣鼓,还是也试试呢。。 再去网上看看。。

刚吃饭去了.....呵呵..

是这样的... 按照前面帖子的做法.. 已经把驱动模块都挂上了..

这个时候需要一个服务器视频采集程序,就是我发过去的那个代码servfox-R1_3_0.tar.gz

把这个代码解压之后,里面有个Makefile.arm,把这个文件改成Makefile 然后修改Makefile里面的交叉编译器,Make之后得到servfox文件,拷到我的armlinux文件系统的/bin目录下

mknod /dev/video0 c 81 0 创建设备节点..

servfox -g -d /dev/video0 -w 7070 在armlinux下运行刚刚移植进去的servfox

这个时候服务端已经起来了.

客户端,我是在RH9中,记住,一定是X-windows界面下哦... 这里用到那个源代码spcaview,这个好编译,直接make makeinstall一下就完了..

然后在客户端运行 spcaview -g -w 192.168.0.1:7070

激动了... 看到了吧....

这次说说用web页面观看的问题了,呵呵 一鼓作气啊..

在主机上,进入spcaview安装的目录下,是不是看到有个目录叫做http-java-applet呢,对了就是它.

我们需要把它拷贝到boa的主目录下,也就是你的DocumentRoot 的目录下,但是在做这个工作之前我们需要把这个目录的权限修改一下,chmod -R 755 /home/spcaview/http-java-applet(之前我就是没做这一步导致applet程序不能运行)这时把这个文件夹整个拷贝到boa的主目录下,然后启动boa服务器.. 进web浏览器

http://192.168.0.X/http-java-applet/index-sample.html

,便可以看到了

你在网站上显示图片的话,别人必须不断的刷新才能看见新的图片撒。。

所以在我提供的源程序中有个JwebPlayer的程序,是个applet小程序,可以加载到web页面中用来播放视频流

非常感谢楼主,我的问题解决了,现在可以在网页上看到视频流了

之前我看不到的原因,第一次是网址设置不对,后来是程序里的端口和./servfox时不一致

中途还碰到过小应用程序加载失败的问题,那是没有将.jar包和index-sample.html放在同一目录下

再次感谢楼主~~~

要用到的软件包

摄像头驱动:

http://mxhaard.free.fr/spca50x/e

... 31LE06.patch.tar.gz

服务器视频采集:

http://mxhaard.free.fr/spca50x/e

... rvfox-R1_0_0.tar.gz

客户端播放视频:

ftp://ftp5.linuxeden.com/hardware/spcaview-20061208.tar.gz

浏览器java plugs:

http://software.lupaworld.com/da

... -linux-i586-rpm.bin

一、硬件平台:

2410开发板

摄像头:zc301p

二、软件平台:

armLinux

三、驱动程序:

编译 zc301驱动

主要的思路是重新编译内核,将对应的摄像头支持模块选上.

但是LINUX内核中系统中没有ZC301P摄像头驱动,要下载对应的内核补丁,其补丁和驱动在

http://mxhaard.free.fr/

中有对应的驱动下载,此处用到的是:

http://mxhaard.free.fr/spca50x/e

... 31LE06.patch.tar.gz,此patch是为令重编内核时,有spcaxx系列摄像头的支持。

(1)把它复制到/armlinux/kernel/driver/usb下,解压,打补丁.

tar -xvzf usb-2.4.31.patch.gz

patch -p1

在arm linux的kernel目录下make menuconfig,

首先选择Multimedia device->下的Video for linux,

然后 USB support ---> USB Multimedia devices 选项下应该有

USB SPCA5XX Sunplus Vimicro Sonix Cameras,要把它配置成module。

(3)make dep;make zImage;make modules.就会在/armlinux/kernel/arch/arm/boot下生成zImage,这就是我们生成最新的内核,将此内核通过终端下载到开发板中,/armlinux/kernel/driver/usb/spca5xx中生成spca5xx.o,spcadecoder.o,spca_core.o.这就是我们要的驱动.

(4)用新内核启动,insmod这三个.o文件(可以不用加载spcadecoder.o),摄像

头就加载成功,也可用modprobe spca5xx.o 命令,此命令会自动去加载其要支持的.o文件.

如果一切顺利的话,此时将在看到类似下面的信息,

Using /mydev/spca5xx.o

usb.c: registered new driver spca5xx

spca_core.c: USB SPCA5XX camera found. Type Vimicro Zc301P 0x301b

spca_core.c: spca5xx driver 00.57.06LE registered

此时会在/dev/成生成 v4l/video0表明摄像头成功安装。

四、应用程序:

1、移植视频采集程序servfox

移植此程序是最简单的,从

http://mxhaard.free.fr/spca50x/e

... rvfox-R1_0_0.tar.gz下载后,解压后,会发现在其目录中会有一个Makefile.arm文件,将此文件修改成Makefile,再make就可生成我们要用到的serfox程序了,将 此程序上传到我们的板中,运行就行了。

另外在运行servfox前,一定要运行"mknod /dev/video0 c 81 0"这步,

不写"mknod /dev/video0 c 81 0"这步,出现 ERROR opening V4L interface错误。

# servfox -d /dev/video0 -s 320x240 -w 7070

在服务器端运行servfox,图像大小为320x240,端口号为 7070

2、客户端spcaview



ftp://ftp5.linuxeden.com/hardware/spcaview-20061208.tar.gz

下载spcaviev ,make生成目标文件,

在PC上,spcaview –w 192.168.1.186:7070就可以看到摄像头采集来的图片了。Servfox和spcaview还有很多选项,可以通过spcaview –h 和servfox –h查阅,其中.

解压后,还会产生,此是WEB客户端,将此客户端上传到开发板上的WEB文件夹中,则在浏览器输入

http://192.168.1.186/index-sample.html

则可看到摄像头采集来的图片了。

web SERVER是移植 boa,移植方法略

3、web浏览器安装jre

1、去这里:

http://software.lupaworld.com/da

... -linux-i586-rpm.bin 下载最新自解压安装包,其自解压出来的rpm包是不能够直接使用的,要不就直接提供rpm包安装了;

2、使用命令如下:

chmod +x ./jre-1_5_0_09-linux-i586-rpm.bin

./jre-1_5_0_09-linux-i586-rpm.bin

按空格查看下面的条款,然后输入yes安装完毕后,进行下一步;

3、 到firefox/lugins目录(在我的NeoShine-Linux下是 /usr/local/firefox/plugins)或者~/.mozilla/plugins下执行:

ln -s $JAVA_HOME/jre/plugin/i386/ns7/libjavaplugin_oji.so ./

如果是安装的jre,可能命令语句如下:

ln -s $JAVA_HOME/plugin/i386/ns7/libjavaplugin_oji.so

如果是安装的jre就是jre文件夹地址。

这样就安装完成了。可以在firefox地址栏里输入about:plugins查看是否安装成功。

将连接创建在~/.mozilla/plugins下是放在当前用户下,不需要root权限,不影响其他用户。

从视频的效果来看,是很流畅和清楚,比想象中要好。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/63543/showart_528892.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: