新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > zc301攝像頭驅動以及在S3C2410中使用serfox和spcaview

        zc301攝像頭驅動以及在S3C2410中使用serfox和spcaview

        作者: 時間:2016-11-09 來源:網絡 收藏
        一、zc301在linux下的驅動

        1. 針對使用的2.6內核驅動

        本文引用地址:http://www.104case.com/article/201611/318017.htm

        (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

        此時就會在此目錄下看到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, dont 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 選項下應該有 USB SPCA5XX Sunplus Vimicro Sonix Cameras,要把它配置成module。
        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)

        #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
        #PWD := $(shell pwd)
        #MODULE_INSTALLDIR = /lib/modules/$(KERNEL_VERSION)/kernel/drivers/usb/media/
        # Targets, dont 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
        #else # kernel version test
        ###############modified end########################
        上邊這一大段通通注釋掉。
        #KERNEL_VERSION = `uname -r`這句改成:
        KERNEL_VERSION = 2.4.27
        這幾個變量根據自己的需要修改如下:
        KINCLUDE = /weili/linux-2.4/include
        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 += -mpreferred-stack-boundary=2 這個注釋掉,否則編譯通不過,:-)。
        #CFLAGS += -I$(KINCLUDE) -Idrivers/usb
        CFLAGS += -I/weili/linux-2.4/include -Idrivers/usb
        別忘了這句注釋掉:
        #endif # End kernel version test

        make,生成spca5xx.o,insmod,查看/dev目錄下出現了/v4l/video0,驅動成功。

        二、在S3C2410中使用serfoxspcaview

        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




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 富川| 乐山市| 巴中市| 神木县| 长岛县| 彭山县| 汝阳县| 竹北市| 越西县| 安吉县| 平远县| 抚顺县| 马龙县| 蒲城县| 江川县| 仁怀市| 洞口县| 长沙市| 保康县| 泰宁县| 太仓市| 平顺县| 车致| 新竹市| 林芝县| 资源县| 安徽省| 清水河县| 陵川县| 澄迈县| 渑池县| 翁牛特旗| 页游| 双辽市| 西吉县| 东光县| 青冈县| 凭祥市| 庆阳市| 滦南县| 鄂伦春自治旗|