摄像头驱动的移植(ZC3XX
一、普通设计
第一:首先确保所用的FS2410开发板上移植的是Linux-2.6.22.6内核USBCS8900A均能工作
第二:移植驱动
( 1 ) linux-2.6.22.6/drivers/usb 机动车违章记录查询目录下新建 media 目录,将 copy media 下并解压。为了使media 编译进内核,需修改linux-2.6.22.6/drivers/usb 目录下的KconfigMakefile 文件。
具体操作:
[linux@weijing usb]$ vi Kconfig
添加下面语句:
source "drivers/usb/media/Kconfig"
[linux@weijing usb]$ vi Makefile
添加下面语句:
obj-$(CONFIG_USB_SPCA5XX)        += media/
( 2 )为添加 gspcav1-20071224 编译选项,在 media 下新建 KconfigMakefile 文件。
[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.
    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 "v41"programs may be found
    at.
    To compile this driver as a module,choose M here:the
    Module will be called spca5xx.   
帮助文档说明了下面这句话:
<M> 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

第三:打ZC301摄像头的补丁usb-2.6.12LE06.
LINUX内核中系统中没有ZC301P摄像头驱动,要下载对应的内核补丁关于文学的名言,其补丁和驱动在http:mxhaard.free.fr中有对应的驱动下载。此处用到的是usb-2.6.12LE06.
补丁下载地址
mxhaard.free.fr/spca50x/embedded/KernelPatch/usb-2.6.12LE06.。此patch是为令重编内核时,有spcaxx系列摄像头的支持。把它复制到driver/usb,解压,打补丁.
cd /home/linux/linux-2.6.22.6/drivers/usb
许晴发文庆祝生日tar -xvzf usb-2.6.12LE06.
patch -p1 < usb-2.6.12.patch
第四:编译内核
( 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
<M> USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras 
两个选项必须是用M,不能用 * 摄像头属于视频类设备,遵循的标准为Video for Linux (V4L)标准。这个标准定义了一套API接口,内核、驱动、应用程序都以这个接口为标准进行交流。目前的V4L涵盖了音视频捕捉及处理等内容,也包括USB摄像头。在内核中加上这个选项之后,在/dev下才会创建一个video0的字符设备文件。
( 2 )  make zImage    make modules(生成gspca.ko文件)
此时,可能会提示 gspca_core.c 的一些轻微错误,稍作修改即可:
//static const char gspca_version[] = GSPCA_VERSION;
魔兽世界3.13GSPCA_VERSION改成Makefile里面第一行的VERSION中的值
第五:测试
    ( 1 )  cp arch/arm/boot/zImage /tftpboot/
( 2 )  把生成的模块在为gspca.ko拷贝到/source/rootfs目录下面
然后动态加载到内核里insmod gspca.ko
(注:如果重启板的话,则重新加载)
重启,插上中星微芯片的摄像头,命令行出现
#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)天龙八部3唐门加点说明移植的驱动已经能识别设备,设备名所在路径 /dev/video0video0 节点是插入摄像头设备才有的
查看确认一下:ls –l /dev/video0
第六:编译客户端程序
1、下载SDLSDL-1.2.
解压:SDL-1.2.
运行配置:./configure  会生成一个Makefile文件
然后运行:make
接着安装:make install (这步它会生成一个SDL库默认放到/usr/local/include目录下,提供给spcaview使用)
如果出现错误,则切换到超级用户
2、客户端程序使用的是spcaview,下载地址为:
mxhaard.free.fr/spca50x/Download/
这个程序是在PC上运行的,解压后,
直接编译Make就行,生成可执行文件spcaview
  俄罗斯签证特别注意:这时时候会出现很多的错误提示,错误开始提示如:spcaview.c里面没定义SDL/SDL.h…这些文件,主要是因为主机没有这个SDL库文件,所以我们要安装SDL这个
库,才能make成功。因此第一步就把SDL安装上了,不过,你也可以尝试先不安装SDL库看看错误。移植的东西的时候很多时候都会出现这种缺少依赖库的问题,多多积累经验 
第七:移植服务器端程序servfox-R1_1_
服务器端程序我用的是servfox,从这里下载
mxhaard.free.fr/spca50x/embedded/Servfox/servfox-R1_1_
下载,解压,进入其目录,观察之,发现没有makefile,但有一个makefile.arm,还有一个makefile.386,于是将makefile.arm改名为makefile,然后编译make正常,没有出错,将可执行文件servfox复制到nfs共享目录,启动开发板,挂载nfs服务器,运行servfox,出错,提示为到到该命令,老问题,以前遇到过类似问题,原因是该命令为动态链接,而开发板上没有相关的库文件,所以无法运行,需要静态链接。
回到PC,打开makefile,将所有用到arm-linux-gcc的地方,都加上一个参数-static,其实就三个地方(作的时候不加也可以)。注意:如果用arm-linux-gcc不行的话就改成本机上的交叉工具arm-softfloat-gnu-gcc即可。
然后重新编译make,则生成一个servfox可执行文件,把它传到开发板上
3FS2410板终端上运行服务器:./servfox -g -s 320x240 -w 7070
      (是字母“x而不是星号“*”,端口7070 spcaview.c里面写定了)