中星微zc3xx(305b)摄像头s3c2440移植

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

由于需求要做基于摄像头的视屏采集程序,视屏采集程序写了一些,在pc机上效果不错

放假回家后,板子也到了,试着将摄像头移植到板子上,花了两天时间,下面是移植过程,写下来大家讨论一下。

首先在网上找了一些移植方面的文档,大多讲的gspcav1-20071224的移植,我在pc机上安装的也是这个版本的驱动,于是按照这些文档开始了。这样的文档我就不贴出地址了,网上可以找到很多。

把驱动拷贝到内核源码下,修改相应的Kconfig,Makefile这些文件

make menuconfig 做相应的选择

make zImage

烧写

插入usb摄像头,只有

drivers/usb/media/gspcav1-20071224/gspca_core.c: USB GSPCA camera found.(ZC3XX)

configuration #1 chosen from 1 choice

就是没有像他们说的类似

drivers/usb/media/gspcav1-20071224/gspca_core.c: USB GSPCA camera found.(ZC3XX)

这样的信息

失败

这个过程试了很多遍,就不详细写过程了,反正都是失败……

后来就想直接修改gspcav1-20071224下Makefile文件,改为交叉编译,我的Makefile如下:

VERSION = 01.00.20

DEFINES =

###

# The following flags enable experimental features.

# By default, these are enabled for development versions of the driver, and

# disabled for release versions.

# Optional: Enable driver debugging

DEFINES += -DGSPCA_ENABLE_DEBUG

# Optional: Enable direct register read/write for PAC207 development

#DEFINES += -DGSPCA_ENABLE_REGISTERPLAY

###

# The following flags enable features that aren’t yet implemented, and

# therefore are disabled by default.

# Optional: Enable compression

DEFINES += -DGSPCA_ENABLE_COMPRESSION

###

# Rest of Makefile follows here. You probably won’t need to touch this.

# Setup defines

DEFINES += -DCONFIG_USB_GSPCA_MODULE=1 -DMODULE -D__KERNEL__

DEFINES += -DVID_HARDWARE_GSPCA=0xFF -DGSPCA_VERSION=\”$(VERSION)\”

ifneq ($(KERNELRELEASE),) # We were called by kbuild

EXTRA_CFLAGS += $(DEFINES)

obj-m += gspca.o

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

else # We were called from command line

KERNEL_VERSION = `uname -r`

KERNELDIR := /opt/linux-2.6.15

PWD := $(shell pwd)

MODULE_INSTALLDIR = /lib/modules/$(KERNEL_VERSION)/kernel/drivers/usb/media/

MODULE_INSTALLDIR2 = /lib/modules/$(KERNEL_VERSION)/kernel/drivers/media/video/

CROSS_COMPILE = /eldk/usr/bin/arm-linux-

CC=/eldk/usr/bin/arm-linux-gcc

ARCH=arm

default:

$(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) CC=$(CC) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules

#$(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) CC=$(CC) modules

install:

mkdir -p $(MODULE_INSTALLDIR)

rm -f $(MODULE_INSTALLDIR)spca5xx.ko

rm -f $(MODULE_INSTALLDIR2)gspca.ko

install -c -m 0644 gspca.ko $(MODULE_INSTALLDIR)

/sbin/depmod -ae

uninstall:

rm

-f $(MODULE_INSTALLDIR)gspca.ko

/sbin/depmod -aq

endif

########################################

# OTHER TARGETS

##########################################

clean:

rm -r -f *.o decoder/.gspcadecoder.o.cmd decoder/*.o \

.gspca.o.cmd *.o *.ko *.mod.* .[a-z]* core *.i \

*.symvers *.err

##########################################

保存,编译,结果报错

首先看见第一个错gspca_core.c:54:27: error: asm/semaphore.h: No such file or directory

我就试着找semaphore.h这个文件在哪,在内核include/linux下发现,在交叉编译工具目录下居然也发现了,由于实在太菜,不知道应该怎么改,不过我觉得还是应该在内核的那个是对的,于是修改gspca_core.c。后来查资料证明这么修改是对的,我查的资料是从这里来的:

/video/get-your-webcam-working-gspca

一个外国网站,之前我看过好几次这个网页,但是就是没有发现需要的内容,最后耐着性子仔细看了一下英文,发现新大陆。

有一个哥们跟我的错一样,他把错误贴了上来,后面有人回帖,最振奋人心的是这个内容:

Submitted by Baires Norte Lug (not verified) on Wed, 08/12/2009 - 11:39.
Kernel >= 2.6.27

wget http://mxhaard.free.fr/spca50x/Download/gspcav1-20071224.tar.gz

wget .ar/diff/gspca.diff

tar -zxvf gspcav1-20071224.tar.gz

cd gspcav1-20071224

cat ../gspca.diff | patch -p1

./gspca_build

Happy !!!!

Thz .ar

Slackware Rulez :P

于是按照下载补丁,安装补丁

两次重新编译,有一些错误是消失了,但是还是有很多错误,都是关于linux内核内videodev.h的错误,比如VID_TYPE_CAPTURE,VID_TYPE_CAMERA,VIDEO_PALETTE_GREY,VIDEO_PALETTE_RGB565之类关于宏的错误,主要提示是未定义,于是我想是否是驱动程序有问题,没有包含头文件,于是我进去做了一下修改,比如添加该头文件,把一些宏定义复制进去,但是最后还是失败了。

我停下来,想了一下,我之前在pc机上编译安装一切正常,但是小改了一下makefile文件就不对了,应该不会,应该跟驱动原文件没有关系,还有这样改下去不知道要改到什么时候(错误实在太多了,都是引用的宏错误)。于是停下来,再仔细想了一下,应该是跟内核有关系。

这时候我想起来应该看下readme这样的文件,在驱动目录下有一个read_and_install的文件,我在里面发现这句话

Before trying to compile the driver,ensure that you've configured yourkernel,and updated the dependencies:

'make [config|menuconfig|xconfig];make dep'

这个文件还指明该驱动支持的设备,我在里面找到我的设备

{USB_DEVICE(0X0AC8,0X305B)},/*Z-star Vimicro zc0305b*/

还有支持的内核版本,就不详细写了

不过主要

有个问题,这里写的是支持2.6.11以上的版本,网上有人说是支持2.6.17以上的版本,我用2.6.12版本试过,没有成功,没有深究,无解。

看完这个文档后,我去内核源码下make menuconfig,make dep

在make dep时提示make dep is unnecessary now

google后,有人说2.6以后的版本不需要这一步,不知道是不是,希望知道的哥们提出来。

在make menuconfig时发现新大陆,发现我用的2.6.28的内核源码中drivers/media/video下有gspca目录,在menuconfig时也发现了相应的选项,(但是在我之前使用的一些版本的内核源码内没有发现该gspca目录,应该是人为加入的)于是我就使用了内核内的驱动,后面再详细说过程,我也会把我用的这个内核源码包传上来。首先说完对gspcav1-20071224的编译。

使用2.6.28内核源码编译出zImage文件,测试成功之后,我返回试着编译gspcav1-20071224,重新make之后果然成功,产生了gspca.ko文件,可以使用insmod命令将该文件加载入内核,从而可以使用摄像头。看来编译驱动这类东西之前,需要将相应的内核做一次编译,产生相应的lib,头文件之类,还要设置好环境变量。

下面说一下使用的2.6.28内核里的驱动文件编译的过程

首先make menuconfig,主要需要选的配置项如下:

Device Drivers ->

Multimedia devices->

<*>video for linux

[*]video capture adapters->

[*]V4l USB devices ->

<*>USB video class (UVC)

[*] UVC input events device support

<*>GSPCA based webcams ->

<*>ZC3XX USB Camera Driver

做好如上配置后就make,产生zImage,烧入板子,启动

插入usb摄像头,产生提示信息:

drivers/usb/media/gspcav1-20071224/gspca_core.c: USB GSPCA camera found.(ZC3XX)

configuration #1 chosen from 1 choice

gspca:probing 0ac8:304b

zc3xx:probe 2wr ov vga 0x7648

zc3xx:probe 3wr vga 1 0x4001

zc3xx:probe sensor ->7648

zc3xx:Find Sensor OV7648

gspca:probe ok

至此说明系统发现usb设备,并且自动将驱动文件加入内核,设备可以使用了

输入命令mdev -s 更新设备节点,ls /dev 查看设备节点,应该看见设备节点video0 ,输入命令 cat video0 > 2.img,将摄像头数据输出到2.img文件中,将该数据使用ftp或者u盘移到pc上,查看,可以看见摄像头工作了,振奋人心的时刻……


昨天两次编译都成功,但是使用自动加载驱动的内核后,使用servfox 程序的时候被告知不是jpeg webcam。之前大致看过servfox的源码,因为它主要使用jpeg格式数据作为操作对象,所以如果设备输出不是jpeg格式的话,它不能正常工作。google之后看了一篇文章(该文章地址/u/16942/showart_96045.htm

l),虽然不是很懂,但是受到启发,感觉这个问题应该是跟驱动有关系,因为文中说中星微芯片支持压缩jpeg格式,而且还说道控制中星微芯片的jpeg压缩比是在zc3xx.h中的函数,所以我认为应该跟驱动有关系。抱着试一试的想法,将之前由gspcav1-20071224单独编译出来的驱动加载到板子上,调用servfox命令,正常运行,证明之前的假设。下面是加载gspcav1-20071224过程。

首先我将gspcav1-20071224中编译好的gspcav.ko移到nfs目录下
开发板挂载
insmod gspcav.ko失败,提示信息如下
usb 3-1: new full speed USB device using ohci_hcd and address 2
usb 3-1: configuration #1 chosen from 1 choice
gspca: Unknown symbol video_devdata
gspca: Unknown symbol video_unregister_device
gspca: Unknown symbol video_device_alloc
gspca: Unknown symbol video_register_device
gspca: Unknown symbol video_usercopy
gspca: Unknown symbol video_device_release

google一下,有很多,应该是在配置内核的时候没有选v4l的缘故,重新配置内核,选好v4l,将驱动项选为模块加载
重新make,烧写内核
重新insmod gspca.ko,加载成功
使用servfox,成功……

相关文档
最新文档