<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > zc301攝像頭驅(qū)動以及在S3C2410中使用serfox和spcaview

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

          作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
          一、zc301在linux下的驅(qū)動

          1. 針對使用的2.6內(nèi)核驅(qū)動

          本文引用地址:http://www.ex-cimer.com/article/201611/318017.htm

          (1)重新編譯內(nèi)核,使能zc301攝像頭模塊。。LINUX內(nèi)核中系統(tǒng)中沒有ZC301P攝像頭驅(qū)動,要下載對應(yīng)的內(nèi)核補丁,其補丁和驅(qū)動在http:mxhaard.free.fr中有對應(yīng)的驅(qū)動下載。此處用到的是usb-2.6.12LE06.patch.tar.gz,補丁下載地址http://mxhaard.free.fr/spca50x/embedded/KernelPatch/usb-2.6.12LE06.patch.tar.gz。此patch是為令重編內(nèi)核時,有spcaxx系列攝像頭的支持。把它到/kernel/driver/usb下,解壓,打補丁.
          tar -xvzf usb-2.6.12LE06.patch.tar.gz
          patch -p1

          此時就會在此目錄下看到spca5xx文件夾了,這個目錄下的文件就是usb攝像頭的驅(qū)動源碼。重新編譯內(nèi)核,使能zc301攝像頭模塊。在kernel目錄下make menuconfig,內(nèi)核配置選項

          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,這就是我們生成最新的內(nèi)核,將此內(nèi)核通過終端下載到開發(fā)板中。/armlinux/kernel/driver/usb/spca5xx中生成spca5xx.ko.這就是我們要的針對2.6內(nèi)核的驅(qū)動。啟動新內(nèi)核,insmod這個.ko文件即驅(qū)動上zc301攝像頭。

          (3)上述使用的是簡版usb攝像頭驅(qū)動,獲取的圖像數(shù)據(jù)是jpeg數(shù)據(jù)流,如果需要輸出RGB24的話,可以使用完整版的驅(qū)動,下載地址:http://mxhaard.free.fr/spca50x/Download/oldrelease/spca5xx-20060402.tar.gz或http://mxhaard.free.fr/spca50x/Download/spca5xx-v4l1goodbye.tar.gz

          LE的驅(qū)動有許多問題,比如運行到設(shè)置圖像格式(RGB565或RGB24)時 出錯, 說不支持此參數(shù)。原因在于: ( 摘自驅(qū)動程序主頁 http://mxhaard.free.fr/spca5le.html)
          The spca5xx-LE design is very different from the spca5xx full package(LE版的驅(qū)動和完全版的差很多)。
          The memory in use are the most smaller as possible(LE版的驅(qū)動會盡量減少內(nèi)存的 使用)
          The spcadecoder is reduce and only raw jpeg webcam are used.(驅(qū)動模塊只支持輸 出原始jpeg格式)。

          這兩個驅(qū)動都是針對2.6內(nèi)核設(shè)計的,可以單獨編程成模塊。gspca和spca5xx是一個系列的,它用于2.6.17以上的內(nèi)核版本,以前的版本使用spca5xx驅(qū)動程序。spca5xx在Linux下常用的攝像頭驅(qū)動,這是一個通用驅(qū)動,這個驅(qū)動程序也是基于video4linux的.Makefile中需要修改一下內(nèi)容

          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驅(qū)動,移植到開發(fā)板上insmod即可,這個驅(qū)動相對(2)中編譯的驅(qū)動大了好幾倍吧。注意的是,所使用的內(nèi)核仍要選上USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Camerass模塊。

          2.針對使用的2.4內(nèi)核驅(qū)動

          (1)編譯內(nèi)核驅(qū)動zd301

          重新編譯內(nèi)核,將對應(yīng)的攝像頭支持模塊選上.但是LINUX內(nèi)核中系統(tǒng)中沒有ZC301P攝像頭驅(qū)動,要下載對應(yīng)的內(nèi)核補丁,其補丁和驅(qū)動在http:mxhaard.free.fr中有對應(yīng)的驅(qū)動下載,此處用到的是:usb-2.4.31LE06.patch.tar.gz,此patch是為令重編內(nèi)核時,有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中找不到對應(yīng)的關(guān)鍵字,此時會有一些錯誤,并將錯誤放在Makefile.rej 和config.in.rej 兩文件中,打開兩個文件,分別將其中前面有+的文字加到 Makefile和config.in中對應(yīng)的分類中即可。
          編譯內(nèi)核,進(jìn)入/armlinux/kernel,make menuconfig.在arm linux的kernel目錄下make menuconfig,
          首先<*>選擇Multimedia device->下的Video for linux,然后 USB support ---> USB Multimedia devices 選項下應(yīng)該有 USB SPCA5XX Sunplus Vimicro Sonix Cameras,要把它配置成module。
          make dep;make zImage;make modules.就會在/armlinux/kernel/arch/arm/boot下生成zImage,這就是我們生成最新的內(nèi)核,將此內(nèi)核通過終端下載到開發(fā)板中,/armlinux/kernel/driver/usb/spca5xx中生成spca5xx.o,spcadecoder.o, spca_core.o.這就是我們要的驅(qū)動。
          用新內(nèi)核啟動,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)完整版驅(qū)動。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
          這幾個變量根據(jù)自己的需要修改如下:
          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目錄下出現(xiàn)了/v4l/video0,驅(qū)動成功。

          二、在S3C2410中使用serfoxspcaview

          1、移植視頻采集程序servfox
          移植此程序比較簡單的,下載servfox-R1_1_3后 ,http://mxhaard.free.fr/spca50x/embedded/Servfox/servfox-R1_1_3.tar.gz解壓后,會發(fā)現(xiàn)在其目錄中會有一個Makefile.arm文件,將此文件修改成Makefile,再make就可生成我們要用到的serfox程序了,將 此程序上傳到我們的板中,運行就行了。另外在運行servfox前,可能要運行"mknod /dev/video0 c 81 0"這步,不寫"mknod /dev/video0 c 81 0"這步,有可能出現(xiàn) ERROR opening V4L interface錯誤。但我就沒出現(xiàn)這個問題。
          # servfox -d /dev/video0 -s 320x240 -w 7070
          在服務(wù)器端運行servfox,圖像大小為320x240,端口號為 7070。

          2、客戶端spcaview
          下載spcaview-20061208,http://mxhaard.free.fr/spca50x/Download/spcaview-20061208.tar.gz
          make生成目標(biāo)文件,在PC上,spcaview –w 10.60.38.55:7070就可以看到攝像頭采集來的圖片了。Servfox和spcaview還有很多選項,可以通過spcaview –h 和servfox –h查閱,

          注意的是:spcaview中-w使用的IP為實驗臺的IP,所以在開發(fā)板執(zhí)行serfox之前要配置一下IP,ifconfig eth0 10.60.38.55,并且運行spcaview的主機的IP要與開發(fā)板在同一網(wǎng)段。

          另附:

          (1)spcaview的命令參數(shù)

          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的命令參數(shù)

          -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




          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();