版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 本科畢業(yè)論文</b></p><p><b> 誠(chéng)信聲明</b></p><p> 本人鄭重聲明:所呈交的畢業(yè)論文(設(shè)計(jì)),題目《ARM平臺(tái)嵌入式WEB服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)》是本人在指導(dǎo)教師的指導(dǎo)下,進(jìn)行研究工作所取得的成果。對(duì)本文的研究作出重要貢獻(xiàn)的個(gè)人和集體,均已在文章以明確方式注明。除此之外,本論文(設(shè)計(jì))不
2、包含任何其他個(gè)人或集體已經(jīng)發(fā)表或撰寫過的作品成果。本人完全意識(shí)到本聲明應(yīng)承擔(dān)的責(zé)任。</p><p><b> 作者簽名:</b></p><p> 日期: </p><p><b> 摘 要</b></p><p> 論文主要介紹了基于ARM9
3、的嵌入式Web服務(wù)器Boa的軟、硬件設(shè)計(jì)及其實(shí)現(xiàn),其中硬件部分的核心是三星的S3C2440為處理器。最后成果形式為可以遠(yuǎn)程訪問的WebServer嵌入式服務(wù)器。Boa是一款單任務(wù)的HTTP服務(wù)器。與其他傳統(tǒng)的Web服務(wù)器不同的是當(dāng)有連接請(qǐng)求到來時(shí),它并不為每個(gè)連接單獨(dú)創(chuàng)建進(jìn)程, 也不通過復(fù)制自身進(jìn)程來處理多鏈接。而是通過建立HTTP請(qǐng)求列表來處理多路HTTP連接請(qǐng)求。同時(shí)它只為CGI程序創(chuàng)建新的進(jìn)程,這樣就在最大程度上節(jié)省了系統(tǒng)資源,這
4、對(duì)嵌入式系統(tǒng)來說至關(guān)重要。同時(shí)它還具有自動(dòng)生成目錄、自動(dòng)解壓文件等功能。因此, Boa在嵌入式系統(tǒng)中具有很高的應(yīng)用價(jià)值。</p><p> 關(guān)鍵詞:ARM;Linux;嵌入式Web服務(wù)器;CGI</p><p><b> Abstract</b></p><p> This paper has mainly developed the s
5、oftware hardware design and realization of the embedded Web server Boa based on ARM. And the core of the hardware part is S3C2440 microprocessor produced by Samsung . The final achievement is the embedded webserver which
6、 can remote visit. Boa is a single-tasking HTTP server. That means that unlike traditional webservers, it does not fork for each incoming connection, nor does it fork many copies of itself to handle multiple connections.
7、 It internally multiple</p><p> Keywords: ARM;Linux;Embedded Web server;CGI</p><p><b> 目錄</b></p><p><b> 第一章 引言7</b></p><p> 第二章 課題背景8<
8、;/p><p> 2.1 嵌入式系統(tǒng)簡(jiǎn)介8</p><p> 2.2 嵌入式系統(tǒng)和Linux8</p><p> 2.3 ARM9硬件平臺(tái)9</p><p> 2.3.1 ARM簡(jiǎn)介9</p><p> 2.3.2 mini2440嵌入式開發(fā)板10</p><p> 第三章 建
9、立嵌入式系統(tǒng)開發(fā)環(huán)境12</p><p> 2.1 在Vmware下安裝ubuntu12.0412</p><p> 2.2 虛擬機(jī)的配置13</p><p> 2.2.1 安裝配置tftp服務(wù)器13</p><p> 2.2.2 配置NFS服務(wù)器15</p><p> 2.2.3 交叉編譯器的配置
10、15</p><p> 第四章 系統(tǒng)移植16</p><p> 4.1 Uboot移植16</p><p> 4.2.U-boot燒寫16</p><p> 4.3.1 u-boot的功能16</p><p> 4.3.2 使用DNW燒寫u-boot16</p><p>
11、 4.3.3 使用H-Jtag燒寫u-boot17</p><p> 4.3Linux內(nèi)核移植18</p><p> 4.3.1 Linux kernel 的下載19</p><p> 4.3.3 Linux內(nèi)核的配置和編譯19</p><p> 4.4 文件系統(tǒng)的移植20</p><p> 4.5
12、 加載Linux內(nèi)核映像20</p><p> 4.6 Boa Web服務(wù)器的移植21</p><p> 4.6.1 Boa Web服務(wù)器的建立21</p><p> 4.7 Linux下動(dòng)態(tài)Web頁面的實(shí)現(xiàn)22</p><p> 4.7.1 CGI程序分析23</p><p> 4.7.2 For
13、m輸入的分析和解碼25</p><p> 第五章 嵌入式Web服務(wù)器28</p><p><b> 5.1 概述28</b></p><p> 5.2 Web服務(wù)器原理28</p><p> 5.3 嵌入式Web服務(wù)器實(shí)現(xiàn)原理28</p><p> 5.3.1 TCP/IP協(xié)議
14、29</p><p> 5.4 嵌入式Web服務(wù)器Boa29</p><p> 5.4.1 Boa概述29</p><p> 5.4.2 Boa的功能實(shí)現(xiàn)30</p><p> 第六章 CGI技術(shù)31</p><p> 6.1 CGI概述31</p><p> 6.2 C
15、GI工作原理32</p><p> 第七章 系統(tǒng)功能的測(cè)試34</p><p> 7.1 測(cè)試Web服務(wù)器34</p><p> 7.2 動(dòng)態(tài)Web頁面測(cè)試36</p><p><b> 結(jié)束語38</b></p><p><b> 致謝39</b>&l
16、t;/p><p><b> 參考文獻(xiàn)40</b></p><p><b> 附錄42</b></p><p><b> 第一章 引言</b></p><p> 隨著計(jì)算機(jī)技術(shù)的發(fā)展,嵌入式系統(tǒng)已成為計(jì)算機(jī)領(lǐng)域的一格重要組成部分。以ARM體系結(jié)構(gòu)設(shè)計(jì)的微處理器具有高性能、
17、低功耗和低成本的特點(diǎn),它廣泛應(yīng)用于嵌入式系統(tǒng)設(shè)計(jì)領(lǐng)域,是目前最廣泛的32位微處理器。以前設(shè)備控制系統(tǒng)一般是通過通信線路進(jìn)行的,其通信介質(zhì)、通信協(xié)議、相關(guān)軟件和硬件都是專用的,而Internet 技術(shù)的發(fā)展使嵌入式設(shè)備的遠(yuǎn)程控制和管理方式有了改變。不需要專用的通信線路,并且傳輸?shù)男畔⒉痪窒抻跀?shù)據(jù)信號(hào),還有聲音和圖像。最終要的是其通信協(xié)議是標(biāo)準(zhǔn)且公開的。隨著Web技術(shù)的發(fā)展,幾乎改變了現(xiàn)在的信息表達(dá)形式,很多應(yīng)用都是基于Web技術(shù)的。由于H
18、TML語言的標(biāo)準(zhǔn)統(tǒng)一性,只要在嵌入式設(shè)備中有一個(gè)微型服務(wù)器,就可以使用任意一種Web瀏覽器接收和發(fā)送信息。所以如何設(shè)計(jì)這種特別的Web服務(wù)器,如何在嵌入式設(shè)備中安裝Web服務(wù)器,就成了嵌入式Web服務(wù)器的發(fā)展和研究方向。</p><p> 對(duì)于嵌入式Web服務(wù)器的研究和應(yīng)用,其意義是重大的,它為我們管理、控制和監(jiān)測(cè)各種各樣的設(shè)備提供了一個(gè)很好的途徑。這種設(shè)備可以是具有有限內(nèi)存資源的8位或16位系統(tǒng),已足夠提供一
19、個(gè)用戶界面,而且這種方式是基于Internet的。這種設(shè)備可以在世界任何一個(gè)地方,只要它連入Internet就能夠控制它。</p><p><b> 第二章 課題背景</b></p><p> 這章對(duì)嵌入式系統(tǒng)作了定義,詳細(xì)介紹了嵌入式Linux以及嵌入式Linux在現(xiàn)代嵌入式系統(tǒng)中的地位,最后介紹了本次課題的硬件平臺(tái)。</p><p>
20、 2.1 嵌入式系統(tǒng)簡(jiǎn)介</p><p> 嵌入式系統(tǒng)被定義為:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。在制造工業(yè)、過程控制、通訊、儀器、儀表、汽車、船舶、航空、航天、軍事裝備、消費(fèi)類產(chǎn)品等方面均是嵌入式計(jì)算機(jī)的應(yīng)用領(lǐng)域。嵌入式系統(tǒng)是將先進(jìn)的計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)和電子技術(shù)和各個(gè)行業(yè)的具體應(yīng)用相結(jié)合后的產(chǎn)物,這一點(diǎn)就決定了它必然是
21、一個(gè)技術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識(shí)集成系統(tǒng)。</p><p> 2.2 嵌入式系統(tǒng)和Linux</p><p> 隨著微處理器的產(chǎn)生,價(jià)格低廉、結(jié)構(gòu)小巧的CPU和外設(shè)連接提供了穩(wěn)定可靠的硬件架構(gòu),那么限制嵌入式系統(tǒng)發(fā)展的瓶頸就突出表現(xiàn)在了軟件方面。盡管從八十年代末開始,陸續(xù)出現(xiàn)了一些嵌入式操作系統(tǒng),比較著名的有Vxwork、pSOS、Nucleus和Windows CE。
22、但這些專用操作系統(tǒng)都是商業(yè)化產(chǎn)品,其高昂的價(jià)格使許多生產(chǎn)低端產(chǎn)品的小公司望而卻步;而且源代碼封閉性也大大限制了開發(fā)者的積極性。另外結(jié)合國(guó)內(nèi)實(shí)情,當(dāng)前國(guó)家對(duì)自主操作系統(tǒng)的大力支持,也為源碼開放的Linux的推廣提供的廣闊的發(fā)展前景。還有,對(duì)上層應(yīng)用開發(fā)者而言,嵌入式系統(tǒng)需要的是一套高度簡(jiǎn)練、界面友善、質(zhì)量可靠、應(yīng)用廣泛、易開發(fā)、多任務(wù),并且價(jià)格低廉的操作系統(tǒng)。在不久的將來,從冰箱到收音機(jī)都會(huì)內(nèi)置處理器。因?yàn)長(zhǎng)inux的開放性,許多人認(rèn)為L(zhǎng)
23、inux非常適合多數(shù)Internet設(shè)備。他們認(rèn)為L(zhǎng)inux可以支持不同的設(shè)備,支持不同的配置。Linux對(duì)廠商不偏不倚而且成本極低,能夠很快成為用于各種設(shè)備的操作系統(tǒng)。如今,業(yè)界已經(jīng)達(dá)成共識(shí):即嵌入式Linux是大勢(shì)所趨,其巨大的市場(chǎng)潛力與醞釀的無限商機(jī)必然會(huì)吸引眾多的廠商進(jìn)入這一領(lǐng)域。</p><p> Linux為嵌入操作系統(tǒng)提供了一個(gè)極有吸引力的選擇,它是個(gè)和Unix相似、以核心為基礎(chǔ)的、完全內(nèi)存保護(hù)、
24、多任務(wù)多進(jìn)程的操作系統(tǒng)。支持廣泛的計(jì)算機(jī)硬件,包括X86,Alpha,Sparc,MIPS,PPC,ARM,NEC,MOTOROLA等現(xiàn)有的大部分芯片。程式源碼全部公開,任何人可以修改并在GNU通用公共許可證(GNU General Public License)下發(fā)行,這樣,開發(fā)人員可以對(duì)操作系統(tǒng)進(jìn)行定制,再也不必?fù)?dān)心像MS windows操作系統(tǒng)中"后門"的威脅。同時(shí)由于有GPL的控制,大家開發(fā)的東西大都相互兼容
25、,不會(huì)走向分裂之路。Linux用戶遇到問題時(shí)可以通過Internet向網(wǎng)上成千上萬的Linux開發(fā)者請(qǐng)教,這使最困難的問題也有辦法解決。Linux帶有Unix用戶熟悉的完善的開發(fā)工具,幾乎所有的Unix系統(tǒng)的應(yīng)用軟件都已移植到了Linux上。Linux還提供了強(qiáng)大的網(wǎng)絡(luò)功能,有多種可選擇窗口管理器(X windows)。其強(qiáng)大的語言編譯器gcc、g++等也可以很容易得到。不但成熟完善、而且使用方便[7]。</p><
26、p> 選擇Linux的原因:</p><p> 1.可應(yīng)用于多種硬件平臺(tái)。Linux已經(jīng)被移植到多種硬件平臺(tái),這對(duì)受開銷、時(shí)間限制的研究與開發(fā)項(xiàng)目是很有吸引力的。原型可以在標(biāo)準(zhǔn)平臺(tái)上開發(fā)然后移植到具體的硬件上,加快了軟件與硬件的開發(fā)過程。</p><p> 2.Linux可以隨意地配置不需要任何的許可證或商家的合作關(guān)系。</p><p> 3.它是免費(fèi)
27、的,源代碼可以得到。這是最吸引人的。毫無疑問,這會(huì)節(jié)省大量的開發(fā)費(fèi)用。</p><p> 4.它本身內(nèi)置網(wǎng)絡(luò)支持。</p><p> 5.Linux的高度模塊化使添加部件非常容易。</p><p> 6.Linux在臺(tái)式機(jī)上的成功,使大家看到了Linux在嵌入式系統(tǒng)中的輝煌前景。</p><p> 2.3 ARM9硬件平臺(tái)</p
28、><p> 2.3.1 ARM簡(jiǎn)介</p><p> 廣義地講,凡是帶有微處理器的專用軟硬件系統(tǒng)都可以稱為嵌入式系統(tǒng)。它是嵌入到對(duì)象體系中的專用計(jì)算機(jī)系統(tǒng),以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。ARM作為嵌入式系統(tǒng)得核心,既可以認(rèn)為是一個(gè)公司的名字,也可以認(rèn)為是對(duì)一類微處理器的通稱,還可以認(rèn)為是一種技術(shù)的名字
29、,目前非常流行的ARM內(nèi)核有ARM7TDM1、StrongARM、ARM720T、ARM9TDM1、ARM920T、ARM940T、ARM946T、ARM966T、ARM10TDM1等。本文所討論的目標(biāo)板的CPU為ARM920T內(nèi)核的三星S3C2410芯片。下面介紹該微處理器的特點(diǎn)及其應(yīng)用領(lǐng)域。</p><p> ARM9系列微處理器在高性能和低功耗特性方面提供最佳的性能。它具有以下特點(diǎn):</p>
30、<p> 提供1.1MIPS/MHz的5級(jí)流水線結(jié)構(gòu);</p><p> 支持32位ARM指令集和16位Thumb指令集;</p><p> 支持32位高速AMBA總線接口;</p><p> 全性能MMU,支持Windows CE、Linux、Palm OS等主流嵌入式操作系統(tǒng);</p><p> MPU支持實(shí)時(shí)操作系
31、統(tǒng);</p><p> 支持?jǐn)?shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力。</p><p> ARM9系列微處理器主要應(yīng)用于無線設(shè)備、儀器儀表、安全系統(tǒng)、機(jī)頂盒、高端打印機(jī)、數(shù)字照相機(jī)和數(shù)字?jǐn)z像機(jī)等。它包含ARM920T、ARM922T和ARM940T三種類型,以適用于不同的應(yīng)用場(chǎng)合。</p><p> S3C2410X是一款由Samsung公
32、司設(shè)計(jì)的低功耗、高集成度的基于ARM920T核的微處理器。這款芯片集成了以下部件:16KB指令Cache、16KB數(shù)據(jù)Cache、MMU、外部存儲(chǔ)控制器、LCD控制器(STN和TFT)、NAND Flash控制器、4個(gè)DMA通道、3個(gè)URT通道、一個(gè)I2C總線控制器、一個(gè)I2S總線控制器,以及4個(gè)PWN和1個(gè)內(nèi)部定時(shí)器、通用I/O口、實(shí)時(shí)時(shí)鐘、8通道10位ADC和觸摸屏接口、USB主、USB從、SD/MMC卡接口等?,F(xiàn)在它廣泛應(yīng)用于PD
33、A、移動(dòng)通信、路由器、工業(yè)控制等領(lǐng)域[3] 。</p><p> 2.3.2 mini2440嵌入式開發(fā)板</p><p> Mini2440是一套硬軟件集成的、基于ARM的完整開發(fā)板,該系統(tǒng)包含豐富的硬件資源、完善而優(yōu)越的調(diào)試手段和詳盡的資料[9]。</p><p> Mini2440目標(biāo)處理器采用Samsung公司的S3C2440微處理器,是友善之臂公司出
34、品的一款商業(yè)性質(zhì)的開發(fā)板,嵌入式開發(fā)的所有過程都可在該環(huán)境下完成。系統(tǒng)有以下組成部分:</p><p> ADT IDE集成開發(fā)環(huán)境;</p><p> 各種連接線、電源適配器以及學(xué)習(xí)光盤等;</p><p> 教學(xué)實(shí)驗(yàn)系統(tǒng)配套光盤。</p><p> Mini2440開發(fā)板模型如圖1所示:</p><p>
35、 圖1.開發(fā)板模型示意圖</p><p> 第三章 建立嵌入式系統(tǒng)開發(fā)環(huán)境</p><p> 本章詳細(xì)介紹了嵌入式系統(tǒng)開發(fā)環(huán)境的建立,Linux內(nèi)核的編譯,目標(biāo)板中U-boot的燒寫等。 </p><p> 2.1 在Vmware下安裝ubuntu12.04</p><p> 安裝過程很簡(jiǎn)單,在網(wǎng)關(guān)配置中我選的是橋接,安裝完后如圖所示
36、</p><p> 安裝Vmware Tools。</p><p> 進(jìn)入系統(tǒng)后,點(diǎn)擊虛擬機(jī)上的安裝vmware tools.</p><p> 打開終端(應(yīng)用程序-附件-終端)。</p><p> 在命令行輸入“l(fā)s”后將列出文件夾文件;接著輸入“cd vmware-tools-distrib”指定到此文件夾,接著輸入“l(fā)s”列出此
37、文件夾內(nèi)容,接著輸入“sudo ./vmware-install.pl”,輸入用戶密碼便可開始安裝了。</p><p> 安裝完成后重啟,安裝vmtool可以實(shí)現(xiàn)虛擬機(jī)和物理機(jī)之間的文件共享。</p><p> 2.2 虛擬機(jī)的配置</p><p> 2.2.1 安裝配置tftp服務(wù)器</p><p><b> 1、安裝相關(guān)
38、軟件包</b></p><p> apt-get install tftpd (服務(wù)端)</p><p> apt-get install tftp (客戶端)</p><p> apt-get install xinetd</p><p><b> 2、建立配置文件</b></p>&
39、lt;p> cd /etc/xinetd.d/</p><p><b> vi tftp</b></p><p><b> 輸入</b></p><p> service tftp</p><p><b> {</b></p><p>
40、 socket_type = dgram</p><p> protocol = udp</p><p> wait = yes</p><p> user = root</p><p> server = /usr/sbin/in.tftpd</p><p> server_args = -s /tftpb
41、oot</p><p> disable = no</p><p> per_source = 11</p><p> cps = 100 2</p><p> flags = IPv4</p><p><b> }</b></p><p><b>
42、存盤退出</b></p><p> 3、建立tftp服務(wù)文件目錄</p><p> mkdir /tftpboot</p><p><b> 4、重新啟動(dòng)服務(wù)</b></p><p> /etc/init.d/xinetd restart</p><p> 安裝完成!測(cè)試方法
43、:</p><p> 在/tftpboot 目錄下隨便放個(gè)文件abc</p><p> 然后 運(yùn)行tftp 192.168.123.202 進(jìn)入tftp命令行</p><p> 輸入get abc 看看是不是能把文件下下來,如果可以就可以了,也可以put 文件上去。</p><p> 檢查tptp是否打開:chkconfig --li
44、st 如果沒有打開,則用這個(gè)命令也可以打開:chkconfig tftp on</p><p> 或者用ps -A | grep tftp看是否有tftpd的服務(wù)~</p><p> 2.2.2 配置NFS服務(wù)器 </p><p><b> 1.NFS安裝</b></p><p> $ sudo apt-get
45、install nfs-kernel-server nfs-common portmap</p><p><b> 2.NFS配置</b></p><p> 2.1 配置/etc/exports文件</p><p> $ sudo vim /etc/exports</p><p> 在文件最后加入如下內(nèi)容:<
46、;/p><p><b> {{</b></p><p> /rootnfs *(rw,sync,no_root_squash)</p><p><b> }}</b></p><p> 注:nfs允許掛載的目錄及權(quán)限在文件/etc/exports中進(jìn)行了定義。其中:/rootnfs是要共享的目錄
47、,*代表允許所有的網(wǎng)絡(luò)段訪問,rw是可讀寫權(quán)限,sync是資料同步寫入內(nèi)存和硬盤,no_root_squash是nfs客戶端分享目錄使用者的權(quán)限,如果客戶端使用的是root用戶,那么對(duì)于該共享目錄而言,該客戶端就具有root權(quán)限。</p><p> 2.2.3 交叉編譯器的配置</p><p><b> 1、解壓縮</b></p><p>
48、 拷貝光盤目錄的arm-linux-gcc-4.3.2.tgz ,然后解壓縮到/opt/FriendlyARM/mini2440目錄下,根據(jù)我在Ubuntu下實(shí)驗(yàn)。</p><p><b> 2、設(shè)置環(huán)境變量</b></p><p> 在/etc/profile中添加環(huán)境變量</p><p> 注意,需要重新注銷或者source一下配置
49、文件profile, 環(huán)境變量才能生效。</p><p><b> 第四章 系統(tǒng)移植</b></p><p> 4.1 Uboot移植</p><p> 首先下載u-boot-2008.10,移植比較繁雜,參考mini2440的uboot移植手冊(cè)。</p><p> 4.2.U-boot燒寫</p>
50、<p> 4.3.1 u-boot的功能</p><p> Mini2440使用u-boot作為bootloader,通過它可以實(shí)現(xiàn)如下功能: </p><p> 1、燒寫flash; </p><p> 2、引導(dǎo)Linux操作系統(tǒng)及其它程序; </p><p> 3、通過以太網(wǎng)下載Linux內(nèi)核或其它程序并引導(dǎo)。 &l
51、t;/p><p> 4.3.2 使用DNW燒寫u-boot </p><p> 通過USB的方式,首先需要安裝USB驅(qū)動(dòng)</p><p> 4.3.3 使用H-Jtag燒寫u-boot </p><p> 通過并行口的方式燒寫,需要安裝H-Jtag軟件</p><p> 4.3Linux內(nèi)核移植</p>
52、;<p> Linux內(nèi)核的移植可以分為板級(jí)移植和片級(jí)移植。對(duì)于Linux發(fā)行版本中已經(jīng)支持的CPU,通常只需針對(duì)板級(jí)硬件進(jìn)行適當(dāng)?shù)男薷募纯?,這種移植叫做板級(jí)移植;而對(duì)于Linux發(fā)行版本中沒有支持的CPU,則需要添加相應(yīng)的CPU的內(nèi)核移植,這種移植叫做片級(jí)移植。片級(jí)移植相對(duì)板級(jí)移植來說要復(fù)雜許多,需要對(duì)Linux內(nèi)核有詳盡的了解。本課題中所用的Linux中已經(jīng)包含S3C2440 ARM920T處理器的移植包,下面將在此
53、基礎(chǔ)上介紹Linux板級(jí)移植的基本過程和方法[9]。</p><p> 圖19為本課題所采用的實(shí)驗(yàn)環(huán)境以及開發(fā)流程。①安裝交叉編譯器arm-linux-gcc;②對(duì)Linux內(nèi)核進(jìn)行配置(make menuconfig),并選擇適合本課題系統(tǒng)得相關(guān)配置;③編譯生成Linux映像文件ulmage;④通過u-boot的tftp命令將該文件下載到目標(biāo)板并執(zhí)行。這將在下面的內(nèi)容中作介紹。</p><
54、p> 圖19.JXARM9-2410 Linux開發(fā)流程</p><p> 4.3.1 Linux kernel 的下載</p><p> https://www.kernel.org/</p><p> 4.3.3 Linux內(nèi)核的配置和編譯</p><p> Linux源代碼結(jié)構(gòu)</p><p>
55、 Linux的源代碼組織成如下結(jié)構(gòu),根目錄是/home/cvtech/jx2410/linux。內(nèi)核的文件組織結(jié)構(gòu)為:</p><p> arch/arm:與架構(gòu)和平臺(tái)相關(guān)的代碼都放在arch目錄下。針對(duì)ARM的Linux,有一個(gè)子目錄和它對(duì)應(yīng)—arm。</p><p> drivers:包含所有的設(shè)備驅(qū)動(dòng)程序。驅(qū)動(dòng)程序又被分為“block”、“char”、“net”等幾種類型。&l
56、t;/p><p> fs:這里有支持多種文件系統(tǒng)的源代碼,幾乎一個(gè)目錄就是一個(gè)文件系統(tǒng),如MSDOS、VFAT、proc和ext2等。</p><p> include:相關(guān)的頭文件。它們被分成通用和平臺(tái)專用兩部分。目錄“arm-$(ARCH)”包含了平臺(tái)相關(guān)的頭文件。</p><p> init:含一些啟動(dòng)kernel所需做的所有初始化動(dòng)作,里面有一個(gè)main.
57、c,針對(duì)kernel做初始化動(dòng)作、設(shè)置一些參數(shù)等,并對(duì)外圍設(shè)備初始化。</p><p> ipc:提供進(jìn)程間通信機(jī)制的源代碼,如信號(hào)量、消息隊(duì)列和管道等。</p><p> kernel:包含進(jìn)程調(diào)度算法的源代碼,以及與內(nèi)核相關(guān)的處理程序,例如系統(tǒng)調(diào)用。</p><p> mm:用來存放內(nèi)存管理的源代碼,包括MMU。</p><p>
58、 net:支持網(wǎng)絡(luò)相關(guān)的協(xié)議源代碼。</p><p> lib:包含內(nèi)核要用到的一些常用函數(shù)。如字符串操作、格式化輸出等。</p><p> script:包含在配置和編譯內(nèi)核時(shí)要用到的腳本文件。</p><p> 2.Linux內(nèi)核源碼移植修改</p><p> 參考mini2440的linux移植手冊(cè)</p><
59、;p> 4.4 文件系統(tǒng)的移植</p><p> nandflash采用yaffs2的文件系統(tǒng)</p><p> 4.5 加載Linux內(nèi)核映像</p><p> 將mini2440的串口0與PC的串口連接,mini2440的網(wǎng)卡和PC的網(wǎng)卡使用直連網(wǎng)線進(jìn)行連接,或者將mini2440和PC機(jī)使用普通網(wǎng)線接入同一局域網(wǎng)。ARM實(shí)驗(yàn)箱的IP為192.16
60、8.1.45,虛擬機(jī)下的Linux的IP設(shè)為192.168.1.180,宿主機(jī)IP設(shè)為192.168.1.145。 </p><p> 將mini2440上電,正常情況下將在終端DNW中看到bootloader菜單界面。在bootloader中按照如圖24的提示進(jìn)行: </p><p> 4.6 Boa Web服務(wù)器的移植</p><p> 4.6.1 Boa
61、的編譯</p><p> 建立Boa Web服務(wù)器包括以下步驟:</p><p> 1.下載Boa源代碼。Boa web服務(wù)器的源代碼可以從http://www.boa.org</p><p> 下載,本文中下載文件為:boa-0.94.13.tar.gz,為當(dāng)前最新版本。</p><p> 安裝并編譯Boa源代碼。</p>
62、;<p> 通過Vmware Tools中的文件共享將Windows下下載的Boa源代碼復(fù)制到/home/cvtech/jx2410/examples/目錄下。</p><p><b> 安裝源代碼:</b></p><p> 生成Makefile文件# ./configure</p><p> 修改Makefile文件,
63、找到CC=gcc,將其改成CC = arm-linux-gcc,再找到CPP = gcc –E,將其改成CPP = arm-linux-gcc –E,并保存退出。</p><p> 運(yùn)行make進(jìn)行編譯,在boa/src目錄下將生成 Boa文件,該文件即為Boa Web服務(wù)器執(zhí)行文件。將調(diào)試信息剝?nèi)ィ玫降淖詈蟪绦蛑挥屑s60KB大小。</p><p> 3.配置Boa Web服務(wù)器,使
64、其能夠支持CGI程序的執(zhí)行。</p><p> Boa啟動(dòng)時(shí)將加載一個(gè)配置文件boa.conf,在Boa程序運(yùn)行前,必須首先編輯該文件,并將其放置于src/defines.h文件中SEVER–ROOT宏定義所定義的缺省目錄,或者在啟動(dòng)Boa時(shí)使用參數(shù)“-c”指定boa.conf的加載目錄。</p><p> 在boa.conf文件中需要進(jìn)行一些配置,下面作簡(jiǎn)要介紹:</p>
65、<p> Port:該參數(shù)為boa服務(wù)器運(yùn)行端口,缺省的端口為80。</p><p> ServerName:服務(wù)器名字。</p><p> DocumentRoot:HTML文檔根目錄。建議使用絕對(duì)路徑表示,如“/mnt/jffs2/web”,如果使用相對(duì)路徑,則它是相對(duì)服務(wù)器根目錄。 </p><p> ScriptAlias :指定CGI
66、程序所在目錄,一般所有的CGI腳本都要放在實(shí)際路徑里,用戶訪問執(zhí)行時(shí)輸入站點(diǎn)+虛擬路徑+CGI腳本名,本課題中CGI的路徑設(shè)為:ScriptAlias /cgi-bin//mnt/jffs2/web/i-bin/。</p><p> CGIPath: /bin:/usr/bin:/usr/local/bin,提供CGI程序的PATH環(huán)境變量值。</p><p> 用戶可以根據(jù)自己需要,
67、對(duì)boa.conf進(jìn)行修改,但必須要保證其他的輔助文件和設(shè)置必須和boa.conf里的配置相符,不然Boa就不能正常工作。 在上面的例子中,我們還需要?jiǎng)?chuàng)建日志文件所在目錄/var/log/boa,將mime.types文件拷貝 到/etc目錄。mime.types文件用來指明不同文件擴(kuò)展名對(duì)應(yīng)的MIME類型,一般 可以直接從Linux主機(jī)上拷貝一個(gè),大部分也都是在主機(jī)的/etc目錄下。</p><p> 4.7
68、 Linux下動(dòng)態(tài)Web頁面的實(shí)現(xiàn)</p><p> 本課題中通過CGI程序來獲取用戶的請(qǐng)求、查詢條件,使用HTML方式描述結(jié)果并直接回送到客戶端的瀏覽器上。生成動(dòng)態(tài)網(wǎng)頁的步驟:</p><p> (1) 用戶在瀏覽器中提出數(shù)據(jù)或查詢條件的請(qǐng)求,并執(zhí)行“提交”后,便將請(qǐng)求信息發(fā)送到網(wǎng)上相應(yīng)的Web服務(wù)器上; </p><p> (2) Web服務(wù)器收到這一請(qǐng)求
69、便激活一個(gè)CGI程序(程序是駐留在Web服務(wù)器上的一個(gè)程序); </p><p> (3) CGI程序調(diào)用該服務(wù)器下的所有程序或數(shù)據(jù)庫,并完成讀者需要的任務(wù),同時(shí)將處理結(jié)果送回CGI網(wǎng)關(guān)接口; </p><p> (4) 網(wǎng)關(guān)接口程序又將其結(jié)果轉(zhuǎn)換成該服務(wù)器能識(shí)別的HTML 文件格式,并確定CGI返回文檔的類型; </p><p> (5) Web服務(wù)器將其結(jié)
70、果送回瀏覽器中,瀏覽器進(jìn)行數(shù)據(jù)處理并顯示結(jié)果。</p><p> 由于C語言在平臺(tái)無關(guān)性上表現(xiàn)不錯(cuò)(幾乎在任何的系統(tǒng)平臺(tái)下都有其相應(yīng)編譯器),而且對(duì)大多數(shù)程序員而言都算得上很熟悉(不像Perl),因此,C是CGI編程的首選語言之一。CGI程序通常分為以下兩部分[9]:</p><p> 根據(jù)POST方法或GET方法從提交的表單中接受數(shù)據(jù)。本文中采用的是GET方法。CGI程序必須檢查RE
71、QUEST_METHOD環(huán)境變量以確定是否采用了POST方法,并決定是否要讀取STDIN。</p><p> 用printf()函數(shù)來產(chǎn)生HTML源代碼,并將經(jīng)過解碼后的數(shù)據(jù)正確地返回給瀏覽器。</p><p> 將CGI測(cè)試程序 cgi_test/tar.gz復(fù)制到/home/cvtech/jx2410/examples/目錄下。</p><p><b&
72、gt; 然后安裝源代碼:</b></p><p> 4.7.1 CGI程序分析</p><p><b> CGI程序見附錄</b></p><p> 1. 在cgi.c中定義了main()函數(shù):</p><p> 用“form_method = getRequestMethod();”將調(diào)用POST
73、/GET方法的信息存儲(chǔ)在form_method中,調(diào)用POST,則為1;調(diào)用GET,則為0。</p><p> 以下程序先定義了若采用GET方式則調(diào)用函數(shù)getGETvars();若采用POST方式則調(diào)用函數(shù)getPOSTvars來處理表單。</p><p> 打印HTML表單,最后清空ARM中的CGI程序使用的緩存。</p><p> 2.cgivars.c
74、:</p><p> 該程序中先首先將XX形式的十六進(jìn)制的數(shù)字(ASCII碼)轉(zhuǎn)換成字符,再按URL編碼規(guī)則解碼%XX轉(zhuǎn)換成字符。此部分程序?qū)⒃?.5.2中給出詳細(xì)分析。</p><p> 以下程序首先讀入字符串信息,比較字符串判斷采用GET還是POST方式,信息返回到form_method。</p><p> POST和GET方式處理表單的程序見附錄,如果請(qǐng)
75、求方法 REQUEST—METHOD的值為GET,CGI程序讀入環(huán)境變量QUESTRY—STRING;如果請(qǐng)求方法為POST,CGI程序就可確定數(shù)據(jù)來自標(biāo)準(zhǔn)輸入<stdin>,根據(jù)CONTENT—LENGTH的值確定從<stdin>讀入的數(shù)據(jù)流大小。在完成表單處理后調(diào)用函數(shù)cleanUp()來釋放緩存空間。</p><p> HTML表單的制作[11]htmllib.c及template
76、.c,介要分析如下:</p><p> 此行通過標(biāo)準(zhǔn)輸出將字符串</p><p> “Contenttype:text/html\n\n<HTML><HEAD><TITLE>%s</TITLE></HEAD>",title)傳送給Web服務(wù)器。它是一個(gè)MIME頭信息,它告訴Web服務(wù)器隨后的輸出是HTML源代碼。請(qǐng)注
77、意在這個(gè)頭信息中有兩個(gè)新行符,這是因?yàn)閃eb服務(wù)器需要在實(shí)際的文本信息開始之前先看見一個(gè)空行。</p><p> 在HTML中參數(shù) action 用以指明該 CGI 程式的位置,這樣此表單所填的資料才能正確傳給 CGI 作處理。傳送資料給 CGI 的的方式,可選值為 POST, GET,用method來定義,此處定義為POST方式。</p><p> <INPUT> 的參數(shù)
78、設(shè)定,type="Submit" 設(shè)定輸入方式為 Submit 或 Reset。value="submit"或者"Reset" ,這個(gè)值不是輸給 CGI 的,而是顯示在按鍵上,可以不用,傳送鍵的內(nèi)定值為 Submit Query,清除鍵的內(nèi)定值為 Reset。</p><p> 4.7.2 Form輸入的分析和解碼</p><p&g
79、t; 當(dāng)用戶提交一個(gè)HTML Form時(shí),Web瀏覽器首先對(duì)Form中的數(shù)據(jù)以名字/值對(duì)的形式進(jìn)行編碼,并發(fā)送給Web服務(wù)器,然后由Web服務(wù)器傳遞給CGI程序。其格式如下: </p><p> name1=value1&name2=value2&name3=value3&name4=value4&... </p><p> 其中名字是Form中定義的
80、INPUT、SELECT或TEXTAREA等標(biāo)置(Tag)名字,值是用戶輸入或選擇的標(biāo)置值。這種格式即為URL編碼,程序中需要對(duì)其進(jìn)行分析和解碼。要分析這種數(shù)據(jù)流,CGI程序必須首先將數(shù)據(jù)流分解成一組組的名字/值對(duì)。這可以通過在輸入流中查找下面的兩個(gè)字符來完成。 </p><p> 每當(dāng)找到字符=,標(biāo)志著一個(gè)Form變量名字的結(jié)束;每當(dāng)找到字符& ,標(biāo)志著一個(gè)Form變量值的結(jié)束。請(qǐng)注意輸入數(shù)據(jù)的最后一
81、個(gè)變量的值不以&結(jié)束。 </p><p> 一旦名字/值對(duì)分解后,還必須將輸入中的一些特殊字符轉(zhuǎn)換成相應(yīng)的ASCII字符。這些特殊字符是: </p><p> +:將+轉(zhuǎn)換成空格符; </p><p> %xx:用其十六進(jìn)制ASCII碼值表示的特殊字符。根據(jù)值xx將其轉(zhuǎn)換成相應(yīng)的ASCII字符。 </p><p> 對(duì)Form
82、變量名和變量值都要進(jìn)行這種轉(zhuǎn)換。下面是CGI中對(duì)Form數(shù)據(jù)進(jìn)行分析并將結(jié)果回送給Web服務(wù)器的程序的分析。</p><p> 上述程序首先將XX形式的十六進(jìn)制的數(shù)字(ASCII碼)轉(zhuǎn)換成字符,再按 URL編碼規(guī)則解碼%XX轉(zhuǎn)換成字符。 </p><p> 第五章 嵌入式Web服務(wù)器</p><p><b> 5.1 概述</b>&l
83、t;/p><p> 隨著計(jì)算機(jī)技術(shù)的發(fā)展,嵌入式系統(tǒng)已成為計(jì)算機(jī)領(lǐng)域的一格重要組成部分。隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,使得B/S(客戶端/服務(wù)器)應(yīng)用方式已成為一種潮流。它的基礎(chǔ)是客戶端要有一個(gè)瀏覽器程序,服務(wù)器端要有一個(gè)對(duì)應(yīng)的Web服務(wù)器。一般網(wǎng)站都采用大型的通用Web服務(wù)器,但對(duì)于一般的管理信息系統(tǒng)或中小型應(yīng)用系統(tǒng),所需的功能比較簡(jiǎn)單,如仍采用通用Web服務(wù)器,無疑是資源的浪費(fèi)。解決方法是使用功能相對(duì)簡(jiǎn)單,體積更小、消耗
84、資源更少的簡(jiǎn)單Web服務(wù)器,于是嵌入式Web服務(wù)器就應(yīng)運(yùn)而生了。</p><p> 5.2 Web服務(wù)器原理</p><p> 從功能上來講,Web服務(wù)器監(jiān)聽用戶機(jī)的服務(wù)請(qǐng)求,根據(jù)用戶請(qǐng)求的類型提供相應(yīng)得服務(wù)。用戶端使用Web瀏覽器和Web服務(wù)器進(jìn)行通信。Web服務(wù)器在接受到用戶端的請(qǐng)求后,處理用戶請(qǐng)求并返回需要的數(shù)據(jù)。這些數(shù)據(jù)通常以格式固定、含有文本和圖片的頁面出現(xiàn)在用戶端瀏覽器。&
85、lt;/p><p> 5.3 嵌入式Web服務(wù)器實(shí)現(xiàn)原理</p><p> 嵌入式Web服務(wù)器是指將Web服務(wù)器引入到現(xiàn)場(chǎng)嵌入式設(shè)備中,并駐留其中有限的代碼空間內(nèi)。與傳統(tǒng)的Web應(yīng)用相比,簡(jiǎn)化了系統(tǒng)結(jié)構(gòu),并將信息采集和信息發(fā)布都集成到現(xiàn)場(chǎng)的嵌入式設(shè)備中。在相應(yīng)得軟硬件平臺(tái)支持下,利用標(biāo)準(zhǔn)的接口形式和通信協(xié)議,內(nèi)嵌于嵌入式設(shè)備的Web服務(wù)器可以向任何接入到它所在網(wǎng)絡(luò)的合法用戶提供統(tǒng)一的基于瀏
86、覽器方式的操作和控制界面,此時(shí)瀏覽器成了設(shè)備的前端控制板。當(dāng)前在嵌入式應(yīng)用領(lǐng)域,嵌入式系統(tǒng)轉(zhuǎn)變?yōu)榍度胧絎ebServer,大體可分為2種實(shí)現(xiàn)方案[1]:(1)基于網(wǎng)關(guān)服務(wù)器的嵌入式設(shè)備Internet接入;(2)直接實(shí)現(xiàn)TCP/IP的嵌入式設(shè)備Internet接入。本課題中采用第二種實(shí)現(xiàn)方案。</p><p> 5.3.1 TCP/IP協(xié)議</p><p> TCP/IP(傳輸控制協(xié)議
87、/網(wǎng)間協(xié)議)是一種網(wǎng)絡(luò)通信協(xié)議,它規(guī)范了網(wǎng)絡(luò)上的所有通信設(shè)備,尤其是一個(gè)主機(jī)與另一個(gè)主機(jī)之間的數(shù)據(jù)往來格式以及傳送方式。TCP/IP是Internet的基礎(chǔ)協(xié)議,也是一種電腦數(shù)據(jù)打包和尋址的標(biāo)準(zhǔn)方法。在數(shù)據(jù)傳送中,可以形象地理解為有兩個(gè)信封,TCP和IP就像是信封,要傳遞的信息被劃分成若干段,每一段塞入一個(gè)TCP信封,并在該信封面上記錄有分段號(hào)的信息,再將TCP信封塞入IP大信封,發(fā)送上網(wǎng)。在接受端,一個(gè)TCP軟件包收集信封,抽出數(shù)據(jù),
88、按發(fā)送前的順序還原,并加以校驗(yàn),若發(fā)現(xiàn)差錯(cuò),TCP將會(huì)要求重發(fā)。因此,TCP/IP在Internet中幾乎可以無差錯(cuò)地傳送數(shù)據(jù)。</p><p> 在TCP/IP協(xié)議基礎(chǔ)上建立的HTTP超文本傳輸協(xié)議、FTP文件傳輸協(xié)議、Telnet遠(yuǎn)程登錄協(xié)議以及SMTP郵件協(xié)議等協(xié)議簇構(gòu)成了Web技術(shù)的核心。同時(shí),Web服務(wù)器同Web瀏覽器之間的通信是通過HTTP協(xié)議進(jìn)行的,這一通用的、無狀態(tài)的、面向?qū)ο蟮膮f(xié)議HTTP協(xié)議
89、是Web瀏覽器和Web服務(wù)器之間的應(yīng)用層協(xié)議,也是基于TCP/IP協(xié)議的。為了勾勒TCP/IP在現(xiàn)實(shí)網(wǎng)絡(luò)世界中所扮演的角色,請(qǐng)考慮當(dāng)使用HTTP的Web瀏覽器從連接在Internet上的Web服務(wù)器上獲取一頁HTML數(shù)據(jù)時(shí)所發(fā)生的情況。為形成同Web服務(wù)器的虛鏈路,瀏覽器使用一種被抽象地稱為稱為套接口(socket)的高層軟件。為了獲取Web頁,它通過向套接口寫入HTTPGET命令來向Web服務(wù)器發(fā)出該指令。接下來套接口軟件使用TCP協(xié)
90、議向Web服務(wù)器發(fā)出包含GET命令的字節(jié)流和位流,TCP將數(shù)據(jù)分段并將各獨(dú)立段傳到IP模塊,該模塊將數(shù)據(jù)段轉(zhuǎn)換成數(shù)據(jù)報(bào)并發(fā)送給Web服務(wù)器。</p><p> 嵌入式系統(tǒng)TCP/IP協(xié)議選擇時(shí)遵循的原則是:首先,嵌入式系統(tǒng)中實(shí)現(xiàn)的協(xié)議要根據(jù)系統(tǒng)自身的特點(diǎn)以及功能來設(shè)計(jì)自己的協(xié)議簇,實(shí)現(xiàn)與需要有關(guān)的部分,不使用的協(xié)議一概不考慮;其次,對(duì)于要使用的協(xié)議也根據(jù)實(shí)際應(yīng)用情況做取舍??紤]到嵌入式Web服務(wù)器的硬件處理速度
91、慢并且存儲(chǔ)容量相對(duì)較小的條件限制,在TCP/IP協(xié)議棧中主要能夠?qū)崿F(xiàn)ARP,IP,ICMP,TCP,HTTP協(xié)議即可[6]。</p><p> 5.4 嵌入式Web服務(wù)器Boa</p><p> 5.4.1 Boa概述</p><p> 目前有很多功能強(qiáng)大的Web服務(wù)器,主要包括Apache, httpd, thttpd和Boa[5]</p>&
92、lt;p> 等幾種。其中httpd最小,只需幾千字節(jié)的空間,功能簡(jiǎn)單,但不支持CGI;Apache,thttpd和Boa支持CGI。其中Boa是一個(gè)單任務(wù)的小型HTTP服務(wù)器,源代碼開放、性能優(yōu)秀,運(yùn)行所需空間僅為140 KB 左右,特別適合應(yīng)用在嵌入式系統(tǒng)中。雖然本文中所用到的嵌入式Linux的Web服務(wù)器也可以通過自行裁剪Apache服務(wù)器得到,但是Apache服務(wù)器是采用傳統(tǒng)的生成子進(jìn)程的方式來提供服務(wù)的形式,這種形式比較
93、適合服務(wù)比較復(fù)雜的情況,不適合嵌入式設(shè)備低內(nèi)存和主頻的情況。Boa與Apache等高性能的Web服務(wù)器主要的區(qū)別在于它們是單進(jìn)程服務(wù)器,只有在完成一個(gè)用戶請(qǐng)求后才能響應(yīng)另一個(gè)用戶的請(qǐng)求,而無法并發(fā)響應(yīng),但這在嵌入式設(shè)備的應(yīng)用場(chǎng)合里已經(jīng)足夠了。而且從對(duì)CGI支持的性能指標(biāo)[15]可知,Boa對(duì)CGI的支持效果最佳。除此之外,Boa與其他Web服務(wù)器相比主要有以下幾個(gè)優(yōu)點(diǎn):</p><p> 對(duì)CGI程序無需設(shè)置R
94、EMOTE- HOST環(huán)境變量,在REMOTE-ADDR變量中已經(jīng)提供了IP 地址,可以直接使用gethostbyaddr函數(shù)或變量,從而使Boa較其他Web服務(wù)器更易于使用;</p><p> ?、?在Boa中對(duì)Server2side模塊可以剪裁,以提高系統(tǒng)運(yùn)行速度,其內(nèi)部的“字節(jié)流執(zhí)行引擎”采用了非完全的圖靈機(jī)方式實(shí)現(xiàn);</p><p> ?、?不存在訪問控制特征,采用符號(hào)連接方式進(jìn)行
95、控制,可以對(duì)任何可以讀取的文件提供服務(wù),因此速度更快。所以,本課題中選擇Boa作為嵌入式Linux系統(tǒng)的Web服務(wù)器.</p><p> 5.4.2 Boa的功能實(shí)現(xiàn)</p><p> 嵌入式Web服務(wù)器Boa和普通Web服務(wù)器一樣, 能夠完成接收客戶端請(qǐng)求、分析請(qǐng)求、響應(yīng)請(qǐng)求、向客端返回請(qǐng)求結(jié)果等任務(wù)。它的工作過程主要包括:</p><p> (a) 完成W
96、eb服務(wù)器的初始化工作, 如創(chuàng)建環(huán)境變量、創(chuàng)建TCP套接字、綁定端口、開始偵聽、進(jìn)入循環(huán)結(jié)構(gòu),以及等待接收客戶瀏覽器的連接請(qǐng)求;</p><p> (b)當(dāng)有客戶端連接請(qǐng)求時(shí),Web服務(wù)器負(fù)責(zé)接收客戶端請(qǐng)求,并保存相關(guān)請(qǐng)求信息;</p><p> (c)在接收到客戶端的連接請(qǐng)求之后,分析客戶端請(qǐng)求,解析出請(qǐng)求的方法、URL目標(biāo)、可選的查詢信息及表單信息,同時(shí)根據(jù)請(qǐng)求做出相應(yīng)的處理;&l
97、t;/p><p> (d)Web服務(wù)器完成相應(yīng)處理后,向客戶端瀏覽器發(fā)送響應(yīng)信息,關(guān)閉與客戶機(jī)的TCP連接[5]。</p><p> 嵌入式Web服務(wù)器Boa根據(jù)請(qǐng)求方法的不同,做出不同的響應(yīng)。如果請(qǐng)求方法為HEAD, 則直接向?yàn)g覽器返回響應(yīng)首部;如果請(qǐng)求方法為GET,則在返回響應(yīng)首部的同時(shí), 將客戶端請(qǐng)求的URL目標(biāo)文件從服務(wù)器上讀出,并且發(fā)送給客戶端瀏覽器;如果請(qǐng)求方法為POST,則將
98、客戶發(fā)送過來的表單信息傳送給相應(yīng)的CGI程序,作為CGI的參數(shù)來執(zhí)行CGI程序,并將執(zhí)行結(jié)果發(fā)送給客戶端瀏覽器。Boa的功能實(shí)現(xiàn)也是通過建立連接、綁定端口、進(jìn)行偵聽、請(qǐng)求處理等來實(shí)現(xiàn)的。本課題中BOA整體工作流程如圖2所示:</p><p> 圖2.Web服務(wù)器Boa的執(zhí)行流程</p><p><b> 第六章 CGI技術(shù)</b></p><p
99、><b> 6.1 CGI概述</b></p><p> 現(xiàn)今社會(huì)的主要WEB程序的開發(fā)語言有ASP、ASP.NET、JSP、PHP等,然而此等程序都需要大型的應(yīng)用平臺(tái)的支持,這些遠(yuǎn)遠(yuǎn)超出了嵌入式系統(tǒng)的特點(diǎn)。現(xiàn)在開發(fā)的嵌入式系統(tǒng)以CGI(公用網(wǎng)關(guān)接口,Common Gateway Interface)為主。</p><p> CGI(通
100、用網(wǎng)關(guān)接口)是用于Web服務(wù)器和外部應(yīng)用程序之間信息交互的標(biāo)準(zhǔn)接口。Web服務(wù)器原本是為靜態(tài)HTML文檔以及其他相關(guān)靜態(tài)文件而設(shè)計(jì)的。如果一個(gè)Web服務(wù)器的功能只限于提供靜態(tài)頁面的花,那么與之通信的Web瀏覽器就只能顯示在頁面請(qǐng)求和顯示過程之間文檔內(nèi)容不變化的頁面。CGI規(guī)范在Web服務(wù)器和瀏覽器(又稱客戶機(jī))之間建立了標(biāo)準(zhǔn)的信息交換方式。使用它使得信息在瀏覽器或服務(wù)器與外部程序之間流動(dòng),外部程序在處理之后將處理結(jié)果送回用戶端瀏覽器。外
101、部程序通常稱為CGI程序、CGI腳本、CGI應(yīng)用程序或簡(jiǎn)稱網(wǎng)關(guān),因?yàn)樗\(yùn)用了CGI規(guī)范并為實(shí)現(xiàn)Web平臺(tái)的功能而專門設(shè)計(jì)。</p><p> 在HTML中,當(dāng)客戶填寫了表單,并按下了發(fā)送(submit)按鈕后,表單的內(nèi)容被發(fā)送到了服務(wù)器端,一般的,這時(shí)就需要有一個(gè)服務(wù)器端腳本來對(duì)表單的內(nèi)容進(jìn)行一些處理。沒有了CGI,Web的世界就完全失去了它的交互性,所有的信息都變成單向的了,而不能夠有任何的反饋。</p
102、><p> 6.2 CGI工作原理</p><p> 系統(tǒng)嵌入式Web服務(wù)器通過CGI程序來獲取用戶的請(qǐng)求、查詢條件,使用HTML方式描述結(jié)果并直接回送到客戶端的瀏覽器上,此過程中瀏覽器將用戶輸入的數(shù)據(jù)送到Web服務(wù)器,Web服務(wù)器將數(shù)據(jù)使用STDIN(標(biāo)準(zhǔn)輸入)送到CGI程序。在執(zhí)行CGI程序后,會(huì)訪問數(shù)據(jù)庫的記錄,最后使用STDOUT輸出HTML形式的結(jié)果文件,經(jīng)Web服務(wù)器送回瀏覽器
103、顯示給用戶。使用CGI實(shí)現(xiàn)客戶與服務(wù)器的交互分以下幾個(gè)標(biāo)準(zhǔn)步驟:</p><p> (1) Web客戶(瀏覽器)通過URL與Web服務(wù)器相連;</p><p> (2) 服務(wù)發(fā)送HTML(和別的組成請(qǐng)求頁面的文件)給客戶,一旦頁面內(nèi)容傳完,這個(gè)連接自動(dòng)斷開;</p><p> (3) 在客戶方,HTML腳本提示用戶做動(dòng)作或輸入,當(dāng)用戶響應(yīng)后客戶請(qǐng)求Web服務(wù)器
104、建立一個(gè)新的連接;</p><p> (4) 一旦連接建立,客戶把用戶輸入的數(shù)據(jù)傳給Web服務(wù)器;</p><p> (5) Web服務(wù)器把這些信息和別的進(jìn)程變量傳給由HTML以URL形式提交的CGI程序;</p><p> (6)CGI程序根據(jù)輸入作出相應(yīng)的操作,產(chǎn)生對(duì)客戶的響應(yīng)(一般以一個(gè)HTML文檔的形式),并將其傳給Web服務(wù)器;</p>
105、<p> (7) Web服務(wù)器把應(yīng)答數(shù)據(jù)傳給客戶,并關(guān)閉連接;</p><p> 在客戶方,用HTML標(biāo)記的方式來觸發(fā)處理過程,該標(biāo)記和其它標(biāo)記的解釋方式一樣。在服務(wù)器下,Linux環(huán)境變量、命令執(zhí)行參數(shù)和標(biāo)準(zhǔn)輸入輸出文件都可用于Web服務(wù)器與CGI程序之間的通訊。</p><p> CGI工作過程圖3所示:</p><p> 圖3. CGI工作
106、原理</p><p> 其中CGI與表單之間的信息交互方法有兩種模式:“GET”和“POST”。選擇哪一種模式取決于表單( FORM)的“METHOD”字段的設(shè)置,如果METHOD設(shè)定為GET,CGI程序從環(huán)境變量QUER_STRING中獲取數(shù)據(jù).為了解釋數(shù)據(jù)和執(zhí)行需要的動(dòng)作,CGI程序必須要分析(處理)此字符串;如果METHOD設(shè)定為POST,數(shù)據(jù)會(huì)以STDIN方式送入CGI接口。服務(wù)器在數(shù)據(jù)的最后沒有使用E
107、OF字符標(biāo)記,因此程序?yàn)榱苏_地讀取STDIN,必須使用CONTENT_LENGTH值。在本課題中CGI程序采用的是POST方法。如果想從服務(wù)器獲得數(shù)據(jù)并且不改變服務(wù)器上的數(shù)據(jù)時(shí),應(yīng)該選用GET方法;也有例外,當(dāng)傳輸?shù)臄?shù)據(jù)很長(zhǎng)時(shí),選用POST方法較好;使用GET方式編寫CGI程序會(huì)更加簡(jiǎn)單,但是POST方式則更先進(jìn);當(dāng)發(fā)送的數(shù)據(jù)將改變Web服務(wù)器端的數(shù)據(jù)時(shí),或者想給CGI程序傳輸大量數(shù)據(jù)(一般地,超過1024字節(jié),這是URL的極限長(zhǎng)度
108、)時(shí),應(yīng)該選用POST方法[14]。</p><p> 第七章 系統(tǒng)功能的測(cè)試</p><p> 在移植完Boa服務(wù)器后就是測(cè)試它能否正常工作,靜態(tài)HTML頁面能否正常訪問,還將測(cè)試動(dòng)態(tài)Web頁面能否正常訪問。本課題中將采用NFS方式來進(jìn)行測(cè)試工作。</p><p> 7.1 測(cè)試Web服務(wù)器 </p><p> Boa測(cè)試開發(fā)環(huán)境如
109、圖25所示:</p><p> 圖25.Boa測(cè)試開發(fā)環(huán)境</p><p> 可以將嵌入式目標(biāo)系統(tǒng)上的/etc目錄復(fù)制到主機(jī)的NFS共享目錄下,然后將NFS共享目錄下的etc重新mount為目標(biāo)系統(tǒng)上的/etc目錄。這樣就可以在主機(jī)上對(duì)etc目錄下的各種配置文件進(jìn)行修改而立刻在目標(biāo)系統(tǒng)上生效。</p><p> 先前設(shè)定JXARM9-2410的IP地址為:19
110、2.168.1.45,且在JXARM9-2410的JFFS2文件系統(tǒng)中已經(jīng)預(yù)先燒寫好了配置好的boa.conf文件,位于/mnt/jffs2/etc/目錄。</p><p> 啟動(dòng)JXARM9-2410 Linux,然后按如下步驟進(jìn)行:</p><p> 將Boa的執(zhí)行文件復(fù)制到tftpboot目錄下</p><p> 將主機(jī)下的tftpboot目錄掛載到目標(biāo)
111、板的nfs目錄下</p><p><b> 啟動(dòng)Boa服務(wù)器</b></p><p> 根據(jù)上文中boa.conf的配置,此時(shí)在目標(biāo)板的mnt/jffs2/web目錄下包含測(cè)試主頁面index.html、存放各種圖片的目錄IMAGES以及CGI腳本的存放目錄cgi-bin。</p><p> 啟動(dòng)后測(cè)試Boa服務(wù)器,在網(wǎng)頁瀏覽器中訪問如下
112、網(wǎng)址:http://192.168.1.45/</p><p> 如果網(wǎng)絡(luò)連接正常,且Boa啟動(dòng)正常的話,將可以看到</p><p> /mnt/jffs2/web/index.html網(wǎng)頁,如圖26所示,表示靜態(tài)HTML頁面測(cè)試通過??梢孕薷脑摼W(wǎng)頁,并替換成所需要的網(wǎng)頁,然后刷新瀏覽器顯示。</p><p> 圖26.index.html網(wǎng)頁</p&g
113、t;<p> 7.2 動(dòng)態(tài)Web頁面測(cè)試</p><p> 在JXARM9-2410 Linux的命令行中輸入如下命令, 將主機(jī)的tftpboot目錄掛載到目標(biāo)板的nfs目錄:</p><p> 上述命令首先將編寫好的CGI程序cgi_test放置boa.conf定義的cgi-bin目錄下。本課題中路徑為/mnt/jffs2/web/cgi-bin/,然后啟動(dòng)boa服務(wù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- arm平臺(tái)嵌入式web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
- ARM平臺(tái)嵌入式WEB服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn).doc
- arm平臺(tái)嵌入式web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)-畢業(yè)論文
- 基于ARM平臺(tái)的嵌入式WEB服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- arm平臺(tái)嵌入式web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)-本科畢業(yè)論文
- 嵌入式web服務(wù)器設(shè)計(jì)與實(shí)現(xiàn)
- 基于arm的嵌入式web服務(wù)器設(shè)計(jì)
- 探析嵌入式web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
- 基于ARM平臺(tái)的嵌入式Web服務(wù)器的研究與實(shí)現(xiàn).pdf
- 嵌入式web服務(wù)器畢業(yè)設(shè)計(jì) —伍柏林_0515
- 基于ARM的嵌入式uClinux系統(tǒng)設(shè)計(jì)與Web服務(wù)器應(yīng)用的實(shí)現(xiàn).pdf
- 基于ARM7的嵌入式系統(tǒng)設(shè)計(jì)與Web服務(wù)器的實(shí)現(xiàn).pdf
- 基于DeviceNet的嵌入式Web服務(wù)器設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于ARM的嵌入式視頻服務(wù)器設(shè)計(jì)與實(shí)現(xiàn).pdf
- 嵌入式Web服務(wù)器在嵌入式實(shí)驗(yàn)平臺(tái)上的實(shí)現(xiàn).pdf
- 基于嵌入式的Web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 嵌入式web服務(wù)器
- 基于ARM和Linux的嵌入式Web服務(wù)器研究與實(shí)現(xiàn).pdf
- 基于WEB的嵌入式視頻服務(wù)器設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于FPGA的嵌入式Web服務(wù)器設(shè)計(jì)與實(shí)現(xiàn).pdf
評(píng)論
0/150
提交評(píng)論