董翠英
(唐山學院 信息工程系,唐山 063000)
隨著計算機網絡、多媒體技術的發(fā)展和圖像處理技術的提高,視頻監(jiān)控技術得到了快速發(fā)展,被廣泛應用到各行各業(yè),如軍事、教育、科研、娛樂、醫(yī)療、體育等[1]。針對這一點,本文論述了如何在ARM硬件平臺上進行嵌入式Linux內核的編譯與移植[2],并對在Linux操作系統(tǒng)下的USB驅動程序的開發(fā)進行了詳細的討論。最后,設計并實現(xiàn)了嵌入式視頻監(jiān)控系統(tǒng)軟件部分,在所建立的ARM Linux開發(fā)平臺上實現(xiàn)了基于USB攝像頭和boa嵌入式web 服務器的視頻監(jiān)控。本文重點討論了USB驅動程序和Web視頻服務器。
本系統(tǒng)使用的平臺功能框圖如圖1所示。該硬件平臺采用Samsung公司的處理器S3C2410。通過在USB接口上外接一個帶USB口的攝像頭,將采集到的視頻圖像數(shù)據(jù)放入輸入緩沖區(qū)。然后對圖像進行處理,最后通過網絡接口將圖像發(fā)送到Internet上。
完整的嵌入式Linux一般包含啟動引導程序、內核、文件系統(tǒng)三個基本部分。在一個新的硬件平臺上,選用嵌入式Linux作為操作系統(tǒng)來開發(fā)軟件,必須進行移植。根據(jù)不同的應用系統(tǒng)設計的需要對Linux內核的源代碼進行修改或者裁剪然后再重新編譯內核。
圖1 嵌入式S3C2410的網絡視頻監(jiān)控系統(tǒng)硬件結構
2.1.1 嵌入式系統(tǒng)引導程序
本系統(tǒng)選用的bootloader是vivi,vivi有兩種工作模式,即啟動加載模式和下載模式。當vivi處于下載模式時,它為用戶提供一個命令行接口,通過該接口能使用vivi提供的一些命令集。
2.1.2 Linux內核的剪裁及移植
一般情況下的Linux內核的剪裁及移植,主要是針對操作系統(tǒng)中關于具體硬件以及除去不需要的功能模塊,如一些不會用到的外設支持、驅動程序、協(xié)議、網絡支持、文件格式等。Linux內核具有很好的模塊性和伸縮性,在資源要求嚴格的情況下經過合理的裁減可獲得明顯的效果[3]。
本系統(tǒng)的內核版本是2.4.18,操作系統(tǒng)是嵌入式linux操作系統(tǒng),其剪裁及移植具體的配置方法是,在嵌入式內核的/kernel目錄下輸入make menuconfig命令進行相應選擇。
本系統(tǒng)需要進行視頻采集,在Multimedia devices項下,選擇
[*] Video For Linux
系統(tǒng)選用的視頻前端為USB攝像頭,因此需要在 USB support項USB Multimedia devices行下,選擇相應的設備驅動。嵌入式內核一般只集成了OV511等幾種攝像頭的驅動,若硬件需要其它的驅動,則要移植、編譯驅動程序后重新配置內核,選擇相應的設備驅動。內核配置完成后,make命令后即可生成可燒寫的內核zImage。
文件系統(tǒng)是基于被劃分的存儲設備上的邏輯單位上的一種定義文件的命名、存儲、組織及取出的方法。本系統(tǒng)采用的是適用于嵌入式系統(tǒng)的小文件系統(tǒng)Cramfs。
重新配置編譯內核,開啟系統(tǒng)板的NFS文件系統(tǒng)功能后,重新編譯內核,下載bootloader和kernel到硬件上,完成硬件設置[2]。
啟動Linux后,若要對某一硬件外設進行讀寫,需要通過內核調用該硬件的驅動來實現(xiàn)。因此實現(xiàn)視頻數(shù)據(jù)的采集需要兩個步驟,一是編譯硬件接口的驅動程序,二是通過內核中提供的關于視頻采集部分的代碼編寫視頻采集的應用程序。
本系統(tǒng)需要對USB攝像頭進行訪問和控制,USB設備的驅動需要和嵌入式內核掛鉤。在內核中和視頻相關的部分是Video For Linux簡稱V4L,因此USB攝像頭驅動要符合V4L標準。在驅動中聲明一個video_device結構,并指定文件操作函數(shù)指針數(shù)組.fops,向系統(tǒng)注冊[4]。在應用程序發(fā)出文件操作命令的時候,內核根據(jù)指針調用這些函數(shù),并將這些結構作為參數(shù)傳遞,完成內核和驅動之間的通訊。
在USB總線標準中定義了四種傳輸方式,分別是控制、中斷、批量和等時。對于本系統(tǒng)視頻采集的實時性要求較高,攝像頭采用的是等時方式。為盡快得到圖像數(shù)據(jù),需要在URB( USB Request Block)中指定USB_ISO_ASAP標志,使其盡快發(fā)出本URB
usb->transfer_flags=USB_ISO_ASAP
本系統(tǒng)選用的是ZC301P型芯片攝像頭,要對其驅動進行加載。由于Linux內核對此類攝像頭并不支持,所以需要自行加載驅動模塊。由于攝像頭的廠商開發(fā)產品時驅動基本上是基于Windows平臺的,在Linux下我們只能選擇開源的驅動源碼,本系統(tǒng)選擇的是SPCA5XX攝像頭通用驅動,在下面的驅動網址:http://mxhaard.free.fr可以下載到針對embeded環(huán)境的驅動源碼,有專門的patch,具體編譯加載步驟如下:
1)下載針對2.4內核的驅動補丁[2],usb-
2.4.31 LE06.patch.tar.gz;
2)將這個patch放到內核源代碼的/driver/usb目錄下,然后解壓、打補丁:
解壓:
tar-xvzf usb-2.4.31LE06.patch.tar.gz
打補?。簆atch-p1<usb-2.4.31.patch
3)在打完補丁后就會在/driver/usb目錄下產生Config.in.rej和Makefile.rej兩個.rej文件,根據(jù)這兩個.rej文件分別修改此目錄下的Makefile和Config.in文件內容,增加此部分代碼后,在完成內核編譯后就能生成攝像頭的驅動模塊:spca5xx.o:
4)編譯內核,在內核目錄下make menuconfig,裝入原內核配置文件,進入主菜單操作,選擇Multimedia devices子菜單,為內核加入V4L內核模塊。
5)在內核主界面下選擇USB support子菜單項,為內核加入USB接口的驅動模塊。
6)在USB Multimedia devices子項下選擇USB SPCA5XX型攝像頭。
7)在配置完內核后,運行make dep->make zImage->make modules之后在內核源碼/driver/usb/spca5xx目錄中可以生成spca5xx.o驅動模塊,通過nfs,即可在系統(tǒng)板上加載驅動測試,加載前需確保已加載videodev.o模塊。以上已經把整個系統(tǒng)的硬件平臺,系統(tǒng)軟件,驅動程序部分確定下來,下一步將進行圖像采集應用軟件的開發(fā)。
在攝像頭驅動成功后,要對攝像頭進行視頻采集的操作就是要針對V4L進行編程。使用Servfox或者Spcaserv作為攝像頭視頻采集的服務器端程序,用Spcaview作為客戶端來實現(xiàn)視頻的接收與處理。
從http://mxhaard.free.fr/Spca50x/embed
ded/Servfox下載ServfoxRl_0_0.tar.gz解壓后,會發(fā)現(xiàn)在其目錄中會有一個Makefile.arm文件,將此文件修改成 Makefile,可以用Vi打開修改編譯器路徑等,確保無誤后make,成功后就可生成我們要用到的Servfox程序。
從http://mxhaard.free.fr/spca50x/Download/下載Spcaview,由于此軟件包依賴于libsdl,所以在安裝spcaview之前必須要安裝SDL-1.2.13。
解壓源碼包:tar -zxvf SDL-1.2.13.tar.gz
安裝源碼包:cd SDL-1.2.13,運行 ./configure文件,編譯和安裝文件。
安裝spcaview軟件:
tar -zxvf spcaview-20061208;
cd spcaview-20061208;
make
為了方便用戶查看監(jiān)控情況,設計了一種網絡視頻服務器,使用戶可以更方便的借助windows IE瀏覽器來查看實時監(jiān)控情況。
隨著嵌入式技術的發(fā)展和高速寬帶網絡的普及,利用網絡實現(xiàn)遠程監(jiān)控已為人們廣泛接受,用戶使用Web瀏覽器,通過以太網遠程訪問內置Web服務器的監(jiān)控攝像機,不但可以實現(xiàn)對現(xiàn)場的遠程視頻監(jiān)控,而且可以向監(jiān)控現(xiàn)場發(fā)送指令?;贐/S結構的網絡視頻監(jiān)控實現(xiàn):B/S結構,即Browser/Server(瀏覽器/服務器)結構,用戶在客戶端采用瀏覽器(Browse)實現(xiàn)對Web服務器的訪問,服務器在后臺運行程序,把結果返回給瀏覽器顯示[4]。
在系統(tǒng)中,客戶端局域網內連網的PC,在瀏覽器地址欄內輸入視頻服務器的IP地址,就能在網頁里顯示攝像頭的監(jiān)控圖像如圖2(a)所示??蛻舳嗽谏衔粰C軟件中輸入10.10.24.2在IP地址欄,客戶端就能實現(xiàn)監(jiān)控圖像的播放如圖2(b)所示。
根據(jù)以上監(jiān)控結果,可進一步把基于ARM的視頻監(jiān)控系統(tǒng)設計成一體的網絡攝像頭,可廣泛用于網絡資源較發(fā)達的場合,如智能家居中主人對家庭安全情況的檢測,家長對幼兒在幼兒園中情況觀察、無人值守的重點實驗室、公司對員工的工作情況的檢查等等??傊S著人們的人們的安全意識的增強,視頻監(jiān)控被廣泛應用到各行各業(yè),有著非常廣闊的市場前景。
圖2 監(jiān)控結果
[1] 駱云志,劉治紅.視頻監(jiān)控技術發(fā)展綜述[J].兵工自動化,2009,28(1):1-3.
[2] 朱弘強,朱惠強,邵吉.基于雙絞線傳輸?shù)囊曨l監(jiān)控系統(tǒng)[J],計算機工程,2008,34(增刊):34-36.
[3] Advanced Linux Programming [M].First Edition,by Alex Samuel, Jeffrey Oldham and Mark Mitchell, 2001.
[4] 陳莉君.Linux操作系統(tǒng)內核分析[M].北京:人民郵電出版社,2005.