基于PXA270嵌入式Web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
(2)TCP/IP協(xié)議族的裁剪。在TCP協(xié)議中采用“停止等待算法”代替“滑動(dòng)窗口算法”。一方面是由于數(shù)據(jù)量小,對(duì)網(wǎng)絡(luò)擁塞不會(huì)產(chǎn)生太大影響,從而可以裁剪TCP的流量控制功能;另一方面是因?yàn)閿?shù)據(jù)量小時(shí),采用停止等待算法的傳輸效率和滑動(dòng)窗口算法的效率差不多,因此采用簡(jiǎn)單停止等待算法代替復(fù)雜的滑動(dòng)窗口算法,不但降低了實(shí)現(xiàn)難度,提高了處理速度,同時(shí)取消了TCP發(fā)送緩存區(qū)和接收緩存區(qū),從而減小了占用存儲(chǔ)空間。研究發(fā)現(xiàn),如果TCP層的上層實(shí)現(xiàn)服務(wù)器端的應(yīng)用,可以將標(biāo)準(zhǔn)TCP狀態(tài)機(jī)建立連接過程中客戶端建立連接的狀態(tài)機(jī)部分簡(jiǎn)化掉,即將主動(dòng)創(chuàng)建連接的SYN-SENT狀態(tài),主動(dòng)關(guān)閉連接的FIN-WAIT1,F(xiàn)IN-WAIT2,CL0SING,TIME-WAIT狀態(tài)。同理,如果應(yīng)用是基于客戶端的,還可以將服務(wù)器建立連接的狀態(tài)機(jī)部分簡(jiǎn)化。當(dāng)處于監(jiān)聽狀態(tài)的服務(wù)器收到客戶端的請(qǐng)求時(shí),發(fā)送“ACK+對(duì)方發(fā)過來的SYN數(shù)據(jù)”。當(dāng)收到來自客戶端的一個(gè)僅含有ACK的空數(shù)據(jù)片后,雙方進(jìn)人Established狀態(tài)建立連接,之后可以進(jìn)行TCP數(shù)據(jù)通信。這樣既節(jié)省了系統(tǒng)開銷,同時(shí)也保證了所有的數(shù)據(jù)段都能安全正確地到達(dá)目的端。
(3)編寫HTTP Web Server。Linux下嵌入式Web服務(wù)器主要有3個(gè):httpd,thttpd和Boa。系統(tǒng)以boa作為服務(wù)器。Boa是一個(gè)單任務(wù)的http服務(wù)器,源代碼開放、性能高。建立boa Web服務(wù)器的步驟如下:
①下載boa源代碼boa-0.94.14r21.tar.gz。BoaWeb服務(wù)器的源代碼可以從http://www.boa.org下載,當(dāng)前最新版本為0.94.14。
②安裝并編譯boa源代碼。首先將源碼文件進(jìn)行解壓,修改Makefile文件,修改CC=gcc為CC=/usr/local/arm-linux/bin/arm-linux-gcc(//自己主機(jī)交叉編譯器的目錄),修改CPP=gcc-E為CPP=/usr/local/arm-linux/bin/arm-linux-gcc-E,執(zhí)行make,即可在SRC下得到boa可執(zhí)行文件。
③配置boa Web服務(wù)器。Boa啟動(dòng)時(shí)將加載一個(gè)配置文件boa.conf,在boa程序運(yùn)行前,必須對(duì)其進(jìn)行修改。
④執(zhí)行Boa。成功配置以后,創(chuàng)建日志文件所在目錄/var/log/boa,創(chuàng)建HTML文檔的主目錄/var/www,將靜態(tài)網(wǎng)頁存入該目錄下(將主機(jī)/usr/share/doc/HTML/目錄下的index.html文件和img目錄復(fù)制到/var/www目錄下),創(chuàng)建CGI腳本所在錄/var/www/cgi-bin,將cgi的腳本存放在該目錄下,另外還要將mime.types文件復(fù)制/etc目錄下。在實(shí)際運(yùn)行時(shí),可以將index.html,index_Zcn.html文件、img目錄和mime.types文件放到CF卡目錄下,建立目錄后,拷貝至相應(yīng)目錄。啟動(dòng)ARM-Linux,在終端運(yùn)行./boa,用網(wǎng)頁瀏覽器訪問,看到/usr/share/doc/HTML/目錄下的index.html網(wǎng)頁,嵌入式Web服務(wù)器移植成功。
(4)CGI程序設(shè)計(jì)
嵌入式Web服務(wù)器,其為用戶提供基于HTTP協(xié)議的網(wǎng)絡(luò)接入方式,再通過編寫適當(dāng)?shù)腃GI程序來實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁的交互。
要使用CGI程序,一般使用HTML中的FORM結(jié)構(gòu):FORM ACTION=/cgi-bin/文件名;METHOD=傳送方法>內(nèi)容/FORM>,其ACTION屬性指定相關(guān)的CGI程序,METHOD屬性指明提交數(shù)據(jù)的方法(POST或GET);也可以在A>標(biāo)簽的HREF屬性中調(diào)用CGI程序,結(jié)構(gòu)如:A HREF=/cgi-bin/文件名>START CGI/A>;還可以在IMG>的HTML標(biāo)簽中調(diào)用CGI程序,如果把CGI程序的路徑當(dāng)作SRC屬性的話,服務(wù)器就會(huì)去運(yùn)行程序并把運(yùn)行結(jié)果當(dāng)成圖像的來源,結(jié)構(gòu)如:IMGSRC=/cgi-bin/文件名>。
4 結(jié) 語
嵌入式Web服務(wù)器是實(shí)現(xiàn)嵌入式系統(tǒng)通過Web方式與Intenet互聯(lián)的關(guān)鍵組成部分,直接影響網(wǎng)絡(luò)應(yīng)用系統(tǒng)運(yùn)行的質(zhì)量與效率,對(duì)其進(jìn)行研究對(duì)Intenet技術(shù)的發(fā)展有重要意義。本文提出一種基于ARM-Linux操作系統(tǒng)的嵌入式Web服務(wù)器的設(shè)計(jì)方法,并給出相應(yīng)的軟硬件設(shè)計(jì),并利用Socket編程和CGI程序完成整個(gè)Web服務(wù)器的設(shè)計(jì)。該嵌入式Web服務(wù)器具有成本低、開放性好、可移植性強(qiáng)等優(yōu)點(diǎn),便于后期維護(hù)和升級(jí)。由于此設(shè)計(jì)的嵌入式Web服務(wù)器是一個(gè)單獨(dú)的模塊,提供的是標(biāo)準(zhǔn)接口,只要在軟件上作少許的修改就能很容易地應(yīng)用到其他的嵌入式設(shè)備(如智能家電、現(xiàn)場(chǎng)節(jié)點(diǎn)等)中,具有一定的推廣價(jià)值。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論