1. 针对使用的2.6内核驱动
(1)重新编译内核,使能zc301摄像头模块。。LINUX内核中系统中没有ZC301P摄像头驱动,要下载对应的内核补丁,其补丁和驱动在http:mxhaard.free.fr中有对应的驱动下载。此处用到的是usb-2.6.12LE06.patch.tar.gz,补丁下载地址http://mxhaard.free.fr/spca50x/embedded/KernelPatch/usb-2.6.12LE06.patch.tar.gz。此patch是为令重编内核时,有spcaxx系列摄像头的支持。把它到/kernel/driver/usb下,解压,打补丁.
tar -xvzf usb-2.6.12LE06.patch.tar.gz
patch -p1 < usb-2.6.12LE06.path
此时就会在此目录下看到spca5xx文件夹了,这个目录下的文件就是usb摄像头的驱动源码。重新编译内核,使能zc301摄像头模块。在kernel目录下make menuconfig,内核配置选项
Device Drivers --->
Multimedia devices --->
Video for Linux
USB support ----->
USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Camerass,要把它配置成module。
(2)make zImage,make modules就会在/armlinux/kernel/arch/arm/boot下生成zImage,这就是我们生成最新的内核,将此内核通过终端下载到开发板中。/armlinux/kernel/driver/usb/spca5xx中生成spca5xx.ko.这就是我们要的针对2.6内核的驱动。启动新内核,insmod这个.ko文件即驱动上zc301摄像头。
(3)上述使用的是简版usb摄像头驱动,获取的图像数据是jpeg数据流,如果需要输出RGB24的话,可以使用完整版的驱动,下载地址:http://mxhaard.free.fr/spca50x/Download/oldrelease/spca5xx-20060402.tar.gz或http://mxhaard.free.fr/spca50x/Download/spca5xx-v4l1goodbye.tar.gz
LE的驱动有许多问题,比如运行到设置图像格式(RGB565或RGB24)时 出错, 说不支持此参数。原因在于: ( 摘自驱动程序主页 http://mxhaard.free.fr/spca5le.html)
The spca5xx-LE design is very different from the spca5xx full package(LE版的驱动和完全版的差很多)。
The memory in use are the most smaller as possible(LE版的驱动会尽量减少内存的 使用)
The spcadecoder is reduce and only raw jpeg webcam are used.(驱动模块只支持输 出原始jpeg格式)。
这两个驱动都是针对2.6内核设计的,可以单独编程成模块。gspca和spca5xx是一个系列的,它用于2.6.17以上的内核版本,以前的版本使用spca5xx驱动程序。spca5xx在Linux下常用的摄像头驱动,这是一个通用驱动,这个驱动程序也是基于video4linux的.Makefile中需要修改一下内容
CC = arm-linux-gcc
LD = arm-linux-ld
ifneq ($(KERNELRELEASE),) # We were called by kbuild
CFLAGS += $(DEFINES)
obj-m += spca5xx.o
spca5xx-objs := drivers/usb/spca5xx.o drivers/usb/spcadecoder.o
else # We were called from command line
KERNEL_VERSION = `uname -r`
#KERNELDIR := /lib/modules/$(KERNEL_VERSION)/build
KERNELDIR := /weili/linux-2.6.14
PWD := $(shell pwd)
#MODULE_INSTALLDIR = /lib/modules/$(KERNEL_VERSION)/kernel/drivers/usb/media/
MODULE_INSTALLDIR = /weili/linux-2.6.14/drivers/usb/media/
# Targets, don't change!
default:
@echo ' Building SPCA5XX driver for 2.5/2.6 kernel.'
@echo ' Remember: you must have read/write access to your kernel source tree.'
$(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) CC=$(CC) modules
install:
mkdir -p $(MODULE_INSTALLDIR)
rm -f $(MODULE_INSTALLDIR)spca50x.ko
rm -f $(MODULE_INSTALLDIR)et61x.ko
install -c -m 0644 spca5xx.ko $(MODULE_INSTALLDIR)
/sbin/depmod -ae
uninstall:
rm -f $(MODULE_INSTALLDIR)/spca5xx.ko
/sbin/depmod -aq
endif
make后即可生成spca5xx.ko驱动,移植到开发板上insmod即可,这个驱动相对(2)中编译的驱动大了好几倍吧。注意的是,所使用的内核仍要选上USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Camerass模块。
2.针对使用的2.4内核驱动
(1)编译内核驱动zd301
重新编译内核,将对应的摄像头支持模块选上.但是LINUX内核中系统中没有ZC301P摄像头驱动,要下载对应的内核补丁,其补丁和驱动在http:mxhaard.free.fr中有对应的驱动下载,此处用到的是:usb-2.4.31LE06.patch.tar.gz,此patch是为令重编内核时,有spcaxx系列摄像头的支持。
把它到/armlinux/kernel/driver/usb下,解压,打补丁.
tar -xvzf usb-2.4.31LE06.patch.tar.gz patch -p1 < usb-2.4.31LE06.patch
此时就会在此目录下看到spca5xx文件夹了.不知是何原因,估计是KERNEL版本的原因,在/armlinux/kernel/driver/usb 的目录中的Makefile 和config.in中找不到对应的关键字,此时会有一些错误,并将错误放在Makefile.rej 和config.in.rej 两文件中,打开两个文件,分别将其中前面有+的文字加到 Makefile和config.in中对应的分类中即可。
编译内核,进入/armlinux/kernel,make menuconfig.在arm linux的kernel目录下make menuconfig,
首先<*>选择Multimedia device->下的Video for linux,然后 USB support ---> USB Multimedia devices 选项下应该有
make dep;make zImage;make modules.就会在/armlinux/kernel/arch/arm/boot下生成zImage,这就是我们生成最新的内核,将此内核通过终端下载到开发板中,/armlinux/kernel/driver/usb/spca5xx中生成spca5xx.o,spcadecoder.o, spca_core.o.这就是我们要的驱动。
用新内核启动,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表明摄像头成功安装。
(2)完整版驱动。spca5xx-20060402.tar.gz。修改makefile。
##########modified by ly44770################
#ifneq ($(shell uname -r | cut -d. -f1,2), 2.4)
#CFLAGS += $(DEFINES)
#obj-m += spca5xx.o
#spca5xx-objs := drivers/usb/spca5xx.o drivers/usb/spcadecoder.o
#KERNELDIR := /lib/modules/$(KERNEL_VERSION)/build
#PWD := $(shell pwd)
#MODULE_INSTALLDIR = /lib/modules/$(KERNEL_VERSION)/kernel/drivers/usb/media/
#default:
# @echo ' Building SPCA5XX driver for 2.5/2.6 kernel.'
# @echo ' Remember: you must have read/write access to your kernel source tree.'
# $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) CC=$(CC) modules
# mkdir -p $(MODULE_INSTALLDIR)
# rm -f $(MODULE_INSTALLDIR)spca50x.ko
# rm -f $(MODULE_INSTALLDIR)et61x.ko
# install -c -m 0644 spca5xx.ko $(MODULE_INSTALLDIR)
# /sbin/depmod -ae
# rm -f $(MODULE_INSTALLDIR)/spca5xx.ko
# /sbin/depmod -aq
###############modified end########################
KERNEL_VERSION = 2.4.27
KERNEL_ACFILE = $(KINCLUDE)/linux/autoconf.h
KERNEL_MODVERSIONSFILE = $(KINCLUDE)/linux/modversions.h
#MODULE_INSTALLDIR = /lib/modules/$(KERNEL_VERSION)/kernel/drivers/usb/
CC = arm-linux-gcc
LD = arm-linux-ld
CFLAGS += -I/weili/linux-2.4/include -Idrivers/usb
make,生成spca5xx.o,insmod,查看/dev目录下出现了/v4l/video0,驱动成功。
二、在S3C2410中使用serfox和spcaview
1、移植视频采集程序servfox
移植此程序比较简单的,下载servfox-R1_1_3后 ,http://mxhaard.free.fr/spca50x/embedded/Servfox/servfox-R1_1_3.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
下载spcaview-20061208,http://mxhaard.free.fr/spca50x/Download/spcaview-20061208.tar.gz
make生成目标文件,在PC上,spcaview –w 10.60.38.55:7070就可以看到摄像头采集来的图片了。Servfox和spcaview还有很多选项,可以通过spcaview –h 和servfox –h查阅,
注意的是:spcaview中-w使用的IP为实验台的IP,所以在开发板执行serfox之前要配置一下IP,ifconfig eth0 10.60.38.55,并且运行spcaview的主机的IP要与开发板在同一网段。
另附:
(1)spcaview的命令参数
Spcaview version: 1.1.7 date: 06:11:2006 (C) mxhaard@magic.fr
usage: spcaview [-h -d -n -c -v -j -z -g -l -s -m -a -f -b -t -p] [-i inputfile
| -o outputfile]
-h print this message
-d /dev/videoX use videoX device
-n norme 0->pal 2->secam 1->ntsc
-c input channels 0..9 exclude 4 and 5
-v disable video output for raw recording
-j disable video output and userspace decoding
-z compress yuv420p video output with DPSH encoder
-g use read method for grab instead mmap
-l default 320x480 use input size 640x480
-s widthxheight use specified input size
-m widthxheight use specified ouput size
-a default 0 -> nosound 1-> microphone 2-> mixer output
-f video format default yuv others options are r16 r24 r32 yuv jpg
-b enable automatic brightness adjustment
-t print statistics
-p x getPicture every x seconds
-p x && -o getPicture every x seconds and record in outfile
-w Address:Port read from Address xxx.xxx.xxx.xxx:Port
-N x take a x pictures and exit if p is not set p = 1 second
(2)serfox的命令参数
-h print this message
-d /dev/videoX use videoX device
-g use read method for grab instead mmap
-s widthxheight use specified input size
-w port server port
上一篇:PWM在ARM Linux中的原理和蜂鸣器驱动实例开发
下一篇:ARM Linux系统调用的原理
推荐阅读最新更新时间:2024-03-16 14:57