吳云軒
(黎明職業(yè)大學(xué) 信息與電子工程學(xué)院,福建 泉州 36200)
嵌入式Web服務(wù)器在軌道拍攝系統(tǒng)的實(shí)現(xiàn)
吳云軒
(黎明職業(yè)大學(xué) 信息與電子工程學(xué)院,福建 泉州 36200)
給出了一種在ARM9硬件平臺(tái)及Linux操作系統(tǒng)下,采用CGI和Socket技術(shù)構(gòu)建嵌入式Web服務(wù)器的設(shè)計(jì)方案。并以該方案在實(shí)現(xiàn)軌道拍攝系統(tǒng)的遠(yuǎn)程控制為例,介紹了軌道攝影拍攝系統(tǒng)的軟硬件結(jié)構(gòu),嵌入式Linux下的進(jìn)程間通信,以及基于BOA的嵌入式Web服務(wù)器的實(shí)現(xiàn)過(guò)程,給出了一種通過(guò)瀏覽器與嵌入式設(shè)備進(jìn)行遠(yuǎn)程控制的有效方法。
嵌入式系統(tǒng);BOA服務(wù)器;軌道拍攝
數(shù)字和網(wǎng)絡(luò)技術(shù)的不斷發(fā)展和普及,使人們獲得外界信息的方式多樣化,信息的傳播載體和采集方式也變得更加豐富。軌道拍攝是指延時(shí)攝影、定速矢量平移拍攝以及簡(jiǎn)單的一維軌跡合成拍攝等新型的數(shù)字拍攝技術(shù),是宣傳、記錄片中常用拍攝手法,以取代視頻播放的平靜和照片內(nèi)容的呆板。例如日出日落、星云流動(dòng)、植物生長(zhǎng)過(guò)程等需要長(zhǎng)時(shí)間拍攝等待,再將變化的過(guò)程濃縮到幾秒的時(shí)間內(nèi),呈現(xiàn)出諸如風(fēng)云變幻或斗轉(zhuǎn)星移等肉眼無(wú)法觀(guān)察的景象,給觀(guān)眾一種震撼的視覺(jué)體驗(yàn)。
為實(shí)現(xiàn)長(zhǎng)時(shí)間的拍攝中的無(wú)人值守,以及提升抗震性能和軌道移動(dòng)的平滑性,本文在軌道拍攝系統(tǒng)中運(yùn)用了嵌入式Web服務(wù)器技術(shù),采用B/S結(jié)構(gòu)進(jìn)行程序設(shè)計(jì),即在嵌入式開(kāi)發(fā)板上運(yùn)行一個(gè)能夠生成動(dòng)態(tài)頁(yè)面的Web服務(wù)器,支持腳本和CGI功能。開(kāi)發(fā)板通過(guò)串行口與軌道拍攝系統(tǒng)進(jìn)行連接控制,客戶(hù)端通過(guò)Web瀏覽器就可以對(duì)軌道拍攝系統(tǒng)進(jìn)行管理和監(jiān)控,設(shè)置拍攝的參數(shù),控制軌道拍攝系統(tǒng)。
在軌道拍攝系統(tǒng)中運(yùn)用嵌入式Web服務(wù)器技術(shù)的總體思想是實(shí)現(xiàn)設(shè)備的網(wǎng)絡(luò)化,通過(guò)普通的瀏覽器就可以對(duì)遠(yuǎn)端的拍攝現(xiàn)場(chǎng)進(jìn)行控制。此外,由于瀏覽器所在的客戶(hù)端平臺(tái)與服務(wù)器所在的平臺(tái)無(wú)關(guān),客戶(hù)端可以是不同的種操作系統(tǒng)(如android、IOS或windows等)的終端設(shè)備,實(shí)現(xiàn)了跨平臺(tái)的控制。
圖1 系統(tǒng)設(shè)計(jì)框圖
系統(tǒng)是基于B/S結(jié)構(gòu)設(shè)計(jì)的,包含客戶(hù)瀏覽器端和嵌入式Web服務(wù)器端兩大部分,相互間通過(guò)以太網(wǎng)連接通信,整體設(shè)計(jì)框圖如圖1所示。客戶(hù)端可以是筆記本、IPAD等跨平臺(tái)的便攜設(shè)備,通過(guò)瀏覽器采用HTTP和TCP/IP協(xié)議訪(fǎng)問(wèn)服務(wù)器。服務(wù)器端采用ARM9和嵌入式Linux技術(shù),移植了一個(gè)嵌入式Web服務(wù)器,服務(wù)器通過(guò)環(huán)境變量與CGI程序進(jìn)行通信,實(shí)現(xiàn)對(duì)軌道拍攝模塊的控制。
CGI(通用網(wǎng)關(guān)接口)是一個(gè)Web服務(wù)器主機(jī)提供信息服務(wù)的標(biāo)準(zhǔn)接口[1],Web服務(wù)器可以通過(guò)這個(gè)標(biāo)準(zhǔn)接口來(lái)執(zhí)行應(yīng)用程序,并將應(yīng)用程序的各種形式的輸出傳送到Web瀏覽器。當(dāng)來(lái)自客戶(hù)端瀏覽器的連接請(qǐng)求被服務(wù)器端監(jiān)聽(tīng)到時(shí),服務(wù)器會(huì)為瀏覽器創(chuàng)建一個(gè)子進(jìn)程,提供連接服務(wù)。根據(jù)不同請(qǐng)求類(lèi)型,服務(wù)器返回HTML文件或者通過(guò)CGI程序接口調(diào)用外部程序。因此,CGI接口的功能就是在HTML文檔與Web服務(wù)器之間傳遞信息,借助CGI用戶(hù)可以編寫(xiě)用于與服務(wù)器相交互的程序。當(dāng)用戶(hù)通過(guò)網(wǎng)頁(yè)向客戶(hù)端瀏覽器提交一個(gè)HTML表單時(shí),瀏覽器以名字/值對(duì)的方式對(duì)HTML表單數(shù)據(jù)進(jìn)行編碼,通過(guò)以太網(wǎng)發(fā)送給Web服務(wù)器,服務(wù)器再將數(shù)據(jù)交給CGI程序執(zhí)行。CGI程序通過(guò)調(diào)用子程序控制軌道拍攝模塊,程序運(yùn)行結(jié)束后,通過(guò)標(biāo)準(zhǔn)輸出把數(shù)據(jù)以HTML形式送到服務(wù)器再到用戶(hù)端,HTML文件將會(huì)被用戶(hù)端的瀏覽器解釋?zhuān)⒔Y(jié)果顯示在瀏覽器上。
本系統(tǒng)采用基于S3C2410微處理器的開(kāi)發(fā)板FS2410DEV,其具體組成如圖2所示。S3C24lO是一款基于ARM92OT內(nèi)核的32位RISC嵌入式處理器[2]。該開(kāi)發(fā)板除了微處理器和存儲(chǔ)設(shè)備外,還擴(kuò)展RJ-45網(wǎng)卡、UART接口、按鍵等設(shè)備接口,引出了CPU的一些通用I/O引腳,可連接外圍的器件模塊。在進(jìn)行系統(tǒng)應(yīng)用程序開(kāi)發(fā)前,還需要在內(nèi)核中移植和添加相關(guān)硬件的驅(qū)動(dòng)程序。
圖2 系統(tǒng)硬件結(jié)構(gòu)框圖
在拍攝過(guò)程中需保證相機(jī)在自然條件下能穩(wěn)定、慢速平滑的移動(dòng),這是拍攝成功的關(guān)鍵。因此,攝影軌道型材采用碳素型材,具有抗震性好、材質(zhì)輕、便于攜帶。相機(jī)通過(guò)云臺(tái)固定在傳動(dòng)皮帶上,使用步進(jìn)電機(jī)傳動(dòng),以得到較高的重復(fù)定位精度。利用模塊化設(shè)計(jì)方法對(duì)控制模塊進(jìn)行編程,實(shí)現(xiàn)一些基本的軌道控制動(dòng)作以及移動(dòng)軌跡的記錄等,再通過(guò)串行口與主控制器進(jìn)行通信,實(shí)現(xiàn)遠(yuǎn)程控制。相機(jī)的拍攝動(dòng)作采用2.4G無(wú)線(xiàn)調(diào)頻遙控器控制,遙控觸發(fā)模塊連接到主控制器的通用I/O口,由主控制器控制。
在系統(tǒng)硬件平臺(tái)連接完成后,首先要移植基于具體硬件的嵌入式Linux操作系統(tǒng)到系統(tǒng)平臺(tái)中,然后編寫(xiě)和移植基于該操作系統(tǒng)I/O接口驅(qū)動(dòng)、網(wǎng)卡驅(qū)動(dòng)等各種驅(qū)動(dòng)程序,并把這些程序交叉編譯到系統(tǒng)平臺(tái)中,編寫(xiě)腳本文件,在系統(tǒng)啟動(dòng)后自動(dòng)加載相關(guān)的進(jìn)程。系統(tǒng)應(yīng)用軟件的整體結(jié)構(gòu)如圖3,在加載完驅(qū)動(dòng)程序后,操作系統(tǒng)將控制權(quán)交由系統(tǒng)監(jiān)控進(jìn)程和Web服務(wù)器守護(hù)進(jìn)程,兩個(gè)進(jìn)程間的通信采用消息隊(duì)列的方式實(shí)現(xiàn)。
圖3 系統(tǒng)軟件結(jié)構(gòu)框圖
服務(wù)器進(jìn)程啟動(dòng)后,首先在服務(wù)器端建立socket,然后綁定本地端口,接著開(kāi)始偵聽(tīng)端口,等待用戶(hù)瀏覽器的連接請(qǐng)求。當(dāng)連接建立后,服務(wù)器根據(jù)HTTP協(xié)議分析瀏覽器的請(qǐng)求,并作相應(yīng)的處理。在一次TCP連接中,Web服務(wù)器只能處理一個(gè)來(lái)自客戶(hù)端的HTTP請(qǐng)求,處理請(qǐng)求后服務(wù)器會(huì)斷開(kāi)當(dāng)前連接,進(jìn)入循環(huán)等待下一次連接請(qǐng)求。
本設(shè)計(jì)中CGI實(shí)現(xiàn)的功能是簡(jiǎn)單的用戶(hù)身份驗(yàn)證,以及通過(guò)系統(tǒng)監(jiān)控進(jìn)程實(shí)現(xiàn)對(duì)軌道拍攝模塊的控制和狀態(tài)回傳,兩個(gè)進(jìn)程間的通信采用消息隊(duì)列的方式實(shí)現(xiàn)。消息隊(duì)列是消息的鏈接表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí),msgget用于創(chuàng)建一個(gè)新的消息隊(duì)列或打開(kāi)一個(gè)現(xiàn)有的消息隊(duì)列,若執(zhí)行成功,msgget返回非負(fù)隊(duì)列ID,該值就可被用于消息的添加和接收函數(shù)[3]。msgsnd將新消息添加到隊(duì)尾,msgrcv用于從隊(duì)列中取消息。本設(shè)計(jì)中,CGI和系統(tǒng)監(jiān)控進(jìn)程使用共有的IPC key創(chuàng)建消息隊(duì)列,定義整型變量msgid存放msgget的返回值,相應(yīng)的代碼為:msgid=msgget(KEY_MSG,IPC_CREAT|0666);每個(gè)消息又包含了消息類(lèi)型和消息數(shù)據(jù),消息的結(jié)構(gòu)定義為:
消息類(lèi)型使我們可以指定想要哪一種消息,在發(fā)送消息前先設(shè)置消息類(lèi)型的值,接收消息時(shí)可以根據(jù)該值區(qū)分CGI或系統(tǒng)監(jiān)控進(jìn)程發(fā)送的消息,buf1存放發(fā)送的消息,buf2用于接收消息。用戶(hù)經(jīng)網(wǎng)頁(yè)瀏覽器訪(fǎng)問(wèn)Web服務(wù)器,通過(guò)CGI程序發(fā)出控制命令,并生成存放控制命令代碼的消息隊(duì)列。系統(tǒng)監(jiān)控進(jìn)程接收到消息后,經(jīng)過(guò)串口將控制命令發(fā)送給軌道拍攝控制模塊。軌道拍攝模塊執(zhí)行后將設(shè)備狀態(tài)代碼回傳給系統(tǒng)監(jiān)控進(jìn)程,系統(tǒng)監(jiān)控進(jìn)程將狀態(tài)代碼發(fā)送到消息隊(duì)列,CGI程序接收到消息后,將狀態(tài)代碼的信息轉(zhuǎn)換為HTML代碼返回瀏覽器端。
系統(tǒng)選用Boa作為嵌入式Web服務(wù)器,它是一款單任務(wù)的HTTP服務(wù)器,通過(guò)建立HTTP請(qǐng)求列表來(lái)處理多路HTTP連接請(qǐng)求[4]。Boa的可執(zhí)行代碼很小,只有60KB左右,本設(shè)計(jì)使用的Boa源碼版本為0.94.13,移植過(guò)程主要是對(duì)源碼的交叉編譯和配置。
3.3.1 Boa程序源碼的交叉編譯
直接運(yùn)行src目錄下的configure文件,生成一個(gè)Makefile文件,再修改該文件的CC和CPP為交叉編譯器的安裝路徑:
編譯后生成可執(zhí)行文件Boa。
3.3.2 配置Boa服務(wù)器
在/etc目錄下創(chuàng)建一個(gè)目錄名為boa的目錄,放入boa.conf文件,這個(gè)文件是Boa的主要配置文件,相關(guān)的設(shè)置項(xiàng)為:
3.3.3 Boa的執(zhí)行
將交叉編譯后生成的可執(zhí)行文件Boa加入到/bin/下,然后對(duì)內(nèi)核再次編譯并下載到FS2410DEV開(kāi)發(fā)板上,在啟動(dòng)腳本里添加 /bin/boa,啟動(dòng)后就可以通過(guò)Web瀏覽器訪(fǎng)問(wèn)開(kāi)發(fā)板中的網(wǎng)頁(yè)。圖4是通過(guò)IE瀏覽器訪(fǎng)問(wèn)到的軌道拍攝系統(tǒng)的拍攝控制界面。
圖4 開(kāi)發(fā)板上的網(wǎng)頁(yè)
本文在已完成的軌道拍攝系統(tǒng)的基礎(chǔ)上,設(shè)計(jì)了一個(gè)基于ARM9和嵌入式Linux的嵌入式的Web服務(wù)器,實(shí)現(xiàn)了軌道拍攝系統(tǒng)的網(wǎng)絡(luò)化和遠(yuǎn)程控制,在PC端的瀏覽器上對(duì)拍攝系統(tǒng)信息控制和狀態(tài)查詢(xún)。在設(shè)計(jì)開(kāi)發(fā)過(guò)程中,我們將嵌入式Web服務(wù)器作為一個(gè)單獨(dú)的模塊,提供了與其他模塊連接的接口,根據(jù)不同的應(yīng)用場(chǎng)合,只需在軟件上進(jìn)行修改,就能很容易的應(yīng)用到各種嵌入式設(shè)備,在工業(yè)和日常生活中有著廣泛的應(yīng)用前景。
[1]黃光奇,編著.CGI編程指南[M].北京:電子工業(yè)出版社,1999.
[2]周維,陳默.基于SC2410的ARM開(kāi)發(fā)平臺(tái)[J].電子技術(shù),2004(7):4-7.
[3]W.Richard Stevens Stephen A.Rago.UNIX環(huán)境高級(jí)編程[M].2版.北京:人民郵電出版社,2006.
[4]Larr D,Jon N.Boa Webserver[EB/OL].(2000-02-03)[2013-08-25]http://www.boa.org/.
Realization of Embedded Web Server in Orbit Shooting System
WU Yun-xuan
(College of Information and Electronic Engineering,Liming Vocational University,Quanzhou 362000,China)
Based on ARM9 hardware platform and Linux operating system,this paper gives a design of embedded Web server which is built by CGI and Socket.Taking the remote control of realization of this program in orbit shooting system as a case study,it describes the hardware and software architectures,interprocess communication under embedded Linux and the specific construction method of BOA-based embedded Web server.This design gives an effective method for remote control through browsers and embedded devices.
embedded system;BOA server;orbit shooting
TP368.1
A
1009-3907(2013)10-1242-03
2013-08-25
泉州市科技局科技資項(xiàng)目(2008G16)
吳云軒(1980-),男,福建惠安人,講師,碩士,主要從事單片機(jī)與嵌入式系統(tǒng)方面研究。
責(zé)任編輯:
吳旭云