2024年3月11日发(作者:)

摄像头驱动的移植(ZC3XX)

一、普通设计

第一:

首先确保所用的FS2410开发板上移植的是Linux-2.6.22.6内核,USB

及CS8900A均能工作

第二:移植驱动:

( 1 ) 在 linux-2.6.22.6/drivers/usb 目录下新建 media 目录,将

copy 到 media 下并解压。为了使media 编译进内

核,需修改linux-2.6.22.6/drivers/usb 目录下的Kconfig、Makefile 文件。

具体操作:

[linux@weijing usb]$ vi Kconfig

添加下面语句:

source "drivers/usb/media/Kconfig"

[linux@weijing usb]$ vi Makefile

添加下面语句:

obj-$(CONFIG_USB_SPCA5XX) += media/

( 2 )为添加 gspcav1-20071224 编译选项,在 media 下新建 Kconfig、Makefile

文件。

[linux@weijing media]$ vi Kconfig

#

# USB Multimedia device configuration

#

comment "USB Multimedia devices"

depends on USB

config USB_SPCA5XX

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

depends on USB && VIDEO_DEV

---help---

Say Y or M here is you want to use one of these wedcams:

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

1

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

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

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

at.

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

Module will be called spca5xx.

“ 帮助文档说明了下面这句话:

USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras ”

特别注意:所在在一移植的时候也要注意看看帮助文档

[linux@weijing media]$ vi Makefile

#

# Makefile for USB Media drivers

#

obj-$(CONFIG_USB_SPCA5XX) += gspcav1-20071224/

( 3 ) 修改 gspcav1-20071224 的 Makefile

[linux@weijing gspcav1-20071224]$ vi Makefile

gspca-objs := gspca_core.o decoder/gspcadecoder.o

obj-$(CONFIG_USB_SPCA5XX) += gspca.o

2

第三:打ZC301摄像头的补丁

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

丁和驱动在http:中有对应的驱动下载。此处用到的是

补丁下载地址

/spca50x/embedded/KernelPatch/

。此patch是为令重编内核时,有spcaxx系列摄像头的支持。把它

复制到driver/usb下,解压,打补丁.

cd /home/linux/linux-2.6.22.6/drivers/usb

tar -xvzf

patch -p1 <

第四:编译内核

( 1 ) Device Drivers --->

Multimedia devices --->

<*> Video For Linux

USB support --->

<*> Support for Host-side USB

--- USB Host Controller Drivers

<*> OHCI HCD support

--- USB Multimedia devices

USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras

这两个选项必须是用M,不能用 * 摄像头属于视频类设备,遵循的标准为

Video for Linux (V4L)标准。这个标准定义了一套API接口,内核、驱动、应

用程序都以这个接口为标准进行交流。目前的V4L涵盖了音视频捕捉及处理等内

容,也包括USB摄像头。在内核中加上这个选项之后,在/dev下才会创建一个

video0的字符设备文件。

( 2 ) make zImage make modules(生成文件)

此时,可能会提示 gspca_core.c 的一些轻微错误,稍作修改即可:

//static const char gspca_version[] = GSPCA_VERSION;

把GSPCA_VERSION改成Makefile里面第一行的VERSION中的值

3

第五:测试

( 1 ) cp arch/arm/boot/zImage /tftpboot/

( 2 ) 把生成的模块在为拷贝到/source/rootfs目录下面

然后动态加载到内核里insmod

(注:如果重启板的话,则重新加载)

重启,插上中星微芯片的摄像头,命令行出现

#usb 1-1: new full speed USB device using s3c2410-ohci and address

2

usb 1-1: configuration #1 chosen from 1 choice

drivers/usb/media/gspcav1-20071224/gspca_core.c: USB GSPCA camera

found.(ZC3XX)说明移植的驱动已经能识别设备,设备名所在路径 /dev/video0。

(video0 节点是插入摄像头设备才有的)

查看确认一下:ls –l /dev/video0

第六:编译客户端程序

1、下载SDL库

解压:

运行配置:./configure  会生成一个Makefile文件

然后运行:make

接着安装:make install (这步它会生成一个SDL库默认放到

/usr/local/include目录下,提供给spcaview使用)

如果出现错误,则切换到超级用户

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

/spca50x/Download/

这个程序是在PC上运行的,解压后,

直接编译Make就行,生成可执行文件spcaview 。

( 特别注意:这时时候会出现很多的错误提示,错误开始提示如:spcaview.c

里面没定义SDL/SDL.h„这些文件,主要是因为主机没有这个SDL库文件,所以

我们要安装SDL这个库,才能make成功。因此第一步就把SDL安装上了,不过,

你也可以尝试先不安装SDL库看看错误。移植的东西的时候很多时候都会出现这

种缺少依赖库的问题,多多积累经验 )

第七:移植服务器端程序

servfox-R1_1_

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

/spca50x/embedded/Servfox/servfox-R1_1_

下载,解压,进入其目录,观察之,发现没有makefile,但有一个,

还有一个makefile.386,于是将改名为makefile,然后编译make

正常,没有出错,将可执行文件servfox复制到nfs共享目录,启动开发板,挂

载nfs服务器,运行servfox,出错,提示为找到到该命令,老问题,以前遇到

4

过类似问题,原因是该命令为动态链接,而开发板上没有相关的库文件,所以无

法运行,需要静态链接。

回到PC,打开makefile,将所有用到arm-linux-gcc的地方,都加上一个

参数-static,其实就三个地方(我操作的时候不加也可以)。注意:如果用

arm-linux-gcc不行的话就改成本机上的交叉工具arm-softfloat-gnu-gcc即

可。

然后重新编译make,则生成一个servfox可执行文件,把它传到开发板上

3、FS2410板终端上运行服务器:./servfox -g -s 320x240 -w 7070

(是字母“x”而不是星号“*”,端口7070 在spcaview.c里面写定了)

程序运行了,提示为

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

mxhaard@

wrong spca5xx device

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

在虚拟机的终端执行客户端:./spcaview -g -w 192.168.1.241(板子IP)

就可以看到图像了。。。。

说明移植成功了。

二、改进设计

这个/etc/init.d/rcS脚本文件是系统启动时启动里面所有的内容,所以我

们可以通过改写它来实现自己某些必要的启动程序。

动态加载模块的方法比较不方便,因为每次进来的时候都要手动去加载一次

模块,所以我采用改写脚本的方式,注意改写的是/source/rootfs目录下

/etc/init.d/rcS脚本,让它在系统启动的时候自动加载模块即可。

具体操作:

打开文件 :vi /etc/init.d/rcS

添加语句 :/sbin/insmod  系统启动时自动加载

(insmod这个命令在/sbin这个目录下,改写脚本的时候最好把所用的命令命全

路径写上去,这样比较好)

我们也可以把boa服务器和servfox服务器一起加进去

添加语句:/etc/boa/boa

/servfox –g –s 640x480 –w 7070 &

( 一定要通过在后台 & 运行,否则也加载不了根文件系统 )

这样我们在启动开发板的时候就不用手动的去启动boa和servfox服务器了

5

Boa服务器结合ZC301摄像头驱动实现网页实时监控

实现这个功能时,同时也要把boa服务器一齐移植好。

这次说说用web页面观看的问题了

在主机上,进入spcaview安装的目录下,是不是看到有个目录叫做

http-java-applet,我们需要把他拷贝到boa的主目录下(/var/www),也就是

您的DocumentRoot 的目录下

但是在做这个工作之前我们需要把这个目录的权限修改一下,chmod -R 755

/home/spcaview/http-java-applet(之前我就是没做这一步导致applet程式不

能运行)这时把这个文档夹整个拷贝到boa的主目录下,然后启动boa服务器..

进web浏览器

192.168.0.X/http-java-applet/ 便能够看到了

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

所以在我提供的源程式中有个JwebPlayer的程式,是个applet小程式,能够加

载到web页面中用来播放视频流

特 别 注 意: 在网页监控需要到Java的库,安装Java开发软件即可,否则

无法显示摄像头的图像:

jdk-6u10-rc-bin-b28-windows-i586-p-21_jul_

6