摘要:嵌入式系統(tǒng)設(shè)計中,硬件設(shè)計是基礎(chǔ),軟件設(shè)計是核心。文章提出了一種行之有效的嵌入式軟件設(shè)計方案,并以此為核心,完成了一種基于嵌入式的遠(yuǎn)程網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的軟件設(shè)計。系統(tǒng)軟件設(shè)計中完成以下幾方面的工作:首先完成對系統(tǒng)軟件結(jié)構(gòu)的設(shè)計,其次完成對嵌入式Linux開發(fā)的軟件操作平臺的搭建,最后完成對視頻監(jiān)控軟件中USB攝像頭的驅(qū)動模塊及對視頻圖像的采集、顯示等應(yīng)用程序模塊的設(shè)計與實現(xiàn)。
關(guān)鍵詞:嵌入式;軟件設(shè)計;Linux
中圖分類號:TP391.4 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)35-0061-02
隨著計算機(jī)網(wǎng)絡(luò)、通信以及數(shù)字信息處理技術(shù)的不斷進(jìn)步,基于嵌入式Web的遠(yuǎn)程網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)就是在計算機(jī)網(wǎng)絡(luò)技術(shù)與嵌入式技術(shù)完美結(jié)合下的催生產(chǎn)物,它是現(xiàn)代高科技信息產(chǎn)業(yè)的結(jié)晶?;谇度胧絎eb的遠(yuǎn)程網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)把視頻圖像的處理和Web功能都集成到一個體積很小的設(shè)備之內(nèi),通過接入Internet網(wǎng)絡(luò),利用Web瀏覽器即可實現(xiàn)對采集到的視頻圖像進(jìn)行查看,這樣也就省掉了對傳統(tǒng)的視頻監(jiān)控系統(tǒng)設(shè)備鋪設(shè)很多復(fù)雜的電纜這個煩瑣過程,而且系統(tǒng)的安裝非常方便,因而使得基于嵌入式Web的遠(yuǎn)程網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)獲得人們的一致肯定和廣泛應(yīng)用。
1 嵌入式系統(tǒng)的軟件設(shè)計
1.1系統(tǒng)軟件設(shè)計的基礎(chǔ)環(huán)節(jié)
基于嵌入式的遠(yuǎn)程網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的設(shè)計是在ARM9+Linux平臺上進(jìn)行研究開發(fā)設(shè)計的,因此,在完成系統(tǒng)的硬件設(shè)計及硬件平臺的構(gòu)建之后,就要開始進(jìn)行軟件方面的設(shè)計。而整個軟件設(shè)計又緊密圍繞嵌入式Linux操作系統(tǒng)而展開,也就是說,嵌入式Linux操作系統(tǒng)是整個嵌入式系統(tǒng)軟件設(shè)計的核心。
從軟件的角度來講,一個嵌入式Linux操作系統(tǒng)通常分為四個主要部分:
1)引導(dǎo)加載程序BootLoader;
2)嵌入式Linux內(nèi)核;
3)文件系統(tǒng);
4)用戶應(yīng)用程序。包含滿足使用用戶需求的某些應(yīng)用程序。
倘若要使一個嵌入式Linux操作系統(tǒng)能夠在嵌入式硬件平臺上正常的運(yùn)行,就必須要先完成對BootLoader、嵌入式Linux內(nèi)核及其文件系統(tǒng)的燒寫工作,即將BootLoader、Linux內(nèi)核及其文件系統(tǒng)全部下載到嵌入式硬件平臺上才能運(yùn)行,三者缺一不可。
1.2系統(tǒng)軟件總體框架
嵌入式系統(tǒng)軟件設(shè)計的目的是要為嵌入式的遠(yuǎn)程網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)構(gòu)建一種B/S(即瀏覽器,服務(wù)器)的工作模式。并在這種B/S工作模式下,實現(xiàn)嵌入式Web服務(wù)器端與客戶端(這里指Web瀏覽器)之間的通信和信息交互,從而完成設(shè)計系統(tǒng)的各項系統(tǒng)功能。嵌入式系統(tǒng)的服務(wù)器端主要由系統(tǒng)軟件和應(yīng)用軟件兩個部分組成。對系統(tǒng)軟件部分的設(shè)計包括對引導(dǎo)加載程序BootLoader的移植、對嵌入式Linux系統(tǒng)內(nèi)核的配置、裁剪和移植、對文件系統(tǒng)的移植等工作,也就是要完成系統(tǒng)軟件設(shè)計基礎(chǔ)環(huán)節(jié)。
1.3系統(tǒng)軟件功能模塊設(shè)計
軟件設(shè)計的最終目的就是實現(xiàn)嵌入式系統(tǒng)的遠(yuǎn)程網(wǎng)絡(luò)視頻監(jiān)控的各項功能。而在進(jìn)行系統(tǒng)軟件設(shè)計的過程中,應(yīng)該遵循軟件工程設(shè)計的方法:首先要根據(jù)系統(tǒng)需要實現(xiàn)的各項功能,對系統(tǒng)進(jìn)行功能模塊的劃分和抽象,然后進(jìn)行抽象到具體的深入分析,從而構(gòu)造出系統(tǒng)軟件設(shè)計的層次結(jié)構(gòu),提高系統(tǒng)軟件設(shè)計的可理解性。
嵌入式系統(tǒng)及其相應(yīng)設(shè)備驅(qū)動模塊需要完成以下幾個方面內(nèi)容:
首先是對整個嵌入式系統(tǒng)軟件操作平臺Linux內(nèi)核的裁剪、編譯及其移植;其次是完成硬件平臺上所用設(shè)備的驅(qū)動程序的加載;最后是對系統(tǒng)視頻數(shù)據(jù)采集程序模塊的加載。
而Boa Web服務(wù)器模塊要完成的內(nèi)容包括:
1)采用B/S模式的監(jiān)測結(jié)構(gòu),ARM板是服務(wù)端,選用Boa作為Web服務(wù)器;
2)因為Boa服務(wù)器支持CGI編程,可設(shè)計CGI程序產(chǎn)生瀏覽器的監(jiān)控頁面;
3)遠(yuǎn)程用戶可以通過連接Internet網(wǎng)絡(luò),利用Web瀏覽器打開視頻監(jiān)控的Web主頁面,從而收看由嵌入式系統(tǒng)的USB攝像頭采集到的對現(xiàn)場場景的實時視頻圖像數(shù)據(jù)。
后臺處理程序模塊需要完成的內(nèi)容主要包括利用網(wǎng)絡(luò)功能的Telnet技術(shù)實現(xiàn)監(jiān)測端用戶遠(yuǎn)程登錄到嵌入式設(shè)備,并實現(xiàn)對設(shè)備的一系列控制操作;同時還需要完成其他一些后臺處理程序。
2 嵌入式系統(tǒng)軟件操作平臺的構(gòu)建
2.1嵌入式Linux交叉編譯環(huán)境的建立
在裁減和定制嵌入式Linux內(nèi)核,并將其應(yīng)用于特定的嵌入式系統(tǒng)硬件平臺之前,考慮到一般嵌入式系統(tǒng)硬件平臺內(nèi)部的存儲空間是有限的,通常需要在PC機(jī)(或稱宿主機(jī))上建立一個嵌入式交叉編譯環(huán)境,用于為特定的嵌入式系統(tǒng)進(jìn)行嵌入式開發(fā)設(shè)計服務(wù)。
整個交叉編譯的過程就是首先在宿主機(jī)(PC機(jī))上通過跨平臺嵌入式交叉編譯器把源文件編譯成嵌入式系統(tǒng)硬件平臺上的可執(zhí)行文件,然后通過串口、并口、USB口或者網(wǎng)絡(luò)傳送等方式,將經(jīng)過交叉編譯后生成的可執(zhí)行文件下載到目標(biāo)系統(tǒng)硬件平臺(即嵌入式系統(tǒng)的硬件平臺)上的Flash或者其他存儲介質(zhì)中,最后在目標(biāo)系統(tǒng)硬件平臺上運(yùn)行這些文件。
2.2嵌入式Linux的內(nèi)核裁剪與編譯
由于嵌入式系統(tǒng)內(nèi)部的硬件資源有限,所以對整個嵌入式Linux內(nèi)核源碼包進(jìn)行完全編譯,勢必會造成系統(tǒng)內(nèi)部資源的浪費,也會因此影響到系統(tǒng)的功能實現(xiàn)及運(yùn)行速度,所以在對嵌入式Linux內(nèi)核編譯之前,先要根據(jù)嵌入式系統(tǒng)的硬件及其要實現(xiàn)的具體功能,在保證內(nèi)核穩(wěn)定工作的前提下,對嵌入式Linux內(nèi)核進(jìn)行裁剪。雖然對內(nèi)核源代碼進(jìn)行修改和裁剪可以達(dá)到精簡內(nèi)核的目的,但也容易導(dǎo)致嵌入式Linux內(nèi)核代碼的不穩(wěn)定或者Linux內(nèi)核代碼的靈活性喪失。通過對嵌入式Linux內(nèi)核進(jìn)行配置,從中選取系統(tǒng)能夠用到的功能,去除系統(tǒng)不需要或者用不到的功能,從而達(dá)到節(jié)省資源、系統(tǒng)優(yōu)化和精簡嵌入式Linux內(nèi)核的目的。
3 系統(tǒng)應(yīng)用程序模塊的設(shè)計與實現(xiàn)
3.1USB攝像頭驅(qū)動程序加載
首先,加載USB攝像頭驅(qū)動模塊,并重新編譯內(nèi)核,因為Linux所選的2.6.12版本系統(tǒng)內(nèi)核中沒有中星微ZC30IP的USB攝像頭驅(qū)動,因此,要下載對應(yīng)的內(nèi)核補(bǔ)丁usb-2.6.12LE06.patch.tar.gz。
其次,要把下載的驅(qū)動程序復(fù)制到文件目錄/Linux-2.6.12/driver/usb/下,然后進(jìn)行解壓,之后是打補(bǔ)丁。具體操作命令如下所示:
tar——xvzf usb-2.6.12LE 06.patch.tar.gz
patch——pl
然后是編譯內(nèi)核,進(jìn)入嵌入式Linux操作系統(tǒng)kernel源碼目錄下/Linux-2.6.12,執(zhí)行make menuconfig命令。然后在彈出的窗口中,選中下面的幾項:
1)Multimedia devices一>
<*>Video For Linux
這一步的目的是加載video4linux模塊,為視頻采集設(shè)備提供了編程接口。
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
這兩步的目的就是在嵌入式Linux內(nèi)核中加入了對中星微ZC301P系列芯片的USB攝像頭的驅(qū)動支持。
4)對以上配置進(jìn)行保存,然后退出。
5)make dep; make zlmage。
3.2視頻圖像采集與顯示模塊加載
視頻圖像采集與顯示模塊采用的是Servfox+Spcaview的組合。首先,要下載Servfox的源碼,它是視頻圖像的采集模塊。這里用到的是servfox-R1_1_3.tar.gz,進(jìn)行解壓之后修改make-file里面的交叉編譯器的路徑,直接make,就生成了開發(fā)板上的可執(zhí)行文件,然后通過超級終端下載到開發(fā)板上,接著用chmod+x servfox修改可執(zhí)行的屬性,最后運(yùn)行:
#ln—s/dev/v41/video0/dev/video0
#servfox—g—s 320x240—w 7070
可以得到如下所示的測試界面:
視頻圖像的采集與顯示模塊要下載Spcaview源碼,直接make即可生成可執(zhí)行文件spcaview。在PC機(jī)上的虛擬機(jī)運(yùn)行的Linux環(huán)境下運(yùn)行,192.168.1.130是視頻圖像采集端嵌入式系統(tǒng)主機(jī)的IP地址,7070是端口號。
spcaview—w 192.168.1.130:7070
視頻圖像經(jīng)過Servfox+Spcaview的組合模塊完成采集和顯示,實現(xiàn)功能模塊加載過程。
3.3Telnet技術(shù)
Telnet是利用Internet網(wǎng)絡(luò)實現(xiàn)遠(yuǎn)程登錄服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式,Telnet協(xié)議屬于TCP/IP協(xié)議族中的重要一員。通過Telnet技術(shù),遠(yuǎn)程用戶實現(xiàn)了在本地計算機(jī)對嵌入式遠(yuǎn)程網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的遠(yuǎn)程登錄和遠(yuǎn)程控制。用戶在本地計算機(jī)上輸入操作命令,然后這些操作命令將會在嵌入式系統(tǒng)上執(zhí)行,就如同遠(yuǎn)程用戶在現(xiàn)場嵌入式系統(tǒng)的控制臺上直接進(jìn)行操控一樣,實現(xiàn)對嵌入式遠(yuǎn)程網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的遠(yuǎn)程控制功能。
參考文獻(xiàn):
[1]孫繼坤,張小全.嵌入式Linux開發(fā)技術(shù)詳解一基于ARM[M].北京:人民郵電出版社,2006:113-134.
[2]韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2008:34-56.
【通聯(lián)編輯:李雅琪】
收稿日期:2019-10-11
基金項目:河南省高等學(xué)校重點科研項目計劃支持(項目編號:13B520320)
作者簡介:趙雪梅(1966-),女,河南鄭州人,鄭州升達(dá)經(jīng)貿(mào)管理學(xué)院,教授,碩士,研究方向為智能控制與計算機(jī)應(yīng)用。