Linux-第15章-基于ARM-Linux的家庭安全監(jiān)控系統(tǒng)設(shè)計(jì)_第1頁(yè)
Linux-第15章-基于ARM-Linux的家庭安全監(jiān)控系統(tǒng)設(shè)計(jì)_第2頁(yè)
Linux-第15章-基于ARM-Linux的家庭安全監(jiān)控系統(tǒng)設(shè)計(jì)_第3頁(yè)
Linux-第15章-基于ARM-Linux的家庭安全監(jiān)控系統(tǒng)設(shè)計(jì)_第4頁(yè)
Linux-第15章-基于ARM-Linux的家庭安全監(jiān)控系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩72頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第15章基于ARMLinux的家庭平安監(jiān)控系統(tǒng)設(shè)計(jì)隨著經(jīng)濟(jì)的快速開展,生活節(jié)奏的提高,人們照顧家庭的時(shí)間越來越少,感覺時(shí)間也越來越緊張:不但要周旋在繁雜的工作之中,同時(shí)也要兼顧自己的“家”。怎樣才能夠解決這個(gè)矛盾,做到“魚與熊掌兼得”成了人們關(guān)注的重點(diǎn)。而傳統(tǒng)的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)如模擬視頻監(jiān)控,都是應(yīng)用到專用的視頻監(jiān)控領(lǐng)域,采用專有線路、模擬電視信號(hào)等實(shí)現(xiàn),需要較多的硬件,整個(gè)系統(tǒng)昂貴、通用性差、不易擴(kuò)展、建設(shè)安裝復(fù)雜,需要專業(yè)人士完成。這些要求都導(dǎo)致了該類系統(tǒng)難以普及進(jìn)入普通家庭。第15章基于ARMLinux的家庭平安監(jiān)控系統(tǒng)設(shè)計(jì)系統(tǒng)功能和組成15.1系統(tǒng)模塊功能描述15.2軟件平臺(tái)與開發(fā)工具

15.3基于嵌入式平臺(tái)的網(wǎng)絡(luò)服務(wù)器

15.4第15章基于ARMLinux的家庭平安監(jiān)控系統(tǒng)設(shè)計(jì)視頻監(jiān)控系統(tǒng)的實(shí)現(xiàn)

15.5紅外監(jiān)控模塊設(shè)計(jì)15.615.1系統(tǒng)功能和組成家庭平安監(jiān)控系統(tǒng)的目標(biāo)是使用戶可以隨時(shí)通過移動(dòng)通信設(shè)備、通過網(wǎng)絡(luò)查看被監(jiān)控地點(diǎn)的攝像設(shè)備捕捉到的視頻信息。家里的攝像設(shè)備進(jìn)行監(jiān)視,將視頻信息傳送到效勞器進(jìn)行處理和保存。當(dāng)用戶向效勞器發(fā)出請(qǐng)求時(shí),效勞器將數(shù)據(jù)通過無(wú)線網(wǎng)絡(luò)傳送至用戶的移動(dòng)通信終端。整個(gè)家庭平安效勞系統(tǒng)包括效勞器、傳感器和客戶端三局部組成。傳感器通過無(wú)線網(wǎng)絡(luò)實(shí)現(xiàn)對(duì)用戶家庭平安情況的實(shí)時(shí)監(jiān)測(cè)。本系統(tǒng)使用無(wú)線技術(shù)在家庭內(nèi)組建無(wú)線局域網(wǎng)絡(luò),并通過網(wǎng)絡(luò)中的傳感器設(shè)備,如無(wú)線攝像頭、無(wú)線紅外探頭等對(duì)用戶室內(nèi)情況監(jiān)測(cè),將監(jiān)測(cè)信息通過無(wú)線局域網(wǎng)傳送數(shù)據(jù)至效勞器,供效勞器進(jìn)行相應(yīng)處理。攝像頭負(fù)責(zé)采集家庭室內(nèi)視頻及圖像信號(hào),并傳輸至效勞器。紅外探頭負(fù)責(zé)監(jiān)控家庭內(nèi)是否有陌生人入侵,并將信號(hào)傳輸至效勞器。Linux客戶端系統(tǒng),通過有限網(wǎng)絡(luò)實(shí)現(xiàn)對(duì)用戶家庭平安情況實(shí)時(shí)監(jiān)測(cè)。其中屏幕負(fù)責(zé)顯示圖片或者視頻。圖15-1為家庭平安效勞系統(tǒng)工作網(wǎng)絡(luò)圖,其中防火墻與監(jiān)控設(shè)備之間由無(wú)線節(jié)點(diǎn)和效勞器相連,移動(dòng)通信設(shè)備與客戶端之間存在TCP/IP通信交互協(xié)議。圖15-1家庭平安監(jiān)控系統(tǒng)結(jié)構(gòu)圖

S3C2410是韓國(guó)三星公司生產(chǎn)的一款基于ARM920T體系結(jié)構(gòu)的32位高性能CPU,豐富的外設(shè)接口,203MHz的主頻使它特別適合進(jìn)行操作系統(tǒng)的移植和進(jìn)行應(yīng)用開發(fā)。S3C2410采用0.18μm制造工藝的32位微控制器。該處理器擁有獨(dú)立的16kB指令Cache和16kB數(shù)據(jù)Cache、MMU,支持TFT的LCD控制器,NAND閃存控制器,3路UART,4路DMA,4路帶PWM的Timer,I/O口,RTC,8路10位ADC,TouchScreen接口,IIC-BUS接口,IIS-BUS接口,2個(gè)USB主機(jī),1個(gè)USB設(shè)備,SD主機(jī)和MMC接口,2路SPI。15.1.1S3C2410介紹S3C2410的內(nèi)部結(jié)構(gòu)如圖15-2所示。圖15-2S3C2410內(nèi)部結(jié)構(gòu)圖

1.片上功能介紹1.8V的ARM920T內(nèi)核,1.8V/2.5V/3.3V存儲(chǔ)系統(tǒng),帶有3.3V16KB指令和16KB數(shù)據(jù)緩存及MMU單元的外部I/O接口的微處理器;外部存儲(chǔ)器控制〔SDRAM控制和芯片選擇邏輯〕;LCD控制器〔支持4K顏色的STN或256K色TFT的LCD〕,帶有1個(gè)通道的LCD專用DMA控制器;4通道DMA,具有外部請(qǐng)求引腳;3通道UART〔支持IrDA1.0,16字節(jié)發(fā)送FIFO及16字節(jié)接收FIFO〕和2通道SPI接口;1個(gè)通道多主I2C總線控制器/1通道IIS總線控制器;0版本SD主機(jī)接口及2.11版本兼容的MMC卡協(xié)議;2個(gè)主機(jī)接口的USB口和1個(gè)設(shè)備USB口〔1.1版本〕;4通道PWM定時(shí)器/1通道內(nèi)部計(jì)時(shí)器;看門狗定時(shí)器;117位通用目的I/O口、24通道外部中斷源;電源控制:正常、慢速、空閑及電源關(guān)閉模式;帶觸摸屏接口的8通道10位ADC;帶日歷功能的實(shí)時(shí)時(shí)鐘控制器;具有PLL的片上時(shí)鐘發(fā)生器。2.體系結(jié)構(gòu)集成了手持設(shè)備和通用嵌入式系統(tǒng)的解決方案;32/16位結(jié)構(gòu)體系和ARM920TCPU核的強(qiáng)大指令體系;增強(qiáng)的ARMMMU體系結(jié)構(gòu)支持WinCE、POC32和Linux操作系統(tǒng);指令緩存、數(shù)據(jù)緩存、寫緩沖器和RAM物理地址標(biāo)簽減少了主存儲(chǔ)器帶寬和潛在性能的影響;ARM920TCPU核支持ARM調(diào)試體系結(jié)構(gòu);內(nèi)置的高級(jí)微控制總線體系結(jié)構(gòu)〔AMBA〕〔AMBA2.0,AHB/APB〕。3.系統(tǒng)管理器支持小/大端模式;尋址空間:每個(gè)bank128M字節(jié)〔總共1G字節(jié)〕;支持每個(gè)bank可編程的8/16/32位數(shù)據(jù)總線寬度;bank0到bank6具有固定的bank起始地址;bank7具有可編程的bank起始地址和bank大?。还灿?個(gè)存儲(chǔ)器bank:6個(gè)存儲(chǔ)器bank用于ROM,SRAM及其它;2個(gè)存儲(chǔ)器bank用于ROM/SRAM/同步DRAM;所有的存儲(chǔ)器bank具有可編程的操作周期;支持外部等待信號(hào)延長(zhǎng)總線周期;支持掉電時(shí)的SDRAM自刷新模式;支持多種類型的引導(dǎo)ROM〔NOR/NandFlash,EEPROM及其它〕。 各種物體因?yàn)橥獗頍岫鹊牟煌紩?huì)輻射出強(qiáng)弱不同的紅外線,物體不同輻射的紅外線波長(zhǎng)也有不同。紅外探測(cè)主要用來探測(cè)人體和其他一些入侵的移動(dòng)物體,當(dāng)人體進(jìn)入探測(cè)區(qū)域,穩(wěn)定不變的熱輻射被破壞,產(chǎn)生一個(gè)變化的熱輻射,紅外傳感器接收后放大、處理,發(fā)出報(bào)警信號(hào)。15.1.2無(wú)線紅外探頭RD-HW14G無(wú)線紅外探頭RD-HW14G采用先進(jìn)的數(shù)字信號(hào)處理技術(shù),由高精度被動(dòng)紅外探測(cè)頭和邏輯數(shù)碼電路設(shè)計(jì)組成,具有更強(qiáng)的抗干擾能力、精細(xì)的全范圍溫度補(bǔ)償;含微處理,CPU控制,防小寵物;超微功耗設(shè)計(jì),智能節(jié)電模式,當(dāng)探測(cè)不到信號(hào)時(shí),自動(dòng)進(jìn)入30秒節(jié)電模式。探測(cè)器通過探測(cè)人體輻射的紅外熱能而發(fā)射無(wú)線數(shù)碼信號(hào)來啟動(dòng)主機(jī)相應(yīng)報(bào)警。具有外形美觀、平安可靠、受環(huán)境影響小,安裝使用方便等優(yōu)點(diǎn),適合目前現(xiàn)代家居陽(yáng)臺(tái)落地窗、超大窗戶等使用。1.特點(diǎn)及結(jié)構(gòu)原理:(1)防拆開關(guān):外殼被翻開探測(cè)器發(fā)射報(bào)警信號(hào)。(2)與主機(jī)對(duì)碼:將主機(jī)要對(duì)碼防區(qū)撥“ON”,按探測(cè)器防拆開關(guān)一次后發(fā)出信號(hào),主機(jī)鳴響一聲表示對(duì)碼成功。(3)電池低壓報(bào)警:當(dāng)電池電壓降低時(shí),人體移動(dòng)時(shí)LED燈閃次,靜態(tài)環(huán)境不告警。(4)編碼地址:出廠已設(shè)好。(5)設(shè)防時(shí)間選擇:約3秒或30秒,由跳線塊選擇。(6)可以與多種主機(jī)兼容。2.技術(shù)參數(shù):(1)工作電壓:9V鋰錳電池500mAh(2)工作電流:靜態(tài):﹤30μA報(bào)警:﹤16mA(3)探測(cè)角度:110°(4)工作環(huán)境:-10℃~50℃(5)外型尺寸:143×55×68mmLinux客戶端的主要功能有:監(jiān)控功能:用戶通過效勞器終端向效勞器發(fā)送監(jiān)控請(qǐng)求,明確需要進(jìn)行的監(jiān)控類型。效勞器收到請(qǐng)求后,向終端發(fā)送相關(guān)的多媒體信息,包括圖片或視頻。在視頻監(jiān)控功能中用戶向效勞器發(fā)起視頻監(jiān)控請(qǐng)求。效勞器通過攝像頭捕捉室內(nèi)的視頻信息后,將這些信息通過無(wú)線網(wǎng)絡(luò)發(fā)送到移動(dòng)終端,經(jīng)過合法的身份驗(yàn)證時(shí),用戶可以查看這些視頻。而在圖片監(jiān)控的時(shí)候效勞器通過攝像頭對(duì)室內(nèi)進(jìn)行拍照。將照片通過無(wú)線網(wǎng)絡(luò)發(fā)送到移動(dòng)通信終端,同樣也應(yīng)該經(jīng)過合法的身份驗(yàn)證,用戶看到是那么是這些圖像。15.2系統(tǒng)模塊功能描述

圖15-3監(jiān)控功能活動(dòng)圖歷史查詢功能:用戶可以通過發(fā)送一個(gè)歷史視頻瀏覽的請(qǐng)求,將想瀏覽的歷史視頻的時(shí)間發(fā)送到效勞器端。效勞器找到這個(gè)時(shí)間端的視頻后,通過網(wǎng)絡(luò)將視頻數(shù)據(jù)發(fā)送到客戶端,用戶可以看該視頻數(shù)據(jù)。如果在被請(qǐng)求的時(shí)間段中,用戶沒有將視頻捕捉模式設(shè)置為實(shí)時(shí)捕捉,或者不是定時(shí)拍照時(shí)間,那么向客戶端發(fā)送一個(gè)錯(cuò)誤信息。數(shù)據(jù)捕捉功能:包括實(shí)時(shí)捕捉功能、觸發(fā)捕捉功能、定時(shí)捕捉功能。用戶可以在終端上訪問效勞器端的功能設(shè)置頁(yè)面,設(shè)置視頻捕捉模式,并將這些視頻數(shù)據(jù)存入效勞器中。自動(dòng)提醒功能:通過在用戶室內(nèi)的大門、窗臺(tái)、廚房和衛(wèi)生間里安裝傳感器,實(shí)現(xiàn)對(duì)非法入室、煤氣泄漏和火災(zāi)監(jiān)控。傳感器捕捉到報(bào)警信號(hào)后將該信號(hào)傳到效勞器。然后效勞器將該信息轉(zhuǎn)換為文本信息發(fā)送到終端用戶。管理功能:用戶可以通過瀏覽登錄效勞器的網(wǎng)頁(yè),設(shè)置需要獲得功能模式和管理個(gè)人信息,如密碼、綁定的號(hào)等。15.3軟件平臺(tái)與開發(fā)工具

15.3.1Linux系統(tǒng)15.3.2Shell腳本15.3.3GCC編譯器15.3.4Make工程管理器156.3.5Socket編程接口從二十世紀(jì)八十年代末開始,陸續(xù)出現(xiàn)了一些嵌入式操作系統(tǒng),比較著名的有Vxwork、Neculeus、pSOS和WindowsCE。但這些專用操作系統(tǒng)都是商業(yè)化產(chǎn)品,其高昂的價(jià)格使許多做低端產(chǎn)品的小公司望而卻步,而且,源代碼封閉性也大大限制了開發(fā)者的積極性。Linux是一種遵循POSIX標(biāo)準(zhǔn)〔POSIX是一套由IEEE即電氣和電子工程學(xué)會(huì)所制定的操作系統(tǒng)界面標(biāo)準(zhǔn)〕的開放源代碼的操作系統(tǒng),與UNIX的風(fēng)格非常相像,同時(shí)具有SystemV和BSD的擴(kuò)展特性,但是Linux系統(tǒng)的核心代碼已經(jīng)全部重新編寫。作為一個(gè)操作系統(tǒng),Linux幾乎滿足當(dāng)今Unix操作系統(tǒng)的所有要求,因此,它具有Unix操作系統(tǒng)的根本特征。15.3.1Linux系統(tǒng)符合POSIX1003.1標(biāo)準(zhǔn):POSIX1003.1標(biāo)準(zhǔn)定義了一個(gè)最小的Unix操作系統(tǒng)接口,任何操作系統(tǒng)只有符合這一標(biāo)準(zhǔn),才有可能運(yùn)行Unix程序。Unix具有豐富的應(yīng)用程序,當(dāng)今絕大多數(shù)操作系統(tǒng)都把滿足POSIX1003.1標(biāo)準(zhǔn)作為實(shí)現(xiàn)目標(biāo),Linux也不例外,它完全支持POSIX1003.1標(biāo)準(zhǔn)。支持多用戶訪問和多任務(wù)編程:Linux是一個(gè)多用戶操作系統(tǒng),它允許多個(gè)用戶同時(shí)訪問系統(tǒng)而不會(huì)造成用戶之間的相互干擾。另外,Linux還支持真正的多用戶編程,一個(gè)用戶可以創(chuàng)立多個(gè)進(jìn)程,并使各個(gè)進(jìn)程協(xié)同工作來完成用戶的需求。采用頁(yè)式存儲(chǔ)管理:頁(yè)式存儲(chǔ)管理使Linux能更有效地利用物理存儲(chǔ)空間,頁(yè)面的換入換出為用戶提供了更大的存儲(chǔ)空間。支持動(dòng)態(tài)鏈接:用戶程序的執(zhí)行往往離不開標(biāo)準(zhǔn)庫(kù)的支持,一般的系統(tǒng)往往采用靜態(tài)鏈接方式,即在裝配階段就已將用戶程序和標(biāo)準(zhǔn)庫(kù)鏈接好,這樣,當(dāng)多個(gè)進(jìn)程運(yùn)行時(shí),可能會(huì)出現(xiàn)庫(kù)代碼在內(nèi)存中有多個(gè)副本而浪費(fèi)存儲(chǔ)空間的情況。Linux支持動(dòng)態(tài)鏈接方式,當(dāng)運(yùn)行時(shí)才進(jìn)行庫(kù)鏈接,如果所需要的庫(kù)已被其它進(jìn)程裝入內(nèi)存,那么不必再裝入,否那么才從硬盤中將庫(kù)調(diào)入。這樣能保證內(nèi)存中的庫(kù)程序代碼是唯一的。支持多種文件系統(tǒng):Linux能支持多種文件系統(tǒng)。目前支持的文件系統(tǒng)有:EXT2、EXT、XIAFS、ISOFS、HPFS、MSDOS、UMSDOS、PROC、NFS、SYSV、MINIX、SMB、UFS、NCP、VFAT、AFFS。Linux最常用的文件系統(tǒng)是EXT2,它的文件名長(zhǎng)度可達(dá)255字符,并且還有許多特有的功能,使它比常規(guī)的Unix文件系統(tǒng)更加平安。支持TCP/IP、SLIP和PPP:在Linux中,用戶可以使用所有的網(wǎng)絡(luò)效勞,如網(wǎng)絡(luò)文件系統(tǒng)、遠(yuǎn)程登錄等。SLIP和PPP能支持串行線上的TCP/IP協(xié)議的使用,這意味著用戶可用一個(gè)高速M(fèi)odem通過線連入Internet網(wǎng)中。Shell其實(shí)是內(nèi)核與用戶之間的一個(gè)接口,如果有一系列經(jīng)常使用的linux命令,可以把它們存儲(chǔ)在一個(gè)文件中。Shell可以讀取這個(gè)文件,并執(zhí)行其中的命令。這樣的文件成為腳本文件。Shell腳本在處理自動(dòng)循環(huán)或大的任務(wù)方面可節(jié)省大量的時(shí)間,且功能強(qiáng)大。如果有處理一個(gè)任務(wù)的命令清單,不得不一個(gè)一個(gè)敲進(jìn)去,然后觀察輸出結(jié)果,再?zèng)Q定它是否正確,如果正確,再繼續(xù)下一個(gè)任務(wù),否那么再回到清單一步步觀察。一個(gè)任務(wù)可能是將文件分類、向文件插入文本、遷移文件、從文件中刪除行、去除系統(tǒng)過期文件、以及系統(tǒng)一般的管理維護(hù)工作等等。創(chuàng)立一個(gè)腳本,在使用一系列系統(tǒng)命令的同時(shí),可以使用變量、條件、算術(shù)和循環(huán)快速創(chuàng)立腳本以完成相應(yīng)工作。這比在命令行下一個(gè)個(gè)敲入要節(jié)省大量的工作時(shí)間。15.3.2Shell腳本Linux系統(tǒng)下的GCC〔GNUCCompiler〕是GNU推出的功能強(qiáng)大、性能優(yōu)越的多平臺(tái)編譯器,是GNU的代表作品之一。GCC是可以在多種硬體平臺(tái)上編譯出可執(zhí)行程序的超級(jí)編譯器,其執(zhí)行效率與一般的編譯器相比平均效率要高20%~30%。GCC編譯器能將C、C++語(yǔ)言源程序和目標(biāo)程序編譯、連接成可執(zhí)行文件,如果沒有給出可執(zhí)行文件的名字,GCC將生成一個(gè)名為a.out的文件。在Linux系統(tǒng)中,可執(zhí)行文件沒有統(tǒng)一的后綴,系統(tǒng)從文件的屬性來區(qū)分可執(zhí)行文件和不可執(zhí)行文件。15.3.3GCC編譯器下面來介紹GCC所遵循的局部約定規(guī)那么。.c為后綴的文件,C語(yǔ)言源代碼文件;.a為后綴的文件,是由目標(biāo)文件構(gòu)成的檔案庫(kù)文件;.C,.cc或.cxx為后綴的文件,是C++源代碼文件;.h為后綴的文件,是程序所包含的頭文件;.i為后綴的文件,是已經(jīng)預(yù)處理過的C源代碼文件;.ii為后綴的文件,是已經(jīng)預(yù)處理過的C++源代碼文件;.m為后綴的文件,是Objective-C源代碼文件;.o為后綴的文件,是編譯后的目標(biāo)文件;.s為后綴的文件,是匯編語(yǔ)言源代碼文件;.S為后綴的文件,是經(jīng)過預(yù)編譯的匯編語(yǔ)言源代碼文件。命令GCC首先調(diào)用cpp進(jìn)行預(yù)處理,在預(yù)處理過程中,對(duì)源代碼文件中的文件包含(include)、預(yù)編譯語(yǔ)句(如宏定義define等)進(jìn)行分析。接著進(jìn)行編譯,這個(gè)階段根據(jù)輸入文件生成以.o為后綴的目標(biāo)文件。匯編過程是針對(duì)匯編語(yǔ)言的步驟,調(diào)用as進(jìn)行工作,一般來講,.S為后綴的匯編語(yǔ)言源代碼文件和匯編、.s為后綴的匯編語(yǔ)言文件經(jīng)過預(yù)編譯和匯編之后都生成以.o為后綴的目標(biāo)文件。當(dāng)所有的目標(biāo)文件都生成之后,GCC就調(diào)用ld來完成最后的關(guān)鍵性工作,這個(gè)階段就是連接。在連接階段,所有的目標(biāo)文件被安排在可執(zhí)行程序中的恰當(dāng)?shù)奈恢茫瑫r(shí),該程序所調(diào)用到的庫(kù)函數(shù)也從各自所在的檔案庫(kù)中連到適宜的地方。當(dāng)使用GNU中的編譯語(yǔ)言編程開發(fā)應(yīng)用時(shí),很多時(shí)候要使用Make管理工程。利用Make工具,可以將大型的開發(fā)工程分解成為多個(gè)更易于管理的模塊,對(duì)于一個(gè)包括幾百個(gè)源文件的應(yīng)用程序而言,使用Make工具和Makefile文件就可以清晰地理順各個(gè)源文件之間的關(guān)系。Make工具可以自動(dòng)完成編譯工作,并且只對(duì)程序員在上次編譯后修改正的局部進(jìn)行編譯。因此,有效地利用Make工具可以大大提高工程開發(fā)的效率。15.3.4Make工程管理器Make工具最根本的功能是調(diào)用Makefile文件,通過Makefile文件來描述源程序之間的相互依賴關(guān)系并自動(dòng)維護(hù)編譯工作。當(dāng)然,Makefile文件需要按照某種語(yǔ)法進(jìn)行編寫,需要說明如何編譯各個(gè)源文件并連接生成可執(zhí)行文件,以及定義源文件之間的依賴關(guān)系。Makefile文件是許多編譯器〔包括Windows下的編譯器〕維護(hù)編譯信息的常用方法,在集成開發(fā)環(huán)境中,用戶可以通過友好的界面修改Makefile文件。Makefile這個(gè)文件告訴Make以何種方式編譯源代碼和鏈接程序。典型地,可執(zhí)行文件可由一些.o文件按照一定的順序生成或者更新。如果在你的工程中已經(jīng)存在一個(gè)或者多個(gè)正確的Makefile。當(dāng)對(duì)工程中的假設(shè)干源文件修改以后,需要根據(jù)修改來更新可執(zhí)行文件或者庫(kù)文件,正如前面提到的只需要在Shell下執(zhí)行“Make”,Make會(huì)自動(dòng)根據(jù)修改情況完成源文件的對(duì)應(yīng).o文件的更新、庫(kù)文件的更新、最終的可執(zhí)行程序的更新。Make通過比較對(duì)應(yīng)文件〔規(guī)那么的目標(biāo)和依賴〕的最后修改時(shí)間,來決定哪些文件需要更新、那些文件不需要更新。對(duì)需要更新的文件Make就執(zhí)行數(shù)據(jù)庫(kù)中所記錄的相應(yīng)命令〔在Make讀取Makefile以后會(huì)建立一個(gè)編譯過程的描述數(shù)據(jù)庫(kù)。此數(shù)據(jù)庫(kù)中記錄了所有各個(gè)文件之間的相互關(guān)系,以及它們的關(guān)系描述〕來重建它,對(duì)于不需要重建的文件Make什么也不做。而且可以通過Make的命令行選項(xiàng)來指定需要重新編譯的文件。

Socket接口是TCP/IP網(wǎng)絡(luò)的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們來開發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué)Internet上的TCP/IP網(wǎng)絡(luò)編程,必須理解Socket接口。15.3.5Socket編程接口Socket接口設(shè)計(jì)者最先是將接口放在Unix操作系統(tǒng)里面的。假設(shè)了解Unix系統(tǒng)的輸入和輸出的話,就很輕易了解Socket了。網(wǎng)絡(luò)的Socket數(shù)據(jù)傳輸是一種非凡的I/O,Socket也是一種文件描述符。Socket也具有一個(gè)類似于翻開文件的函數(shù)調(diào)用Socket,該函數(shù)返回一個(gè)整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該Socket實(shí)現(xiàn)的。常用的Socket類型有兩種:流式Socket〔SOCK_STREAM〕和數(shù)據(jù)報(bào)式Socket〔SOCK_DGRAM〕。流式是一種面向連接的Socket,針對(duì)于面向連接的TCP效勞應(yīng)用;數(shù)據(jù)報(bào)式Socket是一種無(wú)連接的Socket,對(duì)應(yīng)于無(wú)連接的UDP效勞應(yīng)用。15.4基于嵌入式平臺(tái)的網(wǎng)絡(luò)效勞器本節(jié)主要分析并實(shí)現(xiàn)了基于嵌入式平臺(tái)的WEB效勞器、視頻效勞器以及SSH效勞器的構(gòu)建。其中使用嵌入式WEB效勞器可以方便的通過基于JAVA的瀏覽器進(jìn)行實(shí)時(shí)的視頻監(jiān)控。嵌入式視頻效勞器可以對(duì)視頻進(jìn)行采集和傳輸。而嵌入式SSH效勞器保障了平安有效地登陸到開發(fā)板上進(jìn)行實(shí)時(shí)的控制和維護(hù)。由于嵌入式設(shè)備資源一般都比較有限,并且也不需要能同時(shí)處理很多用戶的請(qǐng)求,因此不會(huì)使用Linux下最常用的如Apache等效勞器,而需要使用一些專門為嵌入式設(shè)備設(shè)計(jì)的Web效勞器,這些Web效勞器在存儲(chǔ)空間和運(yùn)行時(shí)所占有的內(nèi)存空間上都會(huì)非常適合于嵌入式應(yīng)用場(chǎng)合。常見的嵌入式Web效勞器主要有:Ligd、Td、Sd和Boa等。15.4.1嵌入式WEB效勞器本文使用的是開源的Web效勞器Boa。Boa是一個(gè)非常小巧的Web效勞器,可執(zhí)行代碼只有約60KB。它是一個(gè)單任務(wù)Web效勞器,只能依次完成用戶的請(qǐng)求,而不會(huì)fork出新的進(jìn)程來處理并發(fā)連接請(qǐng)求。但Boa支持CGI,能夠?yàn)镃GI程序fork出一個(gè)進(jìn)程來執(zhí)行。Boa的設(shè)計(jì)目標(biāo)是速度和平安,在其站點(diǎn)公布的性能測(cè)試中,Boa的性能要好于Apache效勞器。1.首先獲得boa的源代碼://2.進(jìn)入boa源碼目錄,執(zhí)行configure進(jìn)行配置,并指定交叉編譯./configure--host=arm-linux3.然后執(zhí)行make生成boa可執(zhí)行程序4.最后通過arm-linux-strip去掉boa調(diào)試信息,以減少程序體積5.修改examples目錄下的boa.confPort80UserrootGrouprootErrorLog/dev/consoleAccessLog/dev/nullServerNamehrbeu06wsDocumentRoot/wwwDirectoryIndexindex.htmlScriptAlias/cgi-bin//www/cgi-bin/KeepAliveMax1000KeepAliveTimeout10MimeTypes/etc/mime.typesDefaultTypetext/plain6.編寫B(tài)oa的啟動(dòng)腳本。#!/bin/sh####BEGININITINFO#Provides:boa#Required-Start:$local_fs$remote_fs$network#Required-Stop:$local_fs$remote_fs$network#Default-Start:2345#Default-Stop:016#Short-Description:Boa:lightweightandhighperformancewebserver###ENDINITINFOPATH=/sbin:/bin:/usr/sbin:/usr/binDAEMON=/usr/sbin/boaNAME=boaDESC="HTTPserver"test-x$DAEMON||exit0set-ecase"$1"instart) echo-n"Starting$DESC:$NAME" start-stop-daemon--start--quiet--exec$DAEMON echo"." ;;stop) echo-n"Stopping$DESC:$NAME" start-stop-daemon--stop--quiet--oknodo--exec$DAEMON echo"." ;;restart) echo-n"Restarting$DESC:$NAME..." start-stop-daemon--stop--signalHUP--quiet--oknodo--exec$DAEMON echo"done.";;reload) # # Ifthedaemoncanreloaditsconfigfilesonthefly # forexamplebysendingitSIGHUP,doithere. # # Ifthedaemonrespondstochangesinitsconfigfile # directlyanyway,makethisado-nothingentry. # echo-n"Reloading$DESCconfiguration..." start-stop-daemon--stop--signal1--quiet--oknodo--exec$DAEMON echo"done.";;*) N=/etc/rc.d/init.d/$NAME #echo"Usage:$N{start|stop|restart|reload|force-reload}">&2 echo"Usage:$N{start|stop|restart|reload}">&2 exit1 ;;esacexit0 圖15-3視頻效勞器流程圖15.4.2嵌入式視頻效勞器視頻采集局部主要采用的是Linux中的視頻子系統(tǒng)Video4Linux。Video4Linux是Linux內(nèi)核里支持視頻設(shè)備的一組API,視頻應(yīng)用程序通過標(biāo)準(zhǔn)的系統(tǒng)調(diào)用就可操縱各種不同的視頻捕獲設(shè)備。Video4Linux向虛擬文件系統(tǒng)注冊(cè)視頻設(shè)備文件,應(yīng)用程序通過操縱視頻設(shè)備文件來實(shí)現(xiàn)對(duì)視頻設(shè)備的訪問。主要有兩種方法:內(nèi)存映射和直接從設(shè)備讀取。本文中使用的是Gspca/Spca5xx攝像頭驅(qū)動(dòng)程序。通過驅(qū)動(dòng)程序本身就可以實(shí)現(xiàn)對(duì)Z-Star301攝像頭采集到的圖像進(jìn)行硬件壓縮,直接輸出JPEG的二進(jìn)制位流,從而減輕了視頻效勞器的壓力。無(wú)線網(wǎng)絡(luò)視頻傳輸局部采用LinuxSocket和多線程技術(shù)。通過無(wú)線網(wǎng)卡將采集到的一幀幀的JPEG二進(jìn)制位流發(fā)送到遠(yuǎn)程客戶端。本文中使用的是開源的針對(duì)嵌入式設(shè)計(jì)的網(wǎng)絡(luò)視頻效勞器Servfox,可以從這里獲取。1.首先解壓縮2.指定Makefile文件cpMakefile.armMakefile3.執(zhí)行make進(jìn)行編譯,然后通過arm-linux-strip去掉servfox調(diào)試信息以減少程序體積makearm-linux-stripservfox4.編寫servfox的啟動(dòng)腳本。#!/bin/sh####BEGININITINFO#Provides:servfox#Required-Start:#Required-Stop:#Default-Start:2345#Default-Stop:016#Short-Description:Servfox:embeddedwebcamserver###ENDINITINFOPATH=/sbin:/bin:/usr/sbin:/usr/binDAEMON=/usr/sbin/servfoxNAME=servfoxDESC="Webcamserver"test-x$DAEMON||exit0set-ecase"$1"instart) echo-n"Starting$DESC:$NAME" start-stop-daemon--start--quiet--exec$DAEMON---d/dev/video0-g-s320x240-w7070>>/var/log/messages2>&1& echo"." ;;stop) echo-n"Stopping$DESC:$NAME" start-stop-daemon--stop--quiet--oknodo--exec$DAEMON echo"." ;;

restart) echo-n"Restarting$DESC:$NAME..." start-stop-daemon--stop--signalHUP--quiet--oknodo--exec$DAEMON echo"done.";;reload) # # Ifthedaemoncanreloaditsconfigfilesonthefly # forexamplebysendingitSIGHUP,doithere. # # Ifthedaemonrespondstochangesinitsconfigfile # directlyanyway,makethisado-nothingentry. # echo-n"Reloading$DESCconfiguration..." start-stop-daemon--stop--signal1--quiet--oknodo--exec$DAEMON echo"done.";;*) N=/etc/rc.d/init.d/$NAME #echo"Usage:$N{start|stop|restart|reload|force-reload}">&2 echo"Usage:$N{start|stop|restart|reload}">&2 exit1 ;;esacexit0 SSH為SecureShell的縮寫,由IETF的網(wǎng)絡(luò)工作小組所制定。SSH為建立在應(yīng)用層和傳輸層根底上的平安協(xié)議。傳統(tǒng)的網(wǎng)絡(luò)效勞程序,如Ftp和Telnet其本質(zhì)上都是不平安的。因?yàn)樗鼈冊(cè)诰W(wǎng)絡(luò)上用明文傳送數(shù)據(jù)、用戶帳號(hào)和用戶口令,很容易受到中間人〔man-in-the-middle〕攻擊方式的攻擊。就是存在另一個(gè)人或者一臺(tái)機(jī)器冒充真正的效勞器接收用戶傳給效勞器的數(shù)據(jù),然后再冒充用戶把數(shù)據(jù)傳給真正的效勞器。而SSH是目前較可靠,專為遠(yuǎn)程登錄會(huì)話和其他網(wǎng)絡(luò)效勞提供平安性的協(xié)議。利用SSH協(xié)議可以有效防止遠(yuǎn)程管理過程中的信息泄露問題。通過SSH可以對(duì)所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,也能夠防止DNS欺騙和IP欺騙。SSH之另一項(xiàng)優(yōu)點(diǎn)為其傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,所以可以加快傳輸?shù)乃俣?。SSH有很多功能,它既可以代替Telnet,又可以為Ftp、POP、甚至為PPP提供一個(gè)平安的通道。15.4.3嵌入式SSH效勞器本文使用的是基于MIT-style協(xié)議的開源軟件Dropbear。Dropbear是一個(gè)輕量級(jí)的、相對(duì)較小的SSH2效勞器和客戶端。它運(yùn)行在一個(gè)不同的基于POSIX的平臺(tái),尤其適合用于嵌入式系統(tǒng)。1.首先移植zlib由于Dropbear依賴于zlib的庫(kù),所以這里先要移植zlib。首先,執(zhí)行configure進(jìn)行配置,并指定安裝路徑./configure\修改Makefile,指定交叉編譯CC=arm-linux-gccLDSHARED=$(CC)-shared-Wl,-soname,,--version-script,zlib.mapCPP=arm-linux-gcc-EAR=arm-linux-arrcRANLIB=arm-linux-ranlib最后執(zhí)行make&&makeinstall,將zlib庫(kù)安裝到指定的路徑下面。2.接下來獲取Dropbear的源代碼://。通過configure進(jìn)行配置,指定交叉編譯./configure--host=arm-linux3.執(zhí)行make,通過arm-linux-strip去掉dropbear調(diào)試信息,以減少程序體積arm-linux-strip{dropbear,dropbearconvert,dropbearkey}4.將dropbear和dropbearkey復(fù)制到usr/sbin目錄,然后建立配置目錄etc/dropbear。最后利用dropbearkey來生成密鑰dropbearkey-trsa-fetc/dropbear/dropbear_rsa_host_keydropbearkey-tdss-fetc/dropbear/dropbear_dss_host_key5.使用ssh-keygen生成基于RSA加密算法的公鑰和私鑰,增強(qiáng)平安性6.編寫dropbear的啟動(dòng)腳本。#!/bin/sh###BEGININITINFO#Provides:dropbear#Required-Start:$remote_fs$syslog#Required-Stop:$remote_fs$syslog#Default-Start:2345#Default-Stop:016###ENDINITINFO###PATH=/sbin:/bin:/usr/sbin:/usr/binDAEMON=/usr/sbin/dropbearNAME=dropbearDESC="DropbearSSHserver"DROPBEAR_PORT=22DROPBEAR_EXTRA_ARGS=NO_START=0set-ecancel(){echo"$1">&2;exit0;};test!-r/etc/default/dropbear||./etc/default/dropbeartest-x"$DAEMON"||cancel"$DAEMONdoesnotexistorisnotexecutable."test!-x/usr/sbin/update-service||!update-service--checkdropbear||cancel'Thedropbearserviceiscontrolledthroughrunit,usethesv(8)program'test-z"$DROPBEAR_BANNER"||\DROPBEAR_EXTRA_ARGS="$DROPBEAR_EXTRA_ARGS-b$DROPBEAR_BANNER"test-n"$DROPBEAR_RSAKEY"||\DROPBEAR_RSAKEY="/etc/dropbear/dropbear_rsa_host_key"test-n"$DROPBEAR_DSSKEY"||\DROPBEAR_DSSKEY="/etc/dropbear/dropbear_dss_host_key"test-n"$DROPBEAR_RECEIVE_WINDOW"||\DROPBEAR_RECEIVE_WINDOW="65536"case"$1"instart) test"$NO_START"="0"||cancel'NO_STARTisnotsettozero.' echo-n"Starting$DESC:" start-stop-daemon--start--quiet--pidfile/var/run/"$NAME".pid\ --exec"$DAEMON"---d"$DROPBEAR_DSSKEY"-r"$DROPBEAR_RSAKEY"\ -p"$DROPBEAR_PORT"-W"$DROPBEAR_RECEIVE_WINDOW"$DROPBEAR_EXTRA_ARGS echo"$NAME." ;;stop) echo-n"Stopping$DESC:" start-stop-daemon--stop--quiet--oknodo--pidfile/var/run/"$NAME".pid echo"$NAME." ;;restart|force-reload) test"$NO_START"="0"||cancel'NO_STARTisnotsettozero.' echo-n"Restarting$DESC:" start-stop-daemon--stop--quiet--oknodo--pidfile/var/run/"$NAME".pid sleep1 start-stop-daemon--start--quiet--pidfile/var/run/"$NAME".pid\ --exec"$DAEMON"---d"$DROPBEAR_DSSKEY"-r"$DROPBEAR_RSAKEY"\ -p"$DROPBEAR_PORT"-W"$DROPBEAR_RECEIVE_WINDOW"$DROPBEAR_EXTRA_ARGS echo"$NAME." ;;*) N=/etc/init.d/$NAME echo"Usage:$N{start|stop|restart|force-reload}">&2 exit1 ;;esacexit015.5視頻監(jiān)控系統(tǒng)的實(shí)現(xiàn)

嵌入式遠(yuǎn)程視頻監(jiān)控系統(tǒng)客戶端主要分為兩種方式來實(shí)現(xiàn)。一種是采用基于WEB效勞器的B/S〔Browser/Server〕效勞機(jī)制。另一種是采用基于Windows平臺(tái)客戶端C/S〔Client/Server〕的效勞機(jī)制。B/S效勞機(jī)制是伴隨著Internet技術(shù)的興起而產(chǎn)生的?,F(xiàn)如今Java技術(shù)廣泛的應(yīng)用于互聯(lián)網(wǎng),本文使用的是基于Java控件來實(shí)時(shí)的顯示視頻信息。其主要特點(diǎn)如下:視頻監(jiān)控系統(tǒng)部署在WEB效勞器上,遠(yuǎn)程客戶端不需要人工安裝軟件,用戶只要通過瀏覽器就可以直接訪問,簡(jiǎn)單方便。維護(hù)和升級(jí)方式簡(jiǎn)單。無(wú)論用戶的規(guī)模有多大,有多少分支機(jī)構(gòu)都不會(huì)增加任何維護(hù)升級(jí)的工作量,所有的操作只需要針對(duì)效勞器進(jìn)行,節(jié)省人力和物力。B/S效勞機(jī)制通過一種集中處理的模式,大大降低了對(duì)遠(yuǎn)程客戶端的軟硬件的需求。只要遠(yuǎn)程客戶端PC機(jī)配置有瀏覽器并且能夠上網(wǎng)進(jìn)行監(jiān)控。15.5.1基于Java的瀏覽器實(shí)現(xiàn)B/S效勞機(jī)制通過一種集中處理的模式,大大降低了對(duì)遠(yuǎn)程客戶端的軟硬件的需求。只要遠(yuǎn)程客戶端PC機(jī)配置有瀏覽器并且能夠上網(wǎng)進(jìn)行監(jiān)控。將PC平臺(tái)的spcaview中的-java-applet目錄復(fù)制到嵌入式系統(tǒng)根目錄下,并且重命名為www,其中包含了Java的控件。將其中的index-sample.html稍作修改并且重命名為index.html。啟動(dòng)嵌入式WEB效勞器和嵌入式視頻效勞器就可以了?;贘ava的顯示流程圖如圖15-4所示。圖15-4基于Java的顯示流程圖這里,嵌入式WEB效勞器就是我們的效勞端??梢允褂脽o(wú)線網(wǎng)絡(luò)通過瀏覽器登錄到遠(yuǎn)程WEB效勞器上,就可以啟用Java控件來進(jìn)行實(shí)時(shí)的流媒體顯示了。實(shí)驗(yàn)現(xiàn)象如圖15-5和圖15-6所示。圖15-5無(wú)線網(wǎng)絡(luò)連接狀態(tài)圖15-6基于Java的瀏覽器實(shí)現(xiàn)下面要介紹的是在Windows平臺(tái)下,基于無(wú)線網(wǎng)絡(luò)的遠(yuǎn)程視頻監(jiān)控的客戶端的實(shí)現(xiàn)。這里,主要是參考了spcaview的實(shí)現(xiàn)機(jī)制,對(duì)網(wǎng)絡(luò)視頻流進(jìn)行傳輸,并且調(diào)用Windows本地平臺(tái)的SDL庫(kù)來進(jìn)行顯示。SDL是SimpleDirectMediaLayer〔簡(jiǎn)易直控媒體層〕的縮寫。它是一個(gè)跨平臺(tái)的多媒體庫(kù),以用于直接控制底層的多媒體硬件的接口。這些多媒體功能包括了音頻、鍵盤和鼠標(biāo)〔事件〕、游戲搖桿等。當(dāng)然,最為重要的是提供了2D圖形幀緩沖〔framebuffer〕的接口,以及為OpenGL與各種操作系統(tǒng)之間提供了統(tǒng)一的標(biāo)準(zhǔn)接口以實(shí)現(xiàn)3D圖形。15.5.2Windows平臺(tái)下客戶端的分析和實(shí)現(xiàn)SDL支持主流的操作系統(tǒng),包括Windows和Linux。它所支持的其他平臺(tái)〔BeOS,MacOS,MacOSX,F(xiàn)reeBSD,NetBSD,OpenBSD,BSD/OS,Solaris,IRIX,QNX〕。雖然SDL時(shí)常被比較為跨平臺(tái)的DirectX,然而事實(shí)上SDL是定位成以精簡(jiǎn)的方式來完成根底的功能,它大幅度簡(jiǎn)化了控制圖像、聲音、輸出入等工作所需撰寫的代碼。這里分析一下程序的工作流程,如圖15-7所示。圖15-7程序的工作流程圖1.首先,初始化WinsockWORDwVersion=MAKEWORD(2,0);WSADATAwsData;if(WSAStartup(wVersion,&wsData)!=0){printf("Initializews2_32.dllError!\n");exit(0);}2.接下來,初始化SDLif((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER)==-1)){printf("CouldnotinitializeSDL:%s.\n",SDL_GetError());exit(-1);}videoOk=1;atexit(SDL_Quit);3.建立套接字if((server_handle=socket(AF_INET,SOCK_STREAM,0))==-1)exit_fatal("ErroropeningsocketAbort!");綁定端口if(bind(server_handle,(structsockaddr*)&servadr,sizeof(structsockaddr))==-1)exit_fatal("

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論