一、zc301在linux下的驱动
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下,解压,打补丁. 此刻就会在此目录下看到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) 这两个驱动都是针对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 else # We were called from command line KERNEL_VERSION = `uname -r` PWD := $(shell pwd) # Targets, dont change! install: uninstall: 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下,解压,打补丁. (2)完整版驱动。spca5xx-20060402.tar.gz。修正makefile。 ##########modified by ly44770################ make,生成spca5xx.o,insmod,检查/dev目录下呈现了/v4l/video0,驱动成功。 二、在S3C2410中运用serfox和spcaview 1、移植视频收集程序servfox 2、客户端spcaview 留意的是: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 (2)serfox的指令参数 -h print this message
tar -xvzf usb-2.6.12LE06.patch.tar.gz
patch -p1
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格局)。
CFLAGS += $(DEFINES)
obj-m += spca5xx.o
spca5xx-objs := drivers/usb/spca5xx.o drivers/usb/spcadecoder.o
#KERNELDIR := /lib/modules/$(KERNEL_VERSION)/build
KERNELDIR := /weili/linux-2.6.14
#MODULE_INSTALLDIR = /lib/modules/$(KERNEL_VERSION)/kernel/drivers/usb/media/
MODULE_INSTALLDIR = /weili/linux-2.6.14/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
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标明摄像头成功装置。
#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
移植此程序比较简单的,下载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 320×240 -w 7070
在服务器端运转servfox,图画巨细为320×240,端口号为 7070。
下载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查阅,
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 320×480 use input size 640×480
-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
-d /dev/videoX use videoX device
-g use read method for grab instead mmap
-s widthxheight use specified input size
-w port server port