• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    嵌入式WEB服務(wù)器BOA的應(yīng)用研究

    2011-03-20 02:31:56朱嶸濤徐愛鈞肖榮華
    關(guān)鍵詞:瀏覽器嵌入式客戶端

    朱嶸濤,徐愛鈞,肖榮華

    (1.長(zhǎng)江大學(xué)工程技術(shù)學(xué)院信息系,荊州434020;2.長(zhǎng)江大學(xué)電信學(xué)院;3.中石油川慶測(cè)井公司)

    引 言

    隨著Internet技術(shù)的成熟和嵌入式技術(shù)的不斷發(fā)展,利用網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程控制已成為一種發(fā)展趨勢(shì)。在嵌入式設(shè)備的管理與交互中,基于網(wǎng)絡(luò)方式的應(yīng)用開發(fā)是目前嵌入式系統(tǒng)開發(fā)的主流,這種應(yīng)用程序的結(jié)構(gòu)采用的是B/S結(jié)構(gòu),即在嵌入式設(shè)備上運(yùn)行一個(gè)支持腳本或具有CGI功能的WEB服務(wù)器,能夠生成動(dòng)態(tài)交互頁面。在遠(yuǎn)程監(jiān)控的過程中,通常會(huì)產(chǎn)生和處理很多的動(dòng)態(tài)數(shù)據(jù),而對(duì)數(shù)據(jù)的存取一般采取兩種方式:一種是基于文件方式,另一種是基于數(shù)據(jù)庫方式。基于文件方式來存取數(shù)據(jù)的缺點(diǎn)是顯而易見的,而基于數(shù)據(jù)庫方式的SQLite則可以通過事務(wù)進(jìn)行調(diào)度與并發(fā)控制,可有效地對(duì)數(shù)據(jù)進(jìn)行存取、查詢等操作,從而提高系統(tǒng)的開發(fā)效率和系統(tǒng)的可移植性。

    1 嵌入式WEB服務(wù)器的軟硬件設(shè)計(jì)[1]

    嵌入式WEB服務(wù)器通過交換機(jī)或調(diào)制解調(diào)器與Internet連接,用戶只需通過瀏覽器訪問該遠(yuǎn)程服務(wù)器的IP地址,即可使用該服務(wù)器并實(shí)現(xiàn)對(duì)設(shè)備的訪問。嵌入式WEB服務(wù)器的工作過程,如圖1所示。

    圖1 嵌入式WEB服務(wù)器的工作過程

    圖2為硬件系統(tǒng)結(jié)構(gòu)框圖。嵌入式WEB服務(wù)器采用S3C2410作為整個(gè)系統(tǒng)的處理器。S3C2410是Samsung公司的一款基于ARM920T內(nèi)核的16/32位RISC嵌入式微處理器,主要面向手持設(shè)備以及高性價(jià)比、低功耗的應(yīng)用。網(wǎng)絡(luò)控制部分選用CS8900A作為以太網(wǎng)控制器。Flash選用Samsung公司的容量為64MB的NAND Flash型K9F1208存儲(chǔ)器,SDRAM選用容量為64MB的HY57V561620AT存儲(chǔ)器。

    圖2 硬件系統(tǒng)結(jié)構(gòu)框圖

    軟件設(shè)計(jì)包括系統(tǒng)引導(dǎo)加載程序Bootloader、配置裁減過的Linux操作系統(tǒng)內(nèi)核和CRAMFS根文件系統(tǒng)。

    2 嵌入式WEB服務(wù)器的構(gòu)建[2]

    典型的嵌入式WEB服務(wù)器有BOA和THTTPD等。這里選用BOA作為嵌入式WEB服務(wù)器,BOA是一個(gè)非常小巧的WEB服務(wù)器,可執(zhí)行的代碼大約60KB。它是一個(gè)單任務(wù)的WEB服務(wù)器,只能一次完成用戶的請(qǐng)求,而不會(huì)創(chuàng)建(fork)出新的進(jìn)程來處理并發(fā)連接請(qǐng)求,但BOA支持CGI,并且能為CGI程序創(chuàng)建出一個(gè)新的進(jìn)程來執(zhí)行。BOA服務(wù)器的設(shè)計(jì)目標(biāo)是速度快和安全性好,在其站點(diǎn)公布的性能測(cè)試中,BOA的性能要好于Apache服務(wù)器的性能。

    嵌入式WEB服務(wù)器BOA和普通WEB服務(wù)器一樣,能夠完成接收客戶端請(qǐng)求、分析請(qǐng)求、響應(yīng)請(qǐng)求、向客戶端返回請(qǐng)求結(jié)果等任務(wù)。嵌入式WEB服務(wù)器工作原理如圖3所示。

    圖3 嵌入式WEB服務(wù)器工作原理

    嵌入式WEB服務(wù)器主要功能包括:

    ①完成WEB服務(wù)器的初始化工作,如建立TCP套接字、綁定端口、開始偵聽以及等待接收WEB瀏覽器的連接請(qǐng)求;

    ②當(dāng)有請(qǐng)求連接時(shí),WEB服務(wù)器接收來自客戶端請(qǐng)求;

    ③接收到客戶端的連接請(qǐng)求之后,分析客戶端請(qǐng)求,解析出請(qǐng)求的方法、URL目標(biāo)、可選的查詢信息及表單信息,同時(shí)根據(jù)請(qǐng)求進(jìn)行相應(yīng)的處理;

    ④WEB服務(wù)器完成相應(yīng)處理后,向WEB瀏覽器發(fā)送響應(yīng)信息;

    ⑤關(guān)閉與客戶端的連接。

    嵌入式BOA服務(wù)器的構(gòu)建過程如下:

    ①從www.boa.org下載BOA源碼,BOA的版本為0.94.13。

    ②解壓。

    #tar-xzvfboa-0.94.13.tar.gz

    ③進(jìn)入源代碼目錄。

    #cdboa-0.94.13/src

    ④運(yùn)行configure文件,會(huì)生成Make-file文件。

    #./configure

    ⑤修改Makefile文件,將

    CC=gcc,CPP=gcc-E改成

    CC=arm-linux-gcc,CPP=arm-linux-gcc-E

    ⑥進(jìn)行交叉編譯。

    #make

    ⑦去除調(diào)試信息,減小文件大小。

    #arm-linux-strip boa

    3 SQLite在ARM平臺(tái)上的移植[3]

    SQLite是由D.Richard Hipp用C語言開發(fā)的輕量級(jí)嵌入式數(shù)據(jù)庫,它是應(yīng)用最廣泛的嵌入式數(shù)據(jù)庫之一。SQLite的源代碼完全開放,可以免費(fèi)用于任何用途,包括商業(yè)目的。SQLite提供了對(duì)SQL92的大多數(shù)支持,如多表和索引、事務(wù)、視圖、觸發(fā)和一系列的用戶接口及驅(qū)動(dòng)。

    SQLite的體系結(jié)構(gòu)如圖4所示。對(duì)數(shù)據(jù)庫進(jìn)行的各種操作都是按照此順序執(zhí)行的。頂層是標(biāo)記處理器(tokenize)和分析器(parser)。底部是經(jīng)過優(yōu)化的B樹,這樣有助于運(yùn)行在可調(diào)整頁面緩沖時(shí)將對(duì)磁盤的查找降到最低。再往下是頁面高速緩存,它作用在OS抽象層之上。該體系結(jié)構(gòu)的核心是虛擬數(shù)據(jù)引擎(VDBE),完成與數(shù)據(jù)相關(guān)的全部任務(wù),并且是客戶和存儲(chǔ)之間信息交換的中間單元。當(dāng)SQL語句被分析后,虛擬數(shù)據(jù)庫引擎就開始工作。代碼生成器將分析樹翻譯成一個(gè)袖珍程序,隨后又被組合成虛擬機(jī)器語言表示的一系列指令。

    圖4 SQLite的體系結(jié)構(gòu)

    SQLite的主要接口函數(shù)有3個(gè),分別是sqlite_open()、sqlite_close()和sqlite_exec()。其中,sqlite_open()用于打開一個(gè)SQLite數(shù)據(jù)庫,如果成功打開則返回?cái)?shù)據(jù)庫的句柄,否則返回FALSE;sqlite_close()用于關(guān)閉SQLite數(shù)據(jù)庫,無返回值;sqlite_exec()執(zhí)行相應(yīng)的SQL命令。

    SQLite的移植過程如下:

    ①從www.sqlite.org下載sqlite-2.8.17.tar.gz源碼,并解壓。

    ②在文件sqlite.h中指定SQLITE_PTR_SZ的值為4,使B樹有正確的變量大小。

    ③修改配置文件configure,注釋掉$cross_compiling相關(guān)的代碼。

    ④配置以生成Makefile。

    #./configure--disable-tcl--h(huán)ost=arm-linux

    ⑤進(jìn)入Makefile文件,將BCC=arm-linux-gcc-g-O2改成BCC=gcc-g-O2。由于編譯生成的可執(zhí)行文件要在ARM開發(fā)板上運(yùn)行,為了方便,將后面指定生成的庫libsqlite.la改成libsqlite.a,即編譯成靜態(tài)鏈接的形式。

    ⑥使用#make命令進(jìn)行編譯,以生成可執(zhí)行文件sqlite3。

    ⑦去除其中的調(diào)試信息,以減小文件的大小。

    #arm-linux-strip sqlite3

    CGI(Common Gateway Interface,公共網(wǎng)關(guān)接口)定義了WEB服務(wù)器與外部擴(kuò)展程序(CGI程序)之間進(jìn)行交互的接口標(biāo)準(zhǔn)。在WEB環(huán)境下,客戶端瀏覽器將數(shù)據(jù)傳送給WEB服務(wù)器,WEB服務(wù)器通過調(diào)用CGI程序?qū)崿F(xiàn)和WEB瀏覽器的交互。也就是說,CGI程序負(fù)責(zé)接收來自客戶端的信息并進(jìn)行相應(yīng)的處理,將相應(yīng)的結(jié)果再發(fā)送給WEB瀏覽器。CGI程序主要是從環(huán)境變量中獲取相關(guān)信息并處理,最后的結(jié)果以HTML的格式輸出返回給瀏覽器。通過編寫不同的CGI外部擴(kuò)展程序,可以完成對(duì)WEB網(wǎng)頁中表單(Form)數(shù)據(jù)的處理、數(shù)據(jù)庫的查詢及現(xiàn)場(chǎng)設(shè)備數(shù)據(jù)的采集任務(wù),因此客戶端用戶通過CGI程序和嵌入式WEB服務(wù)器就可以完成對(duì)動(dòng)態(tài)數(shù)據(jù)的訪問。

    嵌入式WEB服務(wù)器要訪問SQLite,CGI是一個(gè)非常不錯(cuò)的選擇。CGI是外部擴(kuò)展應(yīng)用程序(例如用C語言編寫的C腳本語言)與WEB服務(wù)器交互的一個(gè)標(biāo)準(zhǔn)接口。而CGI標(biāo)準(zhǔn)可簡(jiǎn)單概括為:CGI程序是通過標(biāo)準(zhǔn)輸入(STDIN)或環(huán)境變量來得到服務(wù)器的輸入信息,并通過標(biāo)準(zhǔn)輸出(STDOUT)向服務(wù)器輸出信息。按照CGI標(biāo)準(zhǔn)編寫的外部擴(kuò)展應(yīng)用程序可以處理WEB瀏覽器輸入的需要協(xié)同工作的數(shù)據(jù),完成WEB瀏覽器與WEB服務(wù)器的交互操作。

    在WEB環(huán)境下,瀏覽器與服務(wù)器之間的數(shù)據(jù)交互,大多是通過HTML中的Form表單實(shí)現(xiàn)的。Form提供了兩種數(shù)據(jù)傳輸?shù)姆绞健狦ET與POST。GET方式傳輸?shù)臄?shù)據(jù)受URL長(zhǎng)度的限制,因此傳輸?shù)臄?shù)據(jù)量小,且在傳輸數(shù)據(jù)的過程中是不安全的,而POST方式則不存在上述的缺點(diǎn),故選擇用POST來進(jìn)行數(shù)據(jù)的傳輸。根據(jù)CGI規(guī)范,對(duì)于POST方式,在WEB服務(wù)器中需要根據(jù)表單提交的數(shù)據(jù)長(zhǎng)度,將其重定向?yàn)镃GI程序的標(biāo)準(zhǔn)輸入,這樣CGI程序就可以通過標(biāo)準(zhǔn)輸入來得到客戶端提交的數(shù)據(jù)。重定向是通過UNIX管道機(jī)制來實(shí)現(xiàn)的。

    POST方式下CGI的工作原理如圖5所示。WEB服務(wù)器是WEB瀏覽器與CGI程序之間的通道。WEB服務(wù)器接收到CGI請(qǐng)求后,就創(chuàng)建出一個(gè)主進(jìn)程,同時(shí)也將接收到的數(shù)據(jù)傳遞給主進(jìn)程。主進(jìn)程為了讀取來自WEB服務(wù)器數(shù)據(jù)的長(zhǎng)度,fork出一個(gè)子進(jìn)程,創(chuàng)建出管道,并將管道的輸入端重定向?yàn)镃GI的標(biāo)準(zhǔn)輸入。子進(jìn)程通過管道將數(shù)據(jù)長(zhǎng)度傳遞給CGI程序,CGI程序通過標(biāo)準(zhǔn)輸出將處理的結(jié)果發(fā)送給服務(wù)器,服務(wù)器再將相應(yīng)信息傳遞給客戶端瀏覽器并顯示出來。

    要實(shí)現(xiàn)嵌入式遠(yuǎn)程數(shù)據(jù)的采集,先要將嵌入式設(shè)備采集的現(xiàn)場(chǎng)數(shù)據(jù)存儲(chǔ)到服務(wù)器的SQLite數(shù)據(jù)庫上,然后通過編寫相應(yīng)的CGI程序來訪問SQLite數(shù)據(jù)庫。CGI程序必須滿足CGI規(guī)范,CGI程序使用C語言編寫,因此CGI程序可以調(diào)用SQLite提供的接口函數(shù)來訪問數(shù)據(jù)庫,同

    圖5 POST方式下CGI的工作原理

    樣要使用sqlite3_open()、sqlite3_exec()和sqlite3_close()這3個(gè)接口函數(shù)來操作數(shù)據(jù)庫。此外,如果想取回SQL語句訪問數(shù)據(jù)庫的結(jié)果,就要對(duì)每一個(gè)記錄執(zhí)行回調(diào)函數(shù)callback()。

    [1]王海龍,徐曉輝,等.基于嵌入式Web服務(wù)器的遠(yuǎn)程控制系統(tǒng)的實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2010(5).

    [2]劉瓊,馬海波,姜薇.SQLite在嵌入式Web服務(wù)器中的應(yīng)用研究[J].微計(jì)算機(jī)信息,2010(8).

    [3]俞輝,李永,等.ARM嵌入式Linux系統(tǒng)設(shè)計(jì)與開發(fā)[M].北京:機(jī)械工業(yè)出版社,2010.

    [4]歐文盛.嵌入式Linux應(yīng)用實(shí)例開發(fā)[M].北京:中國(guó)電力出版社,2008.

    [5]李艷軍.基于Linux的嵌入式Web服務(wù)器Thttpd的應(yīng)用研究與實(shí)現(xiàn)[J].信息化研究,2010,36(2).

    猜你喜歡
    瀏覽器嵌入式客戶端
    反瀏覽器指紋追蹤
    電子制作(2019年10期)2019-06-17 11:45:14
    縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
    孵化垂直頻道:新聞客戶端新策略
    基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
    搭建基于Qt的嵌入式開發(fā)平臺(tái)
    嵌入式軟PLC在電鍍生產(chǎn)流程控制系統(tǒng)中的應(yīng)用
    環(huán)球?yàn)g覽器
    再見,那些年我們嘲笑過的IE瀏覽器
    Altera加入嵌入式視覺聯(lián)盟
    倍福 CX8091嵌入式控制器
    桦川县| 威远县| 朔州市| 甘洛县| 封丘县| 邯郸市| 沾益县| 始兴县| 辽中县| 习水县| 漳州市| 马公市| 巴楚县| 岳阳市| 长海县| 东丽区| 兰考县| 舟曲县| 洞头县| 桂东县| 曲水县| 新巴尔虎右旗| 永靖县| 九龙城区| 金门县| 永康市| 南乐县| 武山县| 定日县| 浮山县| 家居| 肃南| 新源县| 临夏市| 鄢陵县| 孟津县| 嘉黎县| 庄河市| 石狮市| 司法| 彝良县|