已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本科畢業(yè)設(shè)計(jì)(論文)資料題目名稱ARM平臺(tái)嵌入式WEB服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)學(xué)院(部)計(jì)算機(jī)與通信學(xué)院摘要論文主要介紹了基于ARM9的嵌入式WEB服務(wù)器BOA的軟、硬件設(shè)計(jì)及其實(shí)現(xiàn),其中硬件部分的核心是三星的S3C2440為處理器。最后成果形式為可以遠(yuǎn)程訪問(wèn)的WEBSERVER嵌入式服務(wù)器。BOA是一款單任務(wù)的HTTP服務(wù)器。與其他傳統(tǒng)的WEB服務(wù)器不同的是當(dāng)有連接請(qǐng)求到來(lái)時(shí),它并不為每個(gè)連接單獨(dú)創(chuàng)建進(jìn)程,也不通過(guò)復(fù)制自身進(jìn)程來(lái)處理多鏈接。而是通過(guò)建立HTTP請(qǐng)求列表來(lái)處理多路HTTP連接請(qǐng)求。同時(shí)它只為CGI程序創(chuàng)建新的進(jìn)程,這樣就在最大程度上節(jié)省了系統(tǒng)資源,這對(duì)嵌入式系統(tǒng)來(lái)說(shuō)至關(guān)重要。同時(shí)它還具有自動(dòng)生成目錄、自動(dòng)解壓文件等功能。因此,BOA在嵌入式系統(tǒng)中具有很高的應(yīng)用價(jià)值。關(guān)鍵詞ARM;LINUX;嵌入式WEB服務(wù)器;CGIABSTRACTTHISPAPERHASMAINLYDEVELOPEDTHESOFTWAREHARDWAREDESIGNANDREALIZATIONOFTHEEMBEDDEDWEBSERVERBOABASEDONARMANDTHECOREOFTHEHARDWAREPARTISS3C2440MICROPROCESSORPRODUCEDBYSAMSUNGTHEFINALACHIEVEMENTISTHEEMBEDDEDWEBSERVERWHICHCANREMOTEVISITBOAISASINGLETASKINGHTTPSERVERTHATMEANSTHATUNLIKETRADITIONALWEBSERVERS,ITDOESNOTFORKFOREACHINCOMINGCONNECTION,NORDOESITFORKMANYCOPIESOFITSELFTOHANDLEMULTIPLECONNECTIONSITINTERNALLYMULTIPLEXESALLOFTHEONGOINGHTTPCONNECTIONSANDFORKSONLYFORCGIPROGRAMS,THISISVERYIMPORTANTTOEMBEDDEDSYSTEMATTHESAMETIME,ITALSOHASTHEFUNCTIONOFAUTOMATICDIRECTORYGENERATION、AUTOMATICFILEGUNZIPPINGANDSOONSOBOAISOFHIGHLYVALUEINTHEEMBEDDEDSYSTEMAPPLICATIONKEYWORDSARM;LINUX;EMBEDDEDWEBSERVER;CGI第一章引言6第二章課題背景721嵌入式系統(tǒng)簡(jiǎn)介822嵌入式系統(tǒng)和LINUX823ARM9硬件平臺(tái)9231ARM簡(jiǎn)介9232MINI2440嵌入式開(kāi)發(fā)板9第三章建立嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境1021在VMWARE下安裝UBUNTU12041122虛擬機(jī)的配置12221安裝配置TFTP服務(wù)器12222配置NFS服務(wù)器13223交叉編譯器的配置13第四章系統(tǒng)移植1441UBOOT移植1442UBOOT燒寫14431UBOOT的功能14432使用DNW燒寫UBOOT14433使用HJTAG燒寫UBOOT1543LINUX內(nèi)核移植15431LINUXKERNEL的下載16433LINUX內(nèi)核的配置和編譯1644文件系統(tǒng)的移植1745加載LINUX內(nèi)核映像1746BOAWEB服務(wù)器的移植18461BOAWEB服務(wù)器的建立1847LINUX下動(dòng)態(tài)WEB頁(yè)面的實(shí)現(xiàn)19471CGI程序分析19472FORM輸入的分析和解碼21第五章嵌入式WEB服務(wù)器2251概述2252WEB服務(wù)器原理2353嵌入式WEB服務(wù)器實(shí)現(xiàn)原理23531TCP/IP協(xié)議2354嵌入式WEB服務(wù)器BOA24541BOA概述24542BOA的功能實(shí)現(xiàn)24第六章CGI技術(shù)2561CGI概述2562CGI工作原理26第七章系統(tǒng)功能的測(cè)試2871測(cè)試WEB服務(wù)器2872動(dòng)態(tài)WEB頁(yè)面測(cè)試29結(jié)束語(yǔ)32致謝33參考文獻(xiàn)34附錄35第一章引言隨著計(jì)算機(jī)技術(shù)的發(fā)展,嵌入式系統(tǒng)已成為計(jì)算機(jī)領(lǐng)域的一格重要組成部分。以ARM體系結(jié)構(gòu)設(shè)計(jì)的微處理器具有高性能、低功耗和低成本的特點(diǎn),它廣泛應(yīng)用于嵌入式系統(tǒng)設(shè)計(jì)領(lǐng)域,是目前最廣泛的32位微處理器。以前設(shè)備控制系統(tǒng)一般是通過(guò)通信線路進(jìn)行的,其通信介質(zhì)、通信協(xié)議、相關(guān)軟件和硬件都是專用的,而INTERNET技術(shù)的發(fā)展使嵌入式設(shè)備的遠(yuǎn)程控制和管理方式有了改變。不需要專用的通信線路,并且傳輸?shù)男畔⒉痪窒抻跀?shù)據(jù)信號(hào),還有聲音和圖像。最終要的是其通信協(xié)議是標(biāo)準(zhǔn)且公開(kāi)的。隨著WEB技術(shù)的發(fā)展,幾乎改變了現(xiàn)在的信息表達(dá)形式,很多應(yīng)用都是基于WEB技術(shù)的。由于HTML語(yǔ)言的標(biāo)準(zhǔn)統(tǒng)一性,只要在嵌入式設(shè)備中有一個(gè)微型服務(wù)器,就可以使用任意一種WEB瀏覽器接收和發(fā)送信息。所以如何設(shè)計(jì)這種特別的WEB服務(wù)器,如何在嵌入式設(shè)備中安裝WEB服務(wù)器,就成了嵌入式WEB服務(wù)器的發(fā)展和研究方向。對(duì)于嵌入式WEB服務(wù)器的研究和應(yīng)用,其意義是重大的,它為我們管理、控制和監(jiān)測(cè)各種各樣的設(shè)備提供了一個(gè)很好的途徑。這種設(shè)備可以是具有有限內(nèi)存資源的8位或16位系統(tǒng),已足夠提供一個(gè)用戶界面,而且這種方式是基于INTERNET的。這種設(shè)備可以在世界任何一個(gè)地方,只要它連入INTERNET就能夠控制它。第二章課題背景這章對(duì)嵌入式系統(tǒng)作了定義,詳細(xì)介紹了嵌入式LINUX以及嵌入式LINUX在現(xiàn)代嵌入式系統(tǒng)中的地位,最后介紹了本次課題的硬件平臺(tái)。21嵌入式系統(tǒng)簡(jiǎn)介嵌入式系統(tǒng)被定義為以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。在制造工業(yè)、過(guò)程控制、通訊、儀器、儀表、汽車、船舶、航空、航天、軍事裝備、消費(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)就決定了它必然是一個(gè)技術(shù)密集、資金密集、高度分散、不斷創(chuàng)新的知識(shí)集成系統(tǒng)。22嵌入式系統(tǒng)和LINUX隨著微處理器的產(chǎn)生,價(jià)格低廉、結(jié)構(gòu)小巧的CPU和外設(shè)連接提供了穩(wěn)定可靠的硬件架構(gòu),那么限制嵌入式系統(tǒng)發(fā)展的瓶頸就突出表現(xiàn)在了軟件方面。盡管從八十年代末開(kāi)始,陸續(xù)出現(xiàn)了一些嵌入式操作系統(tǒng),比較著名的有VXWORK、PSOS、NUCLEUS和WINDOWSCE。但這些專用操作系統(tǒng)都是商業(yè)化產(chǎn)品,其高昂的價(jià)格使許多生產(chǎn)低端產(chǎn)品的小公司望而卻步;而且源代碼封閉性也大大限制了開(kāi)發(fā)者的積極性。另外結(jié)合國(guó)內(nèi)實(shí)情,當(dāng)前國(guó)家對(duì)自主操作系統(tǒng)的大力支持,也為源碼開(kāi)放的LINUX的推廣提供的廣闊的發(fā)展前景。還有,對(duì)上層應(yīng)用開(kāi)發(fā)者而言,嵌入式系統(tǒng)需要的是一套高度簡(jiǎn)練、界面友善、質(zhì)量可靠、應(yīng)用廣泛、易開(kāi)發(fā)、多任務(wù),并且價(jià)格低廉的操作系統(tǒng)。在不久的將來(lái),從冰箱到收音機(jī)都會(huì)內(nèi)置處理器。因?yàn)長(zhǎng)INUX的開(kāi)放性,許多人認(rèn)為L(zhǎng)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)潛力與醞釀的無(wú)限商機(jī)必然會(huì)吸引眾多的廠商進(jìn)入這一領(lǐng)域。LINUX為嵌入操作系統(tǒng)提供了一個(gè)極有吸引力的選擇,它是個(gè)和UNIX相似、以核心為基礎(chǔ)的、完全內(nèi)存保護(hù)、多任務(wù)多進(jìn)程的操作系統(tǒng)。支持廣泛的計(jì)算機(jī)硬件,包括X86,ALPHA,SPARC,MIPS,PPC,ARM,NEC,MOTOROLA等現(xiàn)有的大部分芯片。程式源碼全部公開(kāi),任何人可以修改并在GNU通用公共許可證GNUGENERALPUBLICLICENSE下發(fā)行,這樣,開(kāi)發(fā)人員可以對(duì)操作系統(tǒng)進(jìn)行定制,再也不必?fù)?dān)心像MSWINDOWS操作系統(tǒng)中“后門“的威脅。同時(shí)由于有GPL的控制,大家開(kāi)發(fā)的東西大都相互兼容,不會(huì)走向分裂之路。LINUX用戶遇到問(wèn)題時(shí)可以通過(guò)INTERNET向網(wǎng)上成千上萬(wàn)的LINUX開(kāi)發(fā)者請(qǐng)教,這使最困難的問(wèn)題也有辦法解決。LINUX帶有UNIX用戶熟悉的完善的開(kāi)發(fā)工具,幾乎所有的UNIX系統(tǒng)的應(yīng)用軟件都已移植到了LINUX上。LINUX還提供了強(qiáng)大的網(wǎng)絡(luò)功能,有多種可選擇窗口管理器(XWINDOWS)。其強(qiáng)大的語(yǔ)言編譯器GCC、G等也可以很容易得到。不但成熟完善、而且使用方便7。選擇LINUX的原因1可應(yīng)用于多種硬件平臺(tái)。LINUX已經(jīng)被移植到多種硬件平臺(tái),這對(duì)受開(kāi)銷、時(shí)間限制的研究與開(kāi)發(fā)項(xiàng)目是很有吸引力的。原型可以在標(biāo)準(zhǔn)平臺(tái)上開(kāi)發(fā)然后移植到具體的硬件上,加快了軟件與硬件的開(kāi)發(fā)過(guò)程。2LINUX可以隨意地配置不需要任何的許可證或商家的合作關(guān)系。3它是免費(fèi)的,源代碼可以得到。這是最吸引人的。毫無(wú)疑問(wèn),這會(huì)節(jié)省大量的開(kāi)發(fā)費(fèi)用。4它本身內(nèi)置網(wǎng)絡(luò)支持。5LINUX的高度模塊化使添加部件非常容易。6LINUX在臺(tái)式機(jī)上的成功,使大家看到了LINUX在嵌入式系統(tǒng)中的輝煌前景。23ARM9硬件平臺(tái)231ARM簡(jiǎn)介廣義地講,凡是帶有微處理器的專用軟硬件系統(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ù)的名字,目前非常流行的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)域。ARM9系列微處理器在高性能和低功耗特性方面提供最佳的性能。它具有以下特點(diǎn)提供11MIPS/MHZ的5級(jí)流水線結(jié)構(gòu);支持32位ARM指令集和16位THUMB指令集;支持32位高速AMBA總線接口;全性能MMU,支持WINDOWSCE、LINUX、PALMOS等主流嵌入式操作系統(tǒng);MPU支持實(shí)時(shí)操作系統(tǒng);支持?jǐn)?shù)據(jù)CACHE和指令CACHE,具有更高的指令和數(shù)據(jù)處理能力。ARM9系列微處理器主要應(yīng)用于無(wú)線設(shè)備、儀器儀表、安全系統(tǒng)、機(jī)頂盒、高端打印機(jī)、數(shù)字照相機(jī)和數(shù)字?jǐn)z像機(jī)等。它包含ARM920T、ARM922T和ARM940T三種類型,以適用于不同的應(yīng)用場(chǎng)合。S3C2410X是一款由SAMSUNG公司設(shè)計(jì)的低功耗、高集成度的基于ARM920T核的微處理器。這款芯片集成了以下部件16KB指令CACHE、16KB數(shù)據(jù)CACHE、MMU、外部存儲(chǔ)控制器、LCD控制器(STN和TFT)、NANDFLASH控制器、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)用于PDA、移動(dòng)通信、路由器、工業(yè)控制等領(lǐng)域3。232MINI2440嵌入式開(kāi)發(fā)板MINI2440是一套硬軟件集成的、基于ARM的完整開(kāi)發(fā)板,該系統(tǒng)包含豐富的硬件資源、完善而優(yōu)越的調(diào)試手段和詳盡的資料9。MINI2440目標(biāo)處理器采用SAMSUNG公司的S3C2440微處理器,是友善之臂公司出品的一款商業(yè)性質(zhì)的開(kāi)發(fā)板,嵌入式開(kāi)發(fā)的所有過(guò)程都可在該環(huán)境下完成。系統(tǒng)有以下組成部分1ADTIDE集成開(kāi)發(fā)環(huán)境;2各種連接線、電源適配器以及學(xué)習(xí)光盤等;3教學(xué)實(shí)驗(yàn)系統(tǒng)配套光盤。MINI2440開(kāi)發(fā)板模型如圖1所示圖1開(kāi)發(fā)板模型示意圖第三章建立嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境本章詳細(xì)介紹了嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境的建立,LINUX內(nèi)核的編譯,目標(biāo)板中UBOOT的燒寫等。21在VMWARE下安裝UBUNTU1204安裝過(guò)程很簡(jiǎn)單,在網(wǎng)關(guān)配置中我選的是橋接,安裝完后如圖所示4安裝VMWARETOOLS。進(jìn)入系統(tǒng)后,點(diǎn)擊虛擬機(jī)上的安裝VMWARETOOLS打開(kāi)終端(應(yīng)用程序附件終端)。在命令行輸入“LS”后將列出文件夾文件;接著輸入“CDVMWARETOOLSDISTRIB”指定到此文件夾,接著輸入“LS”列出此文件夾內(nèi)容,接著輸入“SUDO/VMWAREINSTALLPL”,輸入用戶密碼便可開(kāi)始安裝了。安裝完成后重啟,安裝VMTOOL可以實(shí)現(xiàn)虛擬機(jī)和物理機(jī)之間的文件共享。22虛擬機(jī)的配置221安裝配置TFTP服務(wù)器1、安裝相關(guān)軟件包APTGETINSTALLTFTPD(服務(wù)端)APTGETINSTALLTFTP(客戶端)APTGETINSTALLXINETD2、建立配置文件CD/ETC/XINETDD/VITFTP輸入SERVICETFTPSOCKET_TYPEDGRAMPROTOCOLUDPWAITYESUSERROOTSERVER/USR/SBIN/INTFTPDSERVER_ARGSS/TFTPBOOTDISABLENOPER_SOURCE11CPS1002FLAGSIPV4存盤退出3、建立TFTP服務(wù)文件目錄MKDIR/TFTPBOOT4、重新啟動(dòng)服務(wù)/ETC/INITD/XINETDRESTART安裝完成測(cè)試方法在/TFTPBOOT目錄下隨便放個(gè)文件ABC然后運(yùn)行TFTP192168123202進(jìn)入TFTP命令行輸入GETABC看看是不是能把文件下下來(lái),如果可以就可以了,也可以PUT文件上去。檢查TPTP是否打開(kāi)CHKCONFIGLIST如果沒(méi)有打開(kāi),則用這個(gè)命令也可以打開(kāi)CHKCONFIGTFTPON或者用PSA|GREPTFTP看是否有TFTPD的服務(wù)222配置NFS服務(wù)器1NFS安裝SUDOAPTGETINSTALLNFSKERNELSERVERNFSCOMMONPORTMAP2NFS配置21配置/ETC/EXPORTS文件SUDOVIM/ETC/EXPORTS在文件最后加入如下內(nèi)容/ROOTNFSRW,SYNC,NO_ROOT_SQUASH注NFS允許掛載的目錄及權(quán)限在文件/ETC/EXPORTS中進(jìn)行了定義。其中/ROOTNFS是要共享的目錄,代表允許所有的網(wǎng)絡(luò)段訪問(wèn),RW是可讀寫權(quán)限,SYNC是資料同步寫入內(nèi)存和硬盤,NO_ROOT_SQUASH是NFS客戶端分享目錄使用者的權(quán)限,如果客戶端使用的是ROOT用戶,那么對(duì)于該共享目錄而言,該客戶端就具有ROOT權(quán)限。223交叉編譯器的配置1、解壓縮拷貝光盤目錄的ARMLINUXGCC432TGZ,然后解壓縮到/OPT/FRIENDLYARM/MINI2440目錄下,根據(jù)我在UBUNTU下實(shí)驗(yàn)。2、設(shè)置環(huán)境變量在/ETC/PROFILE中添加環(huán)境變量注意,需要重新注銷或者SOURCE一下配置文件PROFILE,環(huán)境變量才能生效。第四章系統(tǒng)移植41UBOOT移植首先下載UBOOT200810,移植比較繁雜,參考MINI2440的UBOOT移植手冊(cè)。42UBOOT燒寫431UBOOT的功能MINI2440使用UBOOT作為BOOTLOADER,通過(guò)它可以實(shí)現(xiàn)如下功能1、燒寫FLASH;2、引導(dǎo)LINUX操作系統(tǒng)及其它程序;3、通過(guò)以太網(wǎng)下載LINUX內(nèi)核或其它程序并引導(dǎo)。432使用DNW燒寫UBOOT通過(guò)USB的方式,首先需要安裝USB驅(qū)動(dòng)433使用HJTAG燒寫UBOOT通過(guò)并行口的方式燒寫,需要安裝HJTAG軟件43LINUX內(nèi)核移植LINUX內(nèi)核的移植可以分為板級(jí)移植和片級(jí)移植。對(duì)于LINUX發(fā)行版本中已經(jīng)支持的CPU,通常只需針對(duì)板級(jí)硬件進(jìn)行適當(dāng)?shù)男薷募纯?,這種移植叫做板級(jí)移植;而對(duì)于LINUX發(fā)行版本中沒(méi)有支持的CPU,則需要添加相應(yīng)的CPU的內(nèi)核移植,這種移植叫做片級(jí)移植。片級(jí)移植相對(duì)板級(jí)移植來(lái)說(shuō)要復(fù)雜許多,需要對(duì)LINUX內(nèi)核有詳盡的了解。本課題中所用的LINUX中已經(jīng)包含S3C2440ARM920T處理器的移植包,下面將在此基礎(chǔ)上介紹LINUX板級(jí)移植的基本過(guò)程和方法9。圖19為本課題所采用的實(shí)驗(yàn)環(huán)境以及開(kāi)發(fā)流程。安裝交叉編譯器ARMLINUXGCC;對(duì)LINUX內(nèi)核進(jìn)行配置(MAKEMENUCONFIG),并選擇適合本課題系統(tǒng)得相關(guān)配置;編譯生成LINUX映像文件ULMAGE;通過(guò)UBOOT的TFTP命令將該文件下載到目標(biāo)板并執(zhí)行。這將在下面的內(nèi)容中作介紹。安裝LINUX安裝ARMLINUXGCC配置MAKEMENUCONGFIG編譯運(yùn)行LINUX下載LINUX映像文件啟動(dòng)UBOOT圖19JXARM92410LINUX開(kāi)發(fā)流程431LINUXKERNEL的下載HTTPS/WWWKERNELORG/433LINUX內(nèi)核的配置和編譯5LINUX源代碼結(jié)構(gòu)LINUX的源代碼組織成如下結(jié)構(gòu),根目錄是/HOME/CVTECH/JX2410/LINUX。內(nèi)核的文件組織結(jié)構(gòu)為6ARCH/ARM與架構(gòu)和平臺(tái)相關(guān)的代碼都放在ARCH目錄下。針對(duì)ARM的LINUX,有一個(gè)子目錄和它對(duì)應(yīng)ARM。7DRIVERS包含所有的設(shè)備驅(qū)動(dòng)程序。驅(qū)動(dòng)程序又被分為“BLOCK”、“CHAR”、“NET”等幾種類型。8FS這里有支持多種文件系統(tǒng)的源代碼,幾乎一個(gè)目錄就是一個(gè)文件系統(tǒng),如MSDOS、VFAT、PROC和EXT2等。9INCLUDE相關(guān)的頭文件。它們被分成通用和平臺(tái)專用兩部分。目錄“ARMARCH”包含了平臺(tái)相關(guān)的頭文件。10INIT含一些啟動(dòng)KERNEL所需做的所有初始化動(dòng)作,里面有一個(gè)MAINC,針對(duì)KERNEL做初始化動(dòng)作、設(shè)置一些參數(shù)等,并對(duì)外圍設(shè)備初始化。11IPC提供進(jìn)程間通信機(jī)制的源代碼,如信號(hào)量、消息隊(duì)列和管道等。12KERNEL包含進(jìn)程調(diào)度算法的源代碼,以及與內(nèi)核相關(guān)的處理程序,例如系統(tǒng)調(diào)用。13MM用來(lái)存放內(nèi)存管理的源代碼,包括MMU。14NET支持網(wǎng)絡(luò)相關(guān)的協(xié)議源代碼。15LIB包含內(nèi)核要用到的一些常用函數(shù)。如字符串操作、格式化輸出等。16SCRIPT包含在配置和編譯內(nèi)核時(shí)要用到的腳本文件。2LINUX內(nèi)核源碼移植修改參考MINI2440的LINUX移植手冊(cè)44文件系統(tǒng)的移植NANDFLASH采用YAFFS2的文件系統(tǒng)45加載LINUX內(nèi)核映像17將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為192168145,虛擬機(jī)下的LINUX的IP設(shè)為1921681180,宿主機(jī)IP設(shè)為1921681145。18將MINI2440上電,正常情況下將在終端DNW中看到BOOTLOADER菜單界面。在BOOTLOADER中按照如圖24的提示進(jìn)行46BOAWEB服務(wù)器的移植461BOA的編譯建立BOAWEB服務(wù)器包括以下步驟1下載BOA源代碼。BOAWEB服務(wù)器的源代碼可以從HTTP/WWWBOAORG下載,本文中下載文件為BOA09413TARGZ,為當(dāng)前最新版本。19安裝并編譯BOA源代碼。20通過(guò)VMWARETOOLS中的文件共享將WINDOWS下下載的BOA源代碼復(fù)制到/HOME/CVTECH/JX2410/EXAMPLES/目錄下。21安裝源代碼生成MAKEFILE文件/CONFIGURE22修改MAKEFILE文件,找到CCGCC,將其改成CCARMLINUXGCC,再找到CPPGCCE,將其改成CPPARMLINUXGCCE,并保存退出。23運(yùn)行MAKE進(jìn)行編譯,在BOA/SRC目錄下將生成BOA文件,該文件即為BOAWEB服務(wù)器執(zhí)行文件。將調(diào)試信息剝?nèi)?,得到的最后程序只有約60KB大小。3配置BOAWEB服務(wù)器,使其能夠支持CGI程序的執(zhí)行。BOA啟動(dòng)時(shí)將加載一個(gè)配置文件BOACONF,在BOA程序運(yùn)行前,必須首先編輯該文件,并將其放置于SRC/DEFINESH文件中SEVERROOT宏定義所定義的缺省目錄,或者在啟動(dòng)BOA時(shí)使用參數(shù)“C”指定BOACONF的加載目錄。在BOACONF文件中需要進(jìn)行一些配置,下面作簡(jiǎn)要介紹24PORT該參數(shù)為BOA服務(wù)器運(yùn)行端口,缺省的端口為80。25SERVERNAME服務(wù)器名字。26DOCUMENTROOTHTML文檔根目錄。建議使用絕對(duì)路徑表示,如“/MNT/JFFS2/WEB”,如果使用相對(duì)路徑,則它是相對(duì)服務(wù)器根目錄。27SCRIPTALIAS指定CGI程序所在目錄,一般所有的CGI腳本都要放在實(shí)際路徑里,用戶訪問(wèn)執(zhí)行時(shí)輸入站點(diǎn)虛擬路徑CGI腳本名,本課題中CGI的路徑設(shè)為SCRIPTALIAS/CGIBIN/MNT/JFFS2/WEB/IBIN/。28CGIPATH/BIN/USR/BIN/USR/LOCAL/BIN,提供CGI程序的PATH環(huán)境變量值。用戶可以根據(jù)自己需要,對(duì)BOACONF進(jìn)行修改,但必須要保證其他的輔助文件和設(shè)置必須和BOACONF里的配置相符,不然BOA就不能正常工作。在上面的例子中,我們還需要?jiǎng)?chuàng)建日志文件所在目錄/VAR/LOG/BOA,將MIMETYPES文件拷貝到/ETC目錄。MIMETYPES文件用來(lái)指明不同文件擴(kuò)展名對(duì)應(yīng)的MIME類型,一般可以直接從LINUX主機(jī)上拷貝一個(gè),大CD/HOME/CVTECH/JX2410/EXAMPLES/TARZXVFBOATARGZCDBOA/SRCCC/USR/LOCAL/ARM/2953/BIN/ARMLINUXGCCMAKE部分也都是在主機(jī)的/ETC目錄下。47LINUX下動(dòng)態(tài)WEB頁(yè)面的實(shí)現(xiàn)本課題中通過(guò)CGI程序來(lái)獲取用戶的請(qǐng)求、查詢條件,使用HTML方式描述結(jié)果并直接回送到客戶端的瀏覽器上。生成動(dòng)態(tài)網(wǎng)頁(yè)的步驟1用戶在瀏覽器中提出數(shù)據(jù)或查詢條件的請(qǐng)求,并執(zhí)行“提交”后,便將請(qǐng)求信息發(fā)送到網(wǎng)上相應(yīng)的WEB服務(wù)器上;2WEB服務(wù)器收到這一請(qǐng)求便激活一個(gè)CGI程序程序是駐留在WEB服務(wù)器上的一個(gè)程序;3CGI程序調(diào)用該服務(wù)器下的所有程序或數(shù)據(jù)庫(kù),并完成讀者需要的任務(wù),同時(shí)將處理結(jié)果送回CGI網(wǎng)關(guān)接口;4網(wǎng)關(guān)接口程序又將其結(jié)果轉(zhuǎn)換成該服務(wù)器能識(shí)別的HTML文件格式,并確定CGI返回文檔的類型;5WEB服務(wù)器將其結(jié)果送回瀏覽器中,瀏覽器進(jìn)行數(shù)據(jù)處理并顯示結(jié)果。由于C語(yǔ)言在平臺(tái)無(wú)關(guān)性上表現(xiàn)不錯(cuò)(幾乎在任何的系統(tǒng)平臺(tái)下都有其相應(yīng)編譯器),而且對(duì)大多數(shù)程序員而言都算得上很熟悉(不像PERL),因此,C是CGI編程的首選語(yǔ)言之一。CGI程序通常分為以下兩部分929根據(jù)POST方法或GET方法從提交的表單中接受數(shù)據(jù)。本文中采用的是GET方法。CGI程序必須檢查REQUEST_METHOD環(huán)境變量以確定是否采用了POST方法,并決定是否要讀取STDIN。30用PRINTF函數(shù)來(lái)產(chǎn)生HTML源代碼,并將經(jīng)過(guò)解碼后的數(shù)據(jù)正確地返回給瀏覽器。將CGI測(cè)試程序CGI_TEST/TARGZ復(fù)制到/HOME/CVTECH/JX2410/EXAMPLES/目錄下。然后安裝源代碼471CGI程序分析CGI程序見(jiàn)附錄1在CGIC中定義了MAIN函數(shù)31用“FORM_METHODGETREQUESTMETHOD”將調(diào)用POST/GET方法的信息存儲(chǔ)在FORM_METHOD中,調(diào)用POST,則為1;調(diào)用GET,則為0。32以下程序先定義了若采用GET方式則調(diào)用函數(shù)GETGETVARS;若采用POST方式CD/HOME/CVTECH/JX2410/EXAMPLESTARZXVFCGI_TESTTARGZCDCGITESTMAKECPCGI_TEST/TFTPBOOT則調(diào)用函數(shù)GETPOSTVARS來(lái)處理表單。33打印HTML表單,最后清空ARM中的CGI程序使用的緩存。2CGIVARSC34該程序中先首先將XX形式的十六進(jìn)制的數(shù)字ASCII碼轉(zhuǎn)換成字符,再按URL編碼規(guī)則解碼XX轉(zhuǎn)換成字符。此部分程序?qū)⒃?52中給出詳細(xì)分析。35以下程序首先讀入字符串信息,比較字符串判斷采用GET還是POST方式,信息返回到FORM_METHOD。36POST和GET方式處理表單的程序見(jiàn)附錄,如果請(qǐng)求方法REQUESTMETHOD的值為GET,CGI程序讀入環(huán)境變量QUESTRYSTRING;如果請(qǐng)求方法為POST,CGI程序就可確定數(shù)據(jù)來(lái)自標(biāo)準(zhǔn)輸入,根據(jù)CONTENTLENGTH的值確定從讀入的數(shù)據(jù)流大小。在完成表單處理后調(diào)用函數(shù)CLEANUP來(lái)釋放緩存空間。37HTML表單的制作11HTMLLIBC及TEMPLATEC,介要分析如下38IFFORM_METHODPOSTGETVARSGETGETVARSPOSTVARSGETPOSTVARSELSEIFFORM_METHODGETGETVARSGETGETVARSHTMLHEADER“DEMOWEBPAGE“HTMLBODYTEMPLATE_PAGEPOSTVARS,FORM_METHODHTMLFOOTERCLEANUPFORM_METHOD,GETVARS,POSTVARSFFLUSHSTDOUTEXIT0REQUEST_METHODGETENV“REQUEST_METHOD“IFREQUEST_METHODNULLRETURN1IFSTRCMPREQUEST_METHOD,“GET“|STRCMPREQUEST_METHOD,“HEAD“FORM_METHODGETELSEIFSTRCMPREQUEST_METHOD,“POST“FORM_METHODPOSTELSERETURN1RETURNFORM_METHODPRINTF“CONTENTTYPETEXT/HTMLNNS“,TITLE此行通過(guò)標(biāo)準(zhǔn)輸出將字符串“CONTENTTYPETEXT/HTMLNNS“,TITLE傳送給WEB服務(wù)器。它是一個(gè)MIME頭信息,它告訴WEB服務(wù)器隨后的輸出是HTML源代碼。請(qǐng)注意在這個(gè)頭信息中有兩個(gè)新行符,這是因?yàn)閃EB服務(wù)器需要在實(shí)際的文本信息開(kāi)始之前先看見(jiàn)一個(gè)空行。39在HTML中參數(shù)ACTION用以指明該CGI程式的位置,這樣此表單所填的資料才能正確傳給CGI作處理。傳送資料給CGI的的方式,可選值為POST,GET,用METHOD來(lái)定義,此處定義為POST方式。40的參數(shù)設(shè)定,TYPE“SUBMIT“設(shè)定輸入方式為SUBMIT或RESET。VALUE“SUBMIT“或者“RESET“,這個(gè)值不是輸給CGI的,而是顯示在按鍵上,可以不用,傳送鍵的內(nèi)定值為SUBMITQUERY,清除鍵的內(nèi)定值為RESET。472FORM輸入的分析和解碼當(dāng)用戶提交一個(gè)HTMLFORM時(shí),WEB瀏覽器首先對(duì)FORM中的數(shù)據(jù)以名字/值對(duì)的形式進(jìn)行編碼,并發(fā)送給WEB服務(wù)器,然后由WEB服務(wù)器傳遞給CGI程序。其格式如下NAME1VALUE1每當(dāng)找到字符XX用其十六進(jìn)制ASCII碼值表示的特殊字符。根據(jù)值XX將其轉(zhuǎn)換成相應(yīng)的ASCII字符。對(duì)FORM變量名和變量值都要進(jìn)行這種轉(zhuǎn)換。下面是CGI中對(duì)FORM數(shù)據(jù)進(jìn)行分析并將結(jié)果回送給WEB服務(wù)器的程序的分析。PRINTF“,“/CGIBIN/CGI_TEST“PRINTF“PRINTF“上述程序首先將XX形式的十六進(jìn)制的數(shù)字ASCII碼轉(zhuǎn)換成字符,再按URL編碼規(guī)則解碼XX轉(zhuǎn)換成字符。第五章嵌入式WEB服務(wù)器51概述隨著計(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ù)器,無(wú)疑是資源的浪費(fèi)。解決方法是使用功能相對(duì)簡(jiǎn)單,體CHARHEX2CHARCHARHEXCHARCHAR_VALUECHAR_VALUEHEX0AHEX0CHAR_VALUE16CHAR_VALUEHEX1AHEX1RETURNCHAR_VALUEVOIDUNESCAPE_URLCHARURLINTN,KFORN0,K0URLKN,KIFURLNURLKURLNHEX2CHARK2URLN0積更小、消耗資源更少的簡(jiǎn)單WEB服務(wù)器,于是嵌入式WEB服務(wù)器就應(yīng)運(yùn)而生了。52WEB服務(wù)器原理從功能上來(lái)講,WEB服務(wù)器監(jiān)聽(tīng)用戶機(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ù)通常以格式固定、含有文本和圖片的頁(yè)面出現(xiàn)在用戶端瀏覽器。53嵌入式WEB服務(wù)器實(shí)現(xiàn)原理嵌入式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)一的基于瀏覽器方式的操作和控制界面,此時(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)方案。531TCP/IP協(xié)議TCP/IP(傳輸控制協(xié)議/網(wǎng)間協(xié)議)是一種網(wǎng)絡(luò)通信協(xié)議,它規(guī)范了網(wǎng)絡(luò)上的所有通信設(shè)備,尤其是一個(gè)主機(jī)與另一個(gè)主機(jī)之間的數(shù)據(jù)往來(lái)格式以及傳送方式。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ù),按發(fā)送前的順序還原,并加以校驗(yàn),若發(fā)現(xiàn)差錯(cuò),TCP將會(huì)要求重發(fā)。因此,TCP/IP在INTERNET中幾乎可以無(wú)差錯(cuò)地傳送數(shù)據(jù)。在TCP/IP協(xié)議基礎(chǔ)上建立的HTTP超文本傳輸協(xié)議、FTP文件傳輸協(xié)議、TELNET遠(yuǎn)程登錄協(xié)議以及SMTP郵件協(xié)議等協(xié)議簇構(gòu)成了WEB技術(shù)的核心。同時(shí),WEB服務(wù)器同WEB瀏覽器之間的通信是通過(guò)HTTP協(xié)議進(jìn)行的,這一通用的、無(wú)狀態(tài)的、面向?qū)ο蟮膮f(xié)議HTTP協(xié)議是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ù)器上獲取一頁(yè)HTML數(shù)據(jù)時(shí)所發(fā)生的情況。為形成同WEB服務(wù)器的虛鏈路,瀏覽器使用一種被抽象地稱為稱為套接口(SOCKET)的高層軟件。為了獲取WEB頁(yè),它通過(guò)向套接口寫入HTTPGET命令來(lái)向WEB服務(wù)器發(fā)出該指令。接下來(lái)套接口軟件使用TCP協(xié)議向WEB服務(wù)器發(fā)出包含GET命令的字節(jié)流和位流,TCP將數(shù)據(jù)分段并將各獨(dú)立段傳到IP模塊,該模塊將數(shù)據(jù)段轉(zhuǎn)換成數(shù)據(jù)報(bào)并發(fā)送給WEB服務(wù)器。嵌入式系統(tǒng)TCP/IP協(xié)議選擇時(shí)遵循的原則是首先,嵌入式系統(tǒng)中實(shí)現(xiàn)的協(xié)議要根據(jù)系統(tǒng)自身的特點(diǎn)以及功能來(lái)設(shè)計(jì)自己的協(xié)議簇,實(shí)現(xiàn)與需要有關(guān)的部分,不使用的協(xié)議一概不考慮;其次,對(duì)于要使用的協(xié)議也根據(jù)實(shí)際應(yīng)用情況做取舍。考慮到嵌入式WEB服務(wù)器的硬件處理速度慢并且存儲(chǔ)容量相對(duì)較小的條件限制,在TCP/IP協(xié)議棧中主要能夠?qū)崿F(xiàn)ARP,IP,ICMP,TCP,HTTP協(xié)議即可6。54嵌入式WEB服務(wù)器BOA541BOA概述目前有很多功能強(qiáng)大的WEB服務(wù)器,主要包括APACHE,HTTPD,THTTPD和BOA5等幾種。其中HTTPD最小,只需幾千字節(jié)的空間,功能簡(jiǎn)單,但不支持CGI;APACHE,THTTPD和BOA支持CGI。其中BOA是一個(gè)單任務(wù)的小型HTTP服務(wù)器,源代碼開(kāi)放、性能優(yōu)秀,運(yùn)行所需空間僅為140KB左右,特別適合應(yīng)用在嵌入式系統(tǒng)中。雖然本文中所用到的嵌入式LINUX的WEB服務(wù)器也可以通過(guò)自行裁剪APACHE服務(wù)器得到,但是APACHE服務(wù)器是采用傳統(tǒng)的生成子進(jìn)程的方式來(lái)提供服務(wù)的形式,這種形式比較適合服務(wù)比較復(fù)雜的情況,不適合嵌入式設(shè)備低內(nèi)存和主頻的情況。BOA與APACHE等高性能的WEB服務(wù)器主要的區(qū)別在于它們是單進(jìn)程服務(wù)器,只有在完成一個(gè)用戶請(qǐng)求后才能響應(yīng)另一個(gè)用戶的請(qǐng)求,而無(wú)法并發(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)41對(duì)CGI程序無(wú)需設(shè)置REMOTEHOST環(huán)境變量,在REMOTEADDR變量中已經(jīng)提供了IP地址,可以直接使用GETHOSTBYADDR函數(shù)或變量,從而使BOA較其他WEB服務(wù)器更易于使用;在BOA中對(duì)SERVER2SIDE模塊可以剪裁,以提高系統(tǒng)運(yùn)行速度,其內(nèi)部的“字節(jié)流執(zhí)行引擎”采用了非完全的圖靈機(jī)方式實(shí)現(xiàn);不存在訪問(wèn)控制特征,采用符號(hào)連接方式進(jìn)行控制,可以對(duì)任何可以讀取的文件提供服務(wù),因此速度更快。所以,本課題中選擇BOA作為嵌入式LINUX系統(tǒng)的WEB服務(wù)器542BOA的功能實(shí)現(xiàn)嵌入式WEB服務(wù)器BOA和普通WEB服務(wù)器一樣,能夠完成接收客戶端請(qǐng)求、分析請(qǐng)求、響應(yīng)請(qǐng)求、向客端返回請(qǐng)求結(jié)果等任務(wù)。它的工作過(guò)程主要包括A完成WEB服務(wù)器的初始化工作,如創(chuàng)建環(huán)境變量、創(chuàng)建TCP套接字、綁定端口、開(kāi)始偵聽(tīng)、進(jìn)入循環(huán)結(jié)構(gòu),以及等待接收客戶瀏覽器的連接請(qǐng)求;B當(dāng)有客戶端連接請(qǐng)求時(shí),WEB服務(wù)器負(fù)責(zé)接收客戶端請(qǐng)求,并保存相關(guān)請(qǐng)求信息;C在接收到客戶端的連接請(qǐng)求之后,分析客戶端請(qǐng)求,解析出請(qǐng)求的方法、URL目標(biāo)、可選的查詢信息及表單信息,同時(shí)根據(jù)請(qǐng)求做出相應(yīng)的處理;DWEB服務(wù)器完成相應(yīng)處理后,向客戶端瀏覽器發(fā)送響應(yīng)信息,關(guān)閉與客戶機(jī)的TCP連接5。嵌入式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,則將客戶發(fā)送過(guò)來(lái)的表單信息傳送給相應(yīng)的CGI程序,作為CGI的參數(shù)來(lái)執(zhí)行CGI程序,并將執(zhí)行結(jié)果發(fā)送給客戶端瀏覽器。BOA的功能實(shí)現(xiàn)也是通過(guò)建立連接、綁定端口、進(jìn)行偵聽(tīng)、請(qǐng)求處理等來(lái)實(shí)現(xiàn)的。本課題中BOA整體工作流程如圖2所示NYYN有REQUEST請(qǐng)求否接收REQUEST請(qǐng)求根據(jù)執(zhí)行結(jié)果,發(fā)送數(shù)據(jù)到WEB瀏覽器返回偵聽(tīng)端口請(qǐng)求CGI否創(chuàng)建套接字設(shè)置CGI環(huán)境變量初始化設(shè)置信號(hào)量綁定端口分析REQUEST請(qǐng)求執(zhí)行CGI程序讀取指定數(shù)據(jù)到WEB瀏覽器圖2WEB服務(wù)器BOA的執(zhí)行流程第六章CGI技術(shù)61CGI概述現(xiàn)今社會(huì)的主要WEB程序的開(kāi)發(fā)語(yǔ)言有ASP、ASPNET、JSP、PHP等,然而此等程序都需要大型的應(yīng)用平臺(tái)的支持,這些遠(yuǎn)遠(yuǎn)超出了嵌入式系統(tǒng)的特點(diǎn)?,F(xiàn)在開(kāi)發(fā)的嵌入式系統(tǒng)以CGI(公用網(wǎng)關(guān)接口,COMMONGATEWAYINTERFACE)為主。CGI(通用網(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)頁(yè)面的花,那么與之通信的WEB瀏覽器就只能顯示在頁(yè)面請(qǐng)求和顯示過(guò)程之間文檔內(nèi)容不變化的頁(yè)面。CGI規(guī)范在WEB服務(wù)器和瀏覽器(又稱客戶機(jī))之間建立了標(biāo)準(zhǔn)的信息交換方式。使用它使得信息在瀏覽器或服務(wù)器與外部程序之間流動(dòng),外部程序在處理之后將處理結(jié)果送回用戶端瀏覽器。外部程序通常稱為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ì)。在HTML中,當(dāng)客戶填寫了表單,并按下了發(fā)送(SUBMIT)按鈕后,表單的內(nèi)容被發(fā)送到了服務(wù)器端,一般的,這時(shí)就需要有一個(gè)服務(wù)器端腳本來(lái)對(duì)表單的內(nèi)容進(jìn)行一些處理。沒(méi)有了CGI,WEB的世界就完全失去了它的交互性,所有的信息都變成單向的了,而不能夠有任何的反饋。62CGI工作原理系統(tǒng)嵌入式WEB服務(wù)器通過(guò)CGI程序來(lái)獲取用戶的請(qǐng)求、查詢條件,使用HTML方式描述結(jié)果并直接回送到客戶端的瀏覽器上,此過(guò)程中瀏覽器將用戶輸入的數(shù)據(jù)送到WEB服務(wù)器,WEB服務(wù)器將數(shù)據(jù)使用STDIN(標(biāo)準(zhǔn)輸入)送到CGI程序。在執(zhí)行CGI程序后,會(huì)訪問(wèn)數(shù)據(jù)庫(kù)的記錄,最后使用STDOUT輸出HTML形式的結(jié)果文件,經(jīng)WEB服務(wù)器送回瀏覽器顯示給用戶。使用CGI實(shí)現(xiàn)客戶與服務(wù)器的交互分以下幾個(gè)標(biāo)準(zhǔn)步驟1WEB客戶瀏覽器通過(guò)URL與WEB服務(wù)器相連;2服務(wù)發(fā)送HTML和別的組成請(qǐng)求頁(yè)面的文件給客戶,一旦頁(yè)面內(nèi)容傳完,這個(gè)連接自動(dòng)斷開(kāi);3在客戶方,HTML腳本提示用戶做動(dòng)作或輸入,當(dāng)用戶響應(yīng)后客戶請(qǐng)求WEB服務(wù)器建立一個(gè)新的連接;4一旦連接建立,客戶把用戶輸入的數(shù)據(jù)傳給WEB服務(wù)器;5WEB服務(wù)器把這些信息和別的進(jìn)程變量傳給由HTML以URL形式提交的CGI程序;6CGI程序根據(jù)輸入作出相應(yīng)的操作,產(chǎn)生對(duì)客戶的響應(yīng)一般以一個(gè)HTML文檔的形式,并將其傳給WEB服務(wù)器;7WEB服務(wù)器把應(yīng)答數(shù)據(jù)傳給客戶,并關(guān)閉連接;在客戶方,用HTML標(biāo)記的方式來(lái)觸發(fā)處理過(guò)程,該標(biāo)記和其它標(biāo)記的解釋方式一樣。在服務(wù)器下,LINUX環(huán)境變量、命令執(zhí)行參數(shù)和標(biāo)準(zhǔn)輸入輸出文件都可用于WEB服務(wù)器與CGI程序之間的通訊。CGI工作過(guò)程圖3所示運(yùn)行結(jié)果POST用STDIN輸入數(shù)據(jù)GET用QUERYSTRING輸入數(shù)據(jù)用STDOUT輸出數(shù)據(jù)WEB瀏覽器WEB服務(wù)器CGI腳本啟動(dòng)CGI圖3CGI工作原理其中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ù)的最后沒(méi)有使用EOF字符標(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ù)(一般地,超過(guò)1024字節(jié),這是URL的極限長(zhǎng)度)時(shí),應(yīng)該選用POST方法14。第七章系統(tǒng)功能的測(cè)試在移植完BOA服務(wù)器后就是測(cè)試它能否正常工作,靜態(tài)HTML頁(yè)面能否正常訪問(wèn),還將測(cè)試動(dòng)態(tài)WEB頁(yè)面能否正常訪問(wèn)。本課題中將采用NFS方式來(lái)進(jìn)行測(cè)試工作。71測(cè)試WEB服務(wù)器BOA測(cè)試開(kāi)發(fā)環(huán)境如圖25所示串口線主機(jī)WINDOWS環(huán)境虛擬機(jī)下LINUX環(huán)境MINI2440IP192168145/MNT/NFSMOUNT宿主機(jī)IP1921681180NFSSERVERTFTPSERVER/TFTPBOOTIP1921681145目標(biāo)板圖25BOA測(cè)試開(kāi)發(fā)環(huán)境可以將嵌入式目標(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)上生效。先前設(shè)定JXARM92410的IP地址為192168145,且在JXARM92410的JFFS2文件系統(tǒng)中已經(jīng)預(yù)先燒寫好了配置好的BOACONF文件,位于/MNT/JFFS2/ETC/目錄。啟動(dòng)JXARM92410LINUX,然后按如下步驟進(jìn)行42將BOA的執(zhí)行文件復(fù)制到TFTPBOOT目錄下43將主機(jī)下的TFTPBOOT目錄掛載到目標(biāo)板的NFS目錄下44啟動(dòng)BOA服務(wù)器根據(jù)上文中BOACONF的配置,此時(shí)在目標(biāo)板的MNT/JFFS2/WEB目錄下包含測(cè)試主頁(yè)面INDEXHTML、存放各種圖片的目錄IMAGES以及CGI腳本的存放目錄CGIBIN。啟動(dòng)后測(cè)試BOA服務(wù)器,在網(wǎng)頁(yè)瀏覽器中訪問(wèn)如下網(wǎng)址HTTP/192168145/如果網(wǎng)絡(luò)連接正常,且BOA啟動(dòng)正常的話,將可以看到/MNT/JFFS2/WEB/INDEXHTML網(wǎng)頁(yè),如圖26所示,表示靜態(tài)HTML頁(yè)面測(cè)試通過(guò)??梢孕薷脑摼W(wǎng)頁(yè),并替換成所需要的網(wǎng)頁(yè),然后刷新瀏覽器顯示。MOUNT1921681180/BOACONF/MNT/JFFS2/ETC/CP/HOME/CVTECH/JX2410/EXAMPLES/BOA/SRC/BOA/TFTPBOOTRFCD/HOME/CVTECH/JX2410/EXAMPLES/BOALSMOUNT1921681180/TFTPBOOT/MNT/NFS/BOAC/MNT/JFFS2/ETC/CHARGETGETVARSCHARGETPOSTVARSINTCLEANUPINTFORM_METHOD,CHARGETVARS,CHARPOSTVARSENDIF/_CGIVARS_H/HTMLLIBH/IFNDEF_HTMLLIB_HDEFINE_HTMLLIB_HVOIDHTMLHEADERCHARTITLEVOIDHTMLBODYVOIDHTMLFOOTERVOIDADDTITLEELEMENTCHARTITLEENDIF/_HTMLLIB_H/TEMPLATEH/INTTEMPLATE_PAGECHARPOSTVARS,INTFORM_METHOD/CGIC/INCLUDEINCLUDEINCLUDE“CGIVARSH“INCLUDE“HTMLLIBH“INCLUDE“TEMPLATEH“INTMAINCHARPOSTVARSNULL/POSTREQUESTDATAREPOSITORY/CHARGETVARSNU
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年北京協(xié)和醫(yī)院心內(nèi)科合同制科研助理招聘?jìng)淇碱}庫(kù)及1套參考答案詳解
- 2026年安溪縣部分公辦學(xué)校赴華中師范大學(xué)公開(kāi)招聘編制內(nèi)新任教師備考題庫(kù)及一套答案詳解
- 2025年咸寧市總工會(huì)公開(kāi)招聘工會(huì)工作協(xié)理員備考題庫(kù)及答案詳解參考
- 基層央行內(nèi)控制度
- 塘沽自貿(mào)區(qū)內(nèi)控制度
- 學(xué)校行政內(nèi)控制度
- 陜西省內(nèi)控制度
- 銀行機(jī)構(gòu)內(nèi)控制度
- 學(xué)校浴室內(nèi)控制度
- 財(cái)政所內(nèi)控制度匯編
- 2024屆重慶外國(guó)語(yǔ)學(xué)校高一數(shù)學(xué)第一學(xué)期期末檢測(cè)模擬試題含解析
- 2023年廣東學(xué)業(yè)水平考試物理??贾R(shí)點(diǎn)
- 中山版-四年級(jí)第一學(xué)期綜合實(shí)踐活動(dòng)教案
- 中外政治思想史-復(fù)習(xí)資料
- GB/T 8897.2-2021原電池第2部分:外形尺寸和電性能
- GB/T 1962.1-2001注射器、注射針及其他醫(yī)療器械6%(魯爾)圓錐接頭第1部分:通用要求
- GB/T 14525-2010波紋金屬軟管通用技術(shù)條件
- GB/T 1040.3-2006塑料拉伸性能的測(cè)定第3部分:薄膜和薄片的試驗(yàn)條件
- 第八講-信息化戰(zhàn)爭(zhēng)概述課件
- 公文寫作與處理 歷年真題及答案
- 需求導(dǎo)向式銷售研討課程課件
評(píng)論
0/150
提交評(píng)論