在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于44B0平臺的uC-Linux Web服務(wù)器實現(xiàn)方法研究

            基于44B0平臺的uC-Linux Web服務(wù)器實現(xiàn)方法研究

            作者: 時間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
            前言嵌入式系統(tǒng)已經(jīng)大量應(yīng)用于各種場合,網(wǎng)絡(luò)技術(shù)的發(fā)展使嵌入式系統(tǒng)的網(wǎng)絡(luò)功能日益完善。在測控領(lǐng)域里,常常需要遠(yuǎn)程查詢被測控對象的實時狀態(tài),或進(jìn)行某種控制操作,采用服務(wù)器-瀏覽器進(jìn)行工作的嵌入式系統(tǒng),可以僅通過瀏覽器就完成所有的測控任務(wù)而不依賴于其他客戶端程序,具有簡單網(wǎng)絡(luò)服務(wù)器功能的嵌入式系統(tǒng)可以方便地提供這種功能。本文以目前國內(nèi)外普遍采用的ARM+uCLinux嵌入式系統(tǒng)為例,以uCLinux20031103版本為基礎(chǔ),以S3C44B0X開發(fā)板為平臺,對uCLinux下實現(xiàn)靜態(tài)、動態(tài)Web服務(wù)器的方法進(jìn)行了研究,實現(xiàn)了對遠(yuǎn)程溫度傳感器的訪問。
            1. uCLinux簡介Linux是一種很受歡迎的操作系統(tǒng),它與UNIX系統(tǒng)兼容,開放源代碼。它原本被設(shè)計為桌面系統(tǒng),現(xiàn)在廣泛應(yīng)用于服務(wù)器領(lǐng)域。而更大的影響在于它正逐漸的應(yīng)用于嵌入式設(shè)備,uCLinux就是針對微控制領(lǐng)域而設(shè)計的Linux系統(tǒng)。
            uCLinux內(nèi)核的功能結(jié)構(gòu)與Linux基本相同,只是在對內(nèi)存管理和進(jìn)程管理方面進(jìn)行了改寫,以滿足無MMU處理器的要求。uClinux由Linux2.0內(nèi)核發(fā)展而來,是專為沒有MMU的微處理器設(shè)計的嵌入式Linux操作系統(tǒng)。uClinux的內(nèi)核比Linux 2.0內(nèi)核小的多,但保留了Linux 操作系統(tǒng)的主要優(yōu)點:穩(wěn)定性,優(yōu)異的網(wǎng)絡(luò)能力以及優(yōu)秀的文件系統(tǒng)支持。
            因此,采用ARM+uCLinux平臺在獲得比單片機(jī)系統(tǒng)更強的處理能力和相對較低功耗的同時,也為嵌入式系統(tǒng)接入網(wǎng)絡(luò)提供了更為便利的途徑,這一點正是得益于Linux。
            2. uCLinux下Web 服務(wù)器的選擇將嵌入式系統(tǒng)接入網(wǎng)絡(luò),一般是為了提供一種系統(tǒng)與外界交互的途徑,由于網(wǎng)絡(luò)的可擴(kuò)展性,嵌入式系統(tǒng)一旦連接到網(wǎng)絡(luò)中,其所能提供的信息和獲得的信息都將成倍增加。為了更方便地通過網(wǎng)絡(luò)向外提供信息,必須為系統(tǒng)構(gòu)建Web 服務(wù)器。
            uCLinux 環(huán)境下,主要有三個Web 服務(wù)器:httpd、thttpd和Boa。httpd是最簡單的一個Web 服務(wù)器,它的功能最弱,不支持認(rèn)證,不支持CGI。如果Web 服務(wù)器僅需提供一些靜態(tài)頁面,例如簡單的在線幫助、系統(tǒng)介紹等,完全可以用靜態(tài)服務(wù)器httpd來實現(xiàn)。thttpd和Boa都支持認(rèn)證、CGI等,功能都比較全。若需提高系統(tǒng)的安全性,或需要與用戶進(jìn)行交互,例如數(shù)據(jù)查詢、實時狀態(tài)查詢等,則必須使用動態(tài)Web技術(shù),可以選擇這兩種服務(wù)器之一來實現(xiàn)。
            3. uCLinux下靜態(tài)Web 服務(wù)器的實現(xiàn)httpd 是最簡單的一個web 服務(wù)器,只有幾百行代碼,功能較弱。它的一些簡單配置需要在Makefile和httpd.c的內(nèi)部進(jìn)行,文件位于/bb40/uCLinux- dist/user/httpd/目錄下。Makefile中定義了缺省的documentDir為/home/httpd,缺省主頁面文件為 index.html。uCLinux20031103版本的httpd.c中的main函數(shù)有如下兩行程序:
            chroot(HTTPD_DOCUMENT_ROOT);
            chdir("/");
            其中第二行程序?qū)⒂绊懙綄嶋H運行結(jié)果,建議將該行程序直接指向index.html文件所在目錄。將頁面文件復(fù)制到bb40uCLinux-distromfshomehttpd下即可。
            對uCLinux 進(jìn)行重新配置,并在用戶程序中選中httpd,編譯uCLinux內(nèi)核并下載到開發(fā)板,在uclinx啟動后通過httpd &命令即可啟動服務(wù)器,如需自動啟動,在uCLinux-distvendorsSamsungS3C44B0目錄下的rc文件中加入同樣的命令即可。
            4.動態(tài)服務(wù)器與CGI目前實現(xiàn)動態(tài)Web頁面有多種技術(shù)可供選擇,CGI、ASP、PHP等技術(shù)在高端平臺上都能很好地實現(xiàn)用戶所需的功能。但在uCLinux下實現(xiàn)動態(tài)網(wǎng)頁,目前只能采用CGI。
            CGI,Common Gate Interface,即通用網(wǎng)關(guān)接口,是一個連接外部應(yīng)用程序到服務(wù)器的標(biāo)準(zhǔn)。一個簡單的靜態(tài)HTML文檔是沒有交互后臺程序,而CGI程序則可以實時執(zhí)行并輸出動態(tài)信息。
            使用CGI 需要一個輸入界面,一般就是一個包含了表單(FORM)的頁面。FORM在CGI中是最常被使用的輸入界面,它由一組標(biāo)簽所組成,目前的標(biāo)準(zhǔn)中,F(xiàn)ORM 的標(biāo)簽可分為三大類:INPUT、SELECT以及TEXTAREA。在設(shè)置了一系列有關(guān)的標(biāo)簽后,每個FORM通常需要一個SUBMIT按鈕用來發(fā)送表單內(nèi)容。
            當(dāng)用戶在客戶端按下FORM上的SUBMIT按鈕,瀏覽器(Browser)將客戶端輸入的參數(shù)傳回服務(wù)器,服務(wù)器啟動指定的程序并將封裝的參數(shù)傳入,后臺程序依照傳入的參數(shù)完成指定的工作。如果此時有需要傳回結(jié)果的話,則程序會把結(jié)果傳回給服務(wù)器并發(fā)送到瀏覽器。
            5.用boa實現(xiàn)uCLinux下的動態(tài)Web 服務(wù)器用Boa來實現(xiàn)動態(tài)Web 服務(wù)器的方法較為復(fù)雜,主要通過boa.conf和mime.types進(jìn)行,具體過程如下:
            Boa 的關(guān)鍵配置由boa.conf文件決定,該文件是一個文本文件,內(nèi)部除了各項設(shè)置還包含了詳細(xì)的注釋和說明。Boa.conf文件的注釋中首先指出,為了在用戶訪問Web時服務(wù)器能確定根目錄的位置,需要指定服務(wù)器的根目錄路徑服務(wù)器_ROOT。uCLinux-distuserboasrc目錄下的define.h定義了服務(wù)器的根目錄路徑,通過修改define.h文件中#define ERVER_ROOT /home語句來指定服務(wù)器_ROOT。在uCLinux啟動后通過命令行也可以指定該路徑,且命令行所指定的路徑具有更高的優(yōu)先級,命令參數(shù)為-c加上欲指向的根目錄路徑,例如該文件中提供的例子:boa -c /usr/local/boa。
            下面來配置一個簡單的boa服務(wù)器。在uCLinux-distuserboasrcboa.conf里進(jìn)行如下修改:
            l
            將user root改為User 0;
            l
            將Group root改為Group 0;
            l
            將DocumentRoot/etc改為DocumentRoot/home;
            l
            將MimeTypes/etc/mime.types改為MimeTypes/home/mime.types;
            l
            將#AddType application/x-httpd-cgi cgi前面的#去掉使系統(tǒng)可以支持cgi方式;
            l
            定義CGI程序所在目錄:ScriptAlias/cgi-bin/ /home/cgi-bin/;
            這樣配置后的boa服務(wù)器將/home目錄作為服務(wù)器的根目錄,cgi程序位于honecgi-bin目錄下,默認(rèn)頁面文件為homeindex.html。
            Boa.conf文件的注釋中指出,boa.conf文件和mime.types文件必須放到Web服務(wù)器根目錄下,本例中把mime.types和修改后的bao.conf復(fù)制到uCLinux-distromfshome目錄下。
            在編譯uCLinux 內(nèi)核前還要通過修改uCLinux-distvendorsSamsungS3C44B0目錄下的makefile文件來建立cgi二進(jìn)制文件將要被存放到的目錄。在ROMFS_DIRS=bin dev etc home lib mnt proc usr var的后邊增加home/cgi-bin,這樣修改后編譯內(nèi)核,編譯后生成的根文件系統(tǒng)bb40uCLinux-distromfs中將增加一個 homecgi-bin目錄。
            對uCLinux 進(jìn)行重新配置,并在用戶程序中選中boa項,編譯uCLinux內(nèi)核并下載到開發(fā)板,在uclinx啟動后,通過boa-c/home/&命令即可啟動服務(wù)器,如需自動啟動,在rc文件中加入同樣的命令即可。由于尚未放入cgi程序,此時僅能看到放在home目錄下的頁面,不會有任何動態(tài)響應(yīng)。通過下面的例子將了解如何實現(xiàn)頁面到CGI程序的關(guān)聯(lián)。
            6.一個通過動態(tài)Web頁面訪問遠(yuǎn)程溫度傳感器的例子下面通過一個例子來說明如何實現(xiàn)uCLinux下的動態(tài)Web頁面技術(shù)。
            首先建立一個簡單的表單頁面:

            CGI 規(guī)定,GET方式下的表單被發(fā)送到服務(wù)器后,表單中的數(shù)據(jù)被保存在QUERY_STRING環(huán)境變量中。這種表單的處理相對簡單,只要讀取環(huán)境變量就可以了。在CGI程序中使用庫函數(shù)getenv來把環(huán)境變量的值作為一個字符串來讀取,在取得了字符串中的數(shù)據(jù)后,就可以對數(shù)據(jù)進(jìn)行需要的處理。CGI程序完成處理后的輸出被重定向到客戶瀏覽器,用戶通過瀏覽器就可以看到相關(guān)結(jié)果。請注意,在ACTION后面所指向的CGI文件并沒有擴(kuò)展名。
            下面就是處理這個表單的CGI程序mycgi.c:
            #i nclude
            #i nclude
            int main(void){
            char *data;
            long m;
            printf("Content-Type:text/html%c%c",10,10);
            printf("溫度傳感器狀態(tài) ");
            printf("

            房間溫度

            ");
            data = getenv("QUERY_STRING");
            if(sscanf(data,"m=%ld",&m)!=1)
            printf("

            錯誤!輸入數(shù)據(jù)非法。表單中必須輸入1~10的數(shù)字。");
            else
            printf("

            %ld號房間的溫度是:%ld度。",m,readtempr(m));
            return 0;
            }



            評論


            技術(shù)專區(qū)

            關(guān)閉