S3C2410中利用Servfox和Spcaview

來源:互聯網 作者:west263.com 時間:2008-04-16

源代碼下載:
http://www.mcuos.com/viewthread.php?tid=262&extra=page=1&page=1
相關問題討論:
http://www.mcuos.com/viewthread.php?tid=256&extra=&page=1
http://yuruxiao.blog.sohu.com/56584795.html
http://blog.chinaunix.net/u/22630/showart_362806.html
http://www.sduw.com/www/1/2007-09/99.html
http://www.gd-emb.org/detail/id-46907.html


前幾日,研發板上只能用ov511的攝像頭,所以想構建嵌入式視頻服務器只能用webcam-server。現在好了,研發板上能夠用中星微的攝像頭了,於是就想玩玩這個servfox了。其實這個沒什麼好說的就是down一個servfox,然後編譯,就都ok了,:-)。
應用程式servfox和spcaview的使用方法:

步驟總結:
(1)Spcaview既能夠做採集端,也能夠做接收端。但是移植有點複雜^_^。所以採用servfox做爲採集端,移植到arm上。修改servfox裏的Makefile文檔,很簡單,只用將CC改成arm-linux-gcc,SERVFLAGS= -O2 -DLINUX $(WARNINGS) -I /home/linux-2.4/include即可。Make一下,就能夠在板上運行啦。
(2)Spcaview直接make即可生成可執行文檔spcaview。
(3)現在就能夠工作啦。在研發板上servfox –d /dev/video0 –s 640x480 –w 192.168.0.12:7070
在PC上,spcaview –w 192.168.0.12:7070就能夠看到攝像頭採集來的圖片啦。Servfox和spcaview更有很多選項,能夠通過spcaview –h 和servfox –h查閱。 
我在運行中碰到兩個問題,一是servfox的設備必須是/dev/video0,直接用這個/dev/v4l/video0不行,提示v4l接口錯誤,不知爲什麼?沒辦法,只好滿足他,就是建個鏈接了。(ln -s /dev/v4l/video0 /dev/video0).另一個是我的用mmap方法不行,必須要用read方法,否則段錯誤。解決方法就是運行servfox時加參數-g。
要用到的軟件包:
攝像頭驅動: 
http://mxhaard.free.fr/spca50x/e ... 31LE06.patch.tar.gz
服務器視頻採集: 
http://mxhaard.free.fr/spca50x/e ... rvfox-R1_0_0.tar.gz
客戶端播放視頻: 

瀏覽器java plugs: 
http://software.lupaworld.com/da ... -linux-i586-rpm.bin
參考了華恆論壇上戴小鼠的帖子。


學習記錄20070217_實現arm採集圖像在PC上顯示
我的環境
PC:操作系統用的FC5,內核是2.6.15,交叉編譯器是3.4.1
研發板硬件:桓豐銳科的板子,CPU是s3c2410
研發板軟件:bootloader是自己移植的u-boot,內核是自己移植的2.6.14.1,文檔系統是自己移植的busybox-1.1.3
先說一下總體思路,
1、移植攝像頭驅動
2、移植服務器端程式
3、編譯客戶端程式
1、移植攝像頭驅動
這裏移植的是spca5xx-le,網上有很多關關於移植攝像頭驅動的文章,有關於2.4內核的,有關於2.6內核的,我參考的是這篇文章
http://www.ezso.cn/yyjysky/article.asp?id=47
跟他不相同的是,我一開始就把熱插拔選上了。
移植過程中出現 了一些錯誤,困擾我時間最長的錯誤是硬件問題,我的研發板上有三個USB口,有兩個主口,其中一個有問題,插了攝像頭後沒有反應,另外一個正常。一開始我總是把攝像頭插在外面那個口上,老是沒有反應後來插在裏面那個口上,就好了。

2、移植服務器端程式
服務器端程式我用的是servfox,從這裏下載
http://mxhaard.free.fr/spca50x/embedded/Servfox/servfox-R1_1_3.tar.gz
下載,解壓,進入其目錄,觀察之,發現沒有makefile,但有一個makefile.arm,更有一個makefile.386,於是將makefile.arm改名爲makefile,然後輸入命令
make
編譯正常,沒有出錯,將可執行文檔servfox複製到nfs共享目錄,啓動研發板,掛載nfs服務器,運行servfox,出錯,提示爲找到到該命令,老問題,以前碰到過類似問題,原因是該命令爲動態鏈接,而研發板上沒有相關的庫文檔,所以無法運行,需要靜態鏈接。
回到PC,打開makefile,將任何用到arm-linux-gcc的地方,都加上一個參數-static,其實就三個地方。
然後重新編譯,在研發板上運行,輸入命令:
./servfox -d /dev/video0 -s 320x240 -w 7070
程式運行了,提示爲
servfox version: 1.1.3 date: 11:12:2005 (C) 

wrong spca5xx device
Waiting .... for connection. CTrl_c to stop !!!!
Got connection from 192.168.141.234
可能有點小錯誤,先不管他。

3、編譯客戶端程式
客戶端程式使用的是spcaview,下載地址爲:
http://mxhaard.free.fr/spca50x/Download/spcaview-20061208.tar.gz
這個程式是在PC上運行的,解壓後,直接編譯就行,
make
生成可執行文檔spcaview,運行之
./spcaview -g -s 320x240 -w 192.168.141.236:7070
就能看到圖像了,但是圖像不清楚,有花屏,上網查之,發現有人碰到過同樣問題,在服務器端(研發板)運行
./servfox -d /dev/video0 -s 320x240 -w 7070
就能夠看到圖像了。
也可指定分辨率爲640x480,但是不如320x240流暢。
我在這一步碰到過另外一個問題,即使用root用戶的話,運行spcaview沒有問題,但假如使用交叉編譯用戶arm時(爲了編譯方便,建立了一個arm用戶),就會出錯,提示爲
Spcaview version: 1.1.7 date: 06:11:2006 (C) 

size width: 320 height: 240
using Server 192.168.141.236 Port 7070
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
Xlib: connection to ":0.0" refused by server 
Xlib: No protocol specified
Could not initialize SDL: No available video device.
不知什麼原因,暫擱置,以後再研究。
下一步準備弄個視頻服務器,實現能夠在瀏覽器裏直接看到圖像。
有問題聯繫我,我們一起學習,我的郵箱是

這兩天照着網上的帖子,很辛苦的找到了所需要的源代碼,具體流程如下:
1、修改drivers/usb/Makefile文檔,在
obj-$(CONFIG_USB_W9968CF) = media/
之後添加一行:
obj-$(CONFIG_USB_SPCA5XX) = media/
2、修改drivers/usb/media/Kconfig文檔,在最後添加:
config USB_SPCA5XX
tristate "USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras"
depends on USB && VIDEO_DEV
---help---
Say Y or M here if you want to use one of these webcams:
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 "v4l" programs may be found
at .
To compile this driver as a module, choose M here: the
module will be called spca5xx.
3、修改drivers/usb/media/Makefile ,添加:
obj-$(CONFIG_USB_SPCA5XX) = spca5xx/
4、在usb/media目錄下建立spca5xx目錄
#mkdir drivers/usb/media/spca5xx
5、在drivers/usb/media/spca5xx添加如下文檔:這些代碼能夠從
http://mxhaard.free.fr/spca50x/D
... 2.6.12.patch.tar.gz
中下載
(1)、cs2102.h
(2)、hdcs2020.h
(3)、hv7131b.h
(4)、hv7131c.h
(5)、icm105a.h
(6)、Makefile
(7)、Makefile.2.4
(8)、Makefile.org
(9)、pas106b.h
(10)、pb0330.h
(11)、sn9cxxx.h
(12)、sp5xxfw2.dat
(13)、sp5xxfw2.h
(14)、spca5xx.h
(15)、spcaCompat.h
(16)、spca_core.c
(17)、spcadecoder.c
(19)、spcadecoder.h
(20)、spcausb.h
(21)、tas5130c.h
(22)、zc3xx.h
6、配置內核
(1)Multimedia devices -
Video For Linux
(2) USB support -
Support for Host-side USB
--- USB Host Controller Drivers 
OHCI HCD support
(3)--- USB Multimedia devices
USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras
7、編譯內核及模塊
#make uImage
#make modules
8、拷貝模塊文檔到研發板文檔系統目錄下
walker/
walker/module_file
以上兩個目錄爲手動建立的目錄
cp drivers/media/video/v4l1-compat.ko /friendly-arm/rootfs_netserv/home/walker/module_file
cp drivers/media/video/v4l2-common.ko /friendly-arm/rootfs_netserv/home/walker/module_file
cp drivers/media/video/videodev.ko /friendly-arm/rootfs_netserv/home/walker/module_file
cp drivers/usb/core/usbcore.ko /friendly-arm/rootfs_netserv/home/walker/module_file
cp drivers/usb/media/spca5xx/spca5xx.ko /friendly-arm/rootfs_netserv/home/walker/module_file
9、將USB攝像頭插入研發板(注:必須先插入攝像頭才能插入模塊文檔,否則系統會出現kernel oops)
10、重新啓動研發板
11、插入模塊文檔(注:這裏必須注意模塊的插入順序,這是因爲模塊的依賴關係)
/sbin/insmod /home/walker/usbcore.ko
/sbin/insmod /home/walker/ohci-hcd.ko
/sbin/insmod /home/walker/v4l1-compat.ko
/sbin/insmod /home/walker/v4l2-common.ko
/sbin/insmod /home/walker/videodev.ko
/sbin/insmod /home/walker/spca5xx.ko
這裏再次多謝這篇帖子的作者寫得這麼周詳。。
能夠說沒有什麼問題。不知道爲什麼法國那個網站我上不去了,上面提到的源代碼我是東一個西一個不同的論壇上下的。這裏上傳不了,假如有需要源碼能夠發郵件給我:

末了,提出自己的問題,希望有經驗的大俠能夠指點指點,我的模塊加載沒問題,mknod /dev/video0 c 81 0之後運行serfox也沒問題,但是在客戶端用spcaview連接的時候就提示很難找到設備,不知道是爲什麼? 我用的是cramfs文檔系統,也就是說是隻讀文檔系統,是不是由於這裏的原因呢?
謝謝

哦 已能夠看到設備節點,我開始故意少加載一個模塊,這時候運行servfox就會出現錯誤,但是當我任何模塊加進去之後就沒有出現錯誤,而且用cat /dev/v4l/video0 > /tmp/a.jpg 也能夠獲取,故此斷定驅動應該是沒有問題的。
由於我的主機是2.4內核,而armlinux是2.6.1內核,試了也不相同,所以就沒有在主機上搗鼓,還是也試試呢。。 再去網上看看。。

剛喫飯去了.....呵呵.. 
是這樣的... 按照前面帖子的做法.. 已把驅動模塊都掛上了..
這個時候需要一個服務器視頻採集程式,就是我發過去的那個代碼servfox-R1_3_0.tar.gz
把這個代碼解壓之後,裏面有個Makefile.arm,把這個文檔改成Makefile 然後修改Makefile裏面的交叉編譯器,Make之後得到servfox文檔,拷到我的armlinux文檔系統的/bin目錄下
mknod /dev/video0 c 81 0 創建設備節點..
servfox -g -d /dev/video0 -w 7070 在armlinux下運行剛剛移植進去的servfox
這個時候服務端已起來了. 
客戶端,我是在RH9中,記住,一定是X-windows界面下哦... 這裏用到那個源代碼spcaview,這個好編譯,直接make makeinstall一下就完了..
然後在客戶端運行 spcaview -g -w 192.168.0.1:7070
激動了... 看到了吧....

這次說說用web頁面觀看的問題了,呵呵 一鼓作氣啊..
在主機上,進入spcaview安裝的目錄下,是不是看到有個目錄叫做http-java-applet呢,對了就是他.
我們需要把他拷貝到boa的主目錄下,也就是您的DocumentRoot 的目錄下,但是在做這個工作之前我們需要把這個目錄的權限修改一下,chmod -R 755 /home/spcaview/http-java-applet(之前我就是沒做這一步導致applet程式不能運行)這時把這個文檔夾整個拷貝到boa的主目錄下,然後啓動boa服務器.. 進web瀏覽器 
http://192.168.0.X/http-java-applet/index-sample.html
,便能夠看到了

您在網站上顯示圖片的話,別人必須不斷的刷新才能看見新的圖片撒。。
所以在我提供的源程式中有個JwebPlayer的程式,是個applet小程式,能夠加載到web頁面中用來播放視頻流

很感謝樓主,我的問題解決了,現在能夠在網頁上看到視頻流了
之前我看不到的原因,第一次是網址配置不對,後來是程式裏的端口和./servfox時不一致
中途還碰到過小應用程式加載失敗的問題,那是沒有將.jar包和index-sample.html放在同一目錄下
再次感謝樓主~~~


要用到的軟件包
攝像頭驅動: 
http://mxhaard.free.fr/spca50x/e
... 31LE06.patch.tar.gz
服務器視頻採集: 
http://mxhaard.free.fr/spca50x/e
... rvfox-R1_0_0.tar.gz
客戶端播放視頻: 

瀏覽器java plugs: 
http://software.lupaworld.com/da
... -linux-i586-rpm.bin
一、硬件平臺:
2410研發板
攝像頭:zc301p
二、軟件平臺:
armLinux
三、驅動程式:
編譯 zc301驅動
主要的思路是重新編譯內核,將對應的攝像頭支持模塊選上.
但是LINUX內核中系統中沒有ZC301P攝像頭驅動,要下載對應的內核補丁,其補丁和驅動在
http://mxhaard.free.fr/
中有對應的驅動下載,此處用到的是:
http://mxhaard.free.fr/spca50x/e
... 31LE06.patch.tar.gz,此patch是爲令重編內核時,有spcaxx系列攝像頭的支持。
(1)把他複製到/armlinux/kernel/driver/usb下,解壓,打補丁.
tar -xvzf usb-2.4.31.patch.gz
patch -p1 
在arm linux的kernel目錄下make menuconfig,
首先選擇Multimedia device->下的Video for linux,
然後 USB support - USB Multimedia devices 選項下應該有
USB SPCA5XX Sunplus Vimicro Sonix Cameras,要把他配置成module。
(3)make dep;make zImage;make modules.就會在/armlinux/kernel/arch/arm/boot下生成zImage,這就是我們生成最新的內核,將此內核通過終端下載到研發板中,/armlinux/kernel/driver/usb/spca5xx中生成spca5xx.o,spcadecoder.o,spca_core.o.這就是我們要的驅動.
(4)用新內核啓動,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表明攝像頭成功安裝。
四、應用程式:
1、移植視頻採集程式servfox
移植此程式是最簡單的,從
http://mxhaard.free.fr/spca50x/e
... rvfox-R1_0_0.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


下載spcaviev ,make生成目標文檔,
在PC上,spcaview –w 192.168.1.186:7070就能夠看到攝像頭採集來的圖片了。Servfox和spcaview更有很多選項,能夠通過spcaview –h 和servfox –h查閱,其中.
解壓後,還會產生,此是WEB客戶端,將此客戶端上傳到研發板上的WEB文檔夾中,則在瀏覽器輸入 
http://192.168.1.186/index-sample.html
則可看到攝像頭採集來的圖片了。
web SERVER是移植 boa,移植方法略
3、web瀏覽器安裝jre
1、去這裏:
http://software.lupaworld.com/da
... -linux-i586-rpm.bin 下載最新自解壓安裝包,其自解壓出來的rpm包是不能夠直接使用的,要不就直接提供rpm包安裝了;
2、使用命令如下:
chmod x ./jre-1_5_0_09-linux-i586-rpm.bin
./jre-1_5_0_09-linux-i586-rpm.bin
按空格查看下面的條款,然後輸入yes安裝完畢後,進行下一步;
3、 到firefox/lugins目錄(在我的NeoShine-Linux下是 /usr/local/firefox/plugins)或~/.mozilla/plugins下執行:
ln -s $JAVA_HOME/jre/plugin/i386/ns7/libjavaplugin_oji.so ./
假如是安裝的jre,可能命令語句如下:
ln -s $JAVA_HOME/plugin/i386/ns7/libjavaplugin_oji.so
假如是安裝的jre就是jre文檔夾地址。 
這樣就安裝完成了。能夠在firefox地址欄裏輸入about:plugins查看是否安裝成功。
將連接創建在~/.mozilla/plugins下是放在當前用戶下,無需root權限,不影響其他用戶。
從視頻的效果來看,是很流暢和清楚,比想象中要好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章