管華慶
(南京郵電大學 通信與信息工程學院,江蘇 南京 210000)
小型Web服務器Boa的移植與驗證
管華慶
(南京郵電大學 通信與信息工程學院,江蘇 南京 210000)
現代通信技術和計算機技術都迎來了顯著的發展,各個應用領域都要求將可移動設備接入網絡。這就要求構建嵌入式Web服務器,讓用戶可以接入服務器進行數據共享和相互通信。嵌入式Web服務器具有許多優點,如:結構簡單、功能低等。把嵌入式設備接入互聯網可以實現方便、實時地通過網絡監控設備的工作狀態,再將數據以直觀、形象的網頁方式顯示在PC、PDA、Phone等設備上,不需要專門的應用軟件。文中便攜式通信地球站監控系統使用的是ARM9系列芯片,在控制板硬件之上移植Linux操作系統,系統上移植合適的應用層Web服務器。系統采用的是Boa服務器。它是一種B/S(瀏覽器/服務器)的架構方式,用戶在終端上打開瀏覽器輸入網址訪問已構建的嵌入式Web服務器,就可以對設備進行方便、實時、簡便的監控。
便攜式衛星通信地球站;嵌入式Web服務器;B/S架構;Boa
隨著互聯網[1]的不斷發展和廣泛應用,人們獲取信息的主要方式也變成網頁的形式,網頁呈現的內容不但品種繁多,而且絢麗多彩。這種方式正是平時所說的B/S(瀏覽器/服務器)模式。客戶通過任意一款瀏覽器,比如:IE、Firefox、360等,在地址欄輸入URL(統一資源定位符)后連上服務器,提供Web服務的服務器就會將存儲在本地的資源發送給客戶端。客戶端服務器之間的交互必須遵循一定的協議規則,比如:Http、TCP/IP等。
目前,這種應用廣泛的Web服務器[2]模式和美觀的網頁設計技術也在嵌入式系統中得到了廣泛的發展,比如:對工業控制設備、儀器儀表、家用電器進行實時監控[3]。嵌入式Web服務器本質上是一種駐留在某類嵌入式設備上的應用層程序,它可以完成如下工作:運行守護進程,網絡環境的初始化,端口監聽,等待客戶請求,處理請求,存儲數據,響應請求內容,等等。
嵌入式Web服務器[4]種類繁多:Lighttpd、Apache、Goahead、Http、Thttpd和Boa。考慮到嵌入式系統資源、運行能力等的限制,文中系統采用Boa服務器作為系統的Web服務器。
Boa代碼量少,可執行代碼僅61.3 kB,支持身份認證和動態網頁CGI,功能全面,穩定,適用性強,安全性高。Boa服務器是一種單任務的Web服務器,它不能并發處理多個用戶請求進程,只能按照請求隊列中排隊的順序,逐個響應。
守護進程是指一種獨立于任何終端控制的運行在系統后臺的特殊進程。它能每隔一定周期執行特定任務或者某類事情發生后觸發其運行。Boa[5]通過服務器守護進程實現與客戶端之間的交互。守護進程的啟動方式有兩種:一種是在Linux啟動腳本文件/rtc/rcS.d中增加代碼:./var/www/boa在系統啟動時自動運行;另一種是在終端上用戶根據需要啟動輸入代碼:./var/www/boa。
服務器守護進程啟動之后首先進行網絡環境參數的初始化工作。之后Boa服務器進程一直處于運行狀態,并創建套接字,創建好套接字后的進程將會一直監聽80端口是否有來自客戶端的請求。客戶端發起一個請求,要求建立一個到服務器80端口的TCP鏈接,Boa服務器[6]接收HTTP請求,并將獲得的全部請求數據保存在request的結構體隊列中。由于Boa是一種單任務、單進程的迭代式服務器,對于客戶端多個、連續的請求都會按照先進先出的原則存儲在請求隊列中,而不會像并發服務器一樣創建新的進程來處理客戶端請求,而本身仍然處于監聽狀態。
Boa只能處理單任務、單進程的服務器,它每次從request隊列[7]中取出一個請求,創建相應的進程,根據request數據結構中請求的不同狀態進行相應處理。對于符合HTTP協議的請求,Boa返回404錯誤;對于符合協議的請求,Boa將頭部信息提取,完成環境變量的設置,查看環境變量中is_cgi位的值。如果該位值為0說明客戶端請求的是服務器本地存儲的靜態網頁,服務器不做處理,讀取本地文件作為響應返回;該位上的值非0表示CGI程序,Boa服務器必須讀取環境變量中的數據,根據數據值在自身運行CGI程序,將程序的輸出組織成文件,作為最終響應文件給客戶端。
Web服務器工作流程見圖1。
按順序執行以下幾步完成Boa服務器的移植過程:
1)完成Boa程序的移植[8]。
(1)首先登錄Boa的官方網址http://www.boa.org下載“boa-0.94.13”版本。
(2)解壓壓縮包:#tar zxvf boa-0.94.13.tar.gz。
(3)修改源碼并交叉編譯。

圖1 Web服務器工作流程
進入源碼目錄的src子目錄。
#cd Boa-0.94.13/src
生成Makefile文件
#./config
修改Makefile文件,找到:CC=gcc和CPP=gcc-E,然后分別改成:
CC=arm-linux-gcc
CPP=arm-linux-gcc-E
#vimMakefile
修改boa.c文件,將225行、226行和227行的代碼注釋掉
#vimboa.c
修改compat.h文件,將120行修改為
#define TIMEZONE_OFFSET(foo)(foo)
->tm_gmtoff
#vimcompat.h
修改config.c文件,注釋掉266行到286行
#vimconfig.c
接著修改log.c文件,注釋掉72、73、和74行
#vimlog.c
保存文件并退出后進行編譯。命令:
#Make
編譯之后會在源文件目錄下生成可執行文件“boa”。接著將可執行文件復制到服務器設備系統的/var/www目錄下,同時在文件系統的/etc/下建立子目錄,把配置文件boa.cof拷貝到此目錄下,命令為:
#cp boa/var/www
#mkdir /etc/boa
#cpboa.conf /etc/boa
(4)創建日志文件目錄。
#mkdir /var/log/
2)修改boa的配置文件boa.Conf。
(1)修改服務器的配置文件[9]。
#cd /etc/boa
#vimboa.conf
將111行代碼改為:
DocumentRoot /var/www 即規定文件主目錄為/var/www
將193行代碼改為:
ScriptAlias /cgi-bin /var/www/cgi-bin
這是起別名的方法,/var/www/cgi-bin和/cgi-bin/現在指的是同一個文件夾。只要在瀏覽器中輸入/cgi-bin/就可以訪問板子上的實際路徑
將194行增加一行代碼:
ScriptAlias index.html /var/www/html
/index.html 相應的起別名方法,即規定測試目錄的虛擬路徑的別名
(2)配置文件boa.conf的其他內容都可以按照其原先內容保持不變。
3)最后必須編寫相應的靜態HTML和CGI腳本程序,并放入/var/www/cgi-bin/文件夾下,通過瀏覽器測試移植是否成功完成。
文中系統為一個便攜式衛星通信地球站監控系統的Web監控系統,包括監控終端、傳輸網絡、Web服務器、數據處理單元、數據庫等幾個功能模塊[10]。
監控終端采用PC或者PAD等移動設備,設備上的瀏覽器工作于TCP/IP協議的應用層,使用HTTP協議進行通信。它可以向服務器發送監控命令或者從服務器獲得地球站的狀態;數據傳輸部分可以采用兩種方式。如果監控終端采用的是PC機,可以用一根網線將服務器和客戶端連接起來,實現點對點通信方式。另一方面如果采用的是移動終端,如:PAD或者Phone等,也可以安裝無線射頻模塊組建自己的局域網,通過Wifi進行通信;數據處理模塊采用AT91SAM9260微處理器[11],其主要功能是運行CGI程序和伺服控制程序,為了實現瀏覽器和服務器之間的動態網頁交互方式,如何設計出準確、快速地處理客戶端發來的請求數據的CGI程序是該系統的關鍵,而這也依賴于主控芯片的硬件處理能力。最后的數據庫部分,作為一個系統,為了防止來自外部的惡意修改,必須有驗證系統登錄身份的功能,這些身份數據就存儲在數據庫中,當然其中還有一些對星的參數。文中系統采用SQlite輕型數據庫[12],CGI程序利用它提供的API函數完成數據庫的查詢、插入和修改等常用功能。
系統工作流程見圖2。

圖2 系統工作流程
客戶機和服務器之間交互的載體是網頁。網頁中不但可以有文字,而且可以插入圖片,甚至能將視頻文件嵌入網頁中。網頁給用戶帶來了愉快的用戶體驗。
該系統采用的主要網頁設計技術有:CGI程序設計、HTML、JavaScript腳本語言和CSS等方式。這些綜合起來就是人們常用的Ajax技術。CGI又叫做通用網關接口[13],CGI程序是一種運行在服務器端的動態程序。它能夠代替服務器來讀取數據庫的數據。如果沒有CGI,一個Web服務器只能給用戶提供靜態網頁。有了CGI標準,程序員編寫主頁文件時可以將數據發送到服務器,服務器利用外部擴展程序來對數據進行處理,處理之后的程序以網頁的方式保存,供用戶訪問。Ajax編程技巧也是一種常用的對Web網頁的局部內容進行動態刷新的技術。JavaScript腳本首先創建一個XMLHttpRequest對象,這個對象經過初始化之后,執行它的send()方法通過post或者GET方式向服務器端的CGI程序發送請求,CGI程序處理數據之后又將最后的結果發送給客戶端的JavaScript腳本程序,腳本將數據重新寫入到網頁上面相應的控件里,這樣就實現了網頁的局部刷新,免去從服務器獲得整個網頁。CSS[14]技術主要針對頁面的布局,設計出美觀、整潔的網頁,提供給用戶更加友好的交互。
文中以下為靜態網頁測試。
5.1 測試環境的相關說明
編寫測試代碼index.html。在PC上使用交叉編譯器編譯源程序后放入上小節指定的文件夾/var/www/cgi-bin/。用戶使用網線將一臺PC機和便攜式衛星通信地球站控制板互聯。必須確保控制板和試驗用PC機處于同一個網段,所以設置PC機的IP地址為10.10.150.174,子網掩碼設置為255.255.255.0,便攜式衛星控制地球站的IP地址設置為10.10.150.180。最后打開PC機的瀏覽器輸入以下網址:http://10.10.150.180,看是否出現需要的網頁。
5.2 測試用例與測試現象
#include
int mian()
{
printf(“Content-type:text/html ”);
printf(“ ”);
printf(“Text ”);
printf(“ ”);
printf(“
”);printf(“
printf(“HELLO WORLD! ” );
printf(“
printf(“<ody> ”);
printf(“
return 0;
}
由于ARM板資源有限,必須在PC機上將源文件進行交叉編譯成在Linux系統下的文件,最后將編譯好的文件放到開發板的/var/www/cgi-bin目錄下。相關代碼如下:
#arm-linux-gcc -o hello.cgi hello.c
#cp hello.cgi /var/www/cgi-bin/
瀏覽器中輸入網址:
http://10.10.150.180/cgi-bin/hello.cgi
即可看到如圖3所示的網頁。

圖3 結果驗證圖
文中基于AT91SAM9260型號的微處理器ARM9主控板[10],完成Web服務器的移植,實現在PC上以網頁的方式訪問主控制板上服務器中的資源。最后通過一段簡單的CGI程序測試能否正常工作,結果表明該服務器工作時間持久,工作性能穩定,控制方便。文中介紹的移植方法可以給其他服務器的移植提供有價值的參考。
[1] 王興著.Linux網絡服務器應用教程[M].北京:清華大學出版社,2007.
[2] 徐春艷.嵌入式WEB服務器的研究與實現[D].南京:南京理工大學,2008.
[3] 謝新民,丁 峰.自適應控制系統[M].北京:清華大學出版社,2006.
[4] 呂 鑫.基于ARM和Linux嵌入式Web服務器的設計[D].大慶:大慶石油學院,2008.
[5] 張 勤.Linux服務器配置全程實錄[M].北京:人民郵電出版社,2010.
[6] 吳玉成,侯良偉,冷建筑.嵌入式Linux下WEB服務器的設計與實現[J].數據通信,2008(6):43-46.
[7] 王麗娜.衛星通信系統[M].北京:國防工業出版社,2006.
[8] Stevens W R,Rago S A.Advanced programming in the UNIX environment[M].Beijing:Posts and Telecom Press,2006.
[9] Helstrom C W.Statistical theory of signal detection[M].Oxford:Pergamon Press,1996.
[10] 吳士力.嵌入式Linux應用開發全程解析與實戰[M].北京:機械工業出版社,2010.
[11] INTELSAT SSOG 210.Earthstation verification tests[S].2000.
[12] Agilent Technologies.User’s/programmer’s reference[M].USA:Agilent Technologies,2006.
[13] Kraus J D,Marhefka R J.Antennas:for all applications[M].New York:New McGraw-Hill,2001.
[14] Bridge W M.Cross coupling in a five horn monopulse tracking system[J].IEEE Transactions on Antennas AKD Propaqation,1972,AP-20(4):437-442.
Transplantation and Verification of Embedded Web Server Boa
GUAN Hua-qing
(College of Telecommunications and Information Engineering,Nanjing University of Posts and Telecommunications,Nanjing 210000,China)
With the development of computer technology and modern communication technology,the device is connected to the network which is available to the general requirements of modern mobile terminals.Compared with the Internet Web applications,the embedded Web server has the advantages of simple structure and low functional requirements.The embedded devices connected to the Internet makes operating state to be easily monitored in real-time through of the network.Then the data can be vividly and intuitively displayed on PC,PDA,Phone and other equipments.Users do not need special application software.This portable communication earth station monitoring system is porting embedded Linux operating system on ARM9 chip.The appropriate application layer Web server on this system is installed,the system uses the Boa server,which is based on B/S structure mode,and user opens a browser on your terminal server to access Web pages stored in the satellite communication earth station,bringing real-time,portable monitor to the user.
portable satellite communication earth station;embedded Web server;B/S structure;Boa
2015-05-12
2015-08-14
時間:2016-01-26
國家自然科學基金資助項目(61271234)作者簡介:管華慶(1990-),女,碩士研究生,研究方向為衛星通信技術。
http://www.cnki.net/kcms/detail/61.1450.TP.20160126.1517.032.html
TP39
A
1673-629X(2016)02-0128-04
10.3969/j.issn.1673-629X.2016.02.029