終於實現了在Micro2440+Linux2.6.29環境下通過NFS文件系統實現USB攝像頭圖像采集。在此,做一個總結,以備後續參考。
實驗條件:RedHat9.0(內核版本2.4.18),Micro2440開發板,Linux2.6.29(arm9),ANC (Vimicro Corp.) USB PC攝像頭,GCC,SDL-1.2.14.tar,servfox-R1_1_3[1].tar,spcaview-20061208[1].tar。
一、升級Redhat9.0內核
由於Readhat9.0內核版本是2.4,很多內核驅動未包含其中,尤其是USB萬能攝像頭GSPCA和UVC。
二、配置編譯Micro2440上運行內核
重新編譯Micro2440上運行的內核,配置V4L和USB驅動。選擇linux-2.6.29中的config-mini2440為參考,執行:cp config-mini2440 .config;然後make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-;出現相應的圖形化配置窗口。
如果需要在Linux操作系統中使用USB攝像頭進行視頻數據采集,則必須在進行內核配置時,應檢查Linux 內核中是否已經添加了對Video4Linux驅動和對USB攝像頭驅動模塊的支持。
利用Linux內核配置make menuconfig命令對Video4Linux支持驅動進行配置,選中多媒體設備選項“Multimedia device->”(如圖15-1所示)按回車,進入多媒體設備配置界面。在多媒體配置界面中,選中“Video For Linux”,就可以使內核實現對Video4Linux驅動的支持,為視頻采集設備提供編程接口。
配置好內核對Video4Linux驅動後,返回內核配置主界面,選中USB支持選項(如圖15-3 所示)“USB support—>” 按回車,進入USB支持配置界面
配置完成後,執行make uImage ARCH=arm CROSS_COMPILE=arm-linux-。完成後,uImage就生成在arch/arm/boot/中。通過uboot下載uImage到內存中,啟動內核,實現NFS起文件系統。
三、安裝SDL-1.2.14
因為在redhat9.0中顯示視頻圖像,調用spcaview(後面介紹)需要有SDL庫的支持,否則會報錯。所以,將SDL-1.2.14.tar下載傳送到系統中,解壓後執行.configure;make;make install。完成SDL庫的安裝。
四、servfox-R1_1_3工具
下載Servfox-R1_1_3解壓進入其目錄,將其中的Makefile.arm修改為Makefile,並修改Makefile裡面的CC為arm -linux -gcc,因為默認的是加載的動態庫,因此還需要修改Makefile中的SERVFLAGS為SERVFLAGS= -O2 –DLINUX $(WARNINGS) –static,其中-static是我們添加的內容,make之後生成servfox。
五、 spcaview,redhat9.0下的視頻顯示工具
下載spcaview源碼包解壓,進入解壓後的目錄,make後會報錯,一般需要安裝SDL庫,去網上下載後安裝SDL庫,在PC 機上安裝SDL庫:
解壓:tar xvf SDL-1.2.13.tar.tar
配置:./configure
編譯:make
安裝:make install
進入spcaview解壓目錄修改Makefile中的修改Makefile中的SDLLIBS =$(shell sdl-config --libs) 和 SDLFLAGS = $(shell sdl-config --cflags),這兩句主要是指定了SDL庫的庫路徑和編譯選項。Make之後生成spcaview,在客戶端運行spcaview –w 服務器ip:服務器端口號。就可以采集圖像了,
[root@jxboylj spcaview-20061208]# ./spcaview -g -w 10.103.4.211:7070
Spcaview version: 1.1.7 date: 06:11:2006 (C) [email protected]
using Server 10.103.4.211 Port 7070
六、測試
將新編譯的內核加載到ARM上,通過NFS文件系統運行servfox :
# ./servfox -d /dev/video0 -g -s 640x480 -w 7070
servfox version: 1.1.3 date: 11:12:2005 (C) [email protected]
wrong spca5xx device
Waiting .... for connection. CTrl_c to stop !!!!
Got connection from 10.103.4.216
在redhat9.0中執行spcaview:
[root@jxboylj spcaview-20061208]# ./spcaview -g -w 10.103.4.211:7070
Spcaview version: 1.1.7 date: 06:11:2006 (C) [email protected]
using Server 10.103.4.211 Port 7070
此時,視頻能在redhat9.0窗口中顯示,如圖所示。