<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

CGI 規定,GET方式下的表單被發(fā)送到服務(wù)器后,表單中的數據被保存在QUERY_STRING環(huán)境變量中。這種表單的處理相對簡(jiǎn)單,只要讀取環(huán)境變量就可以了。在CGI程序中使用庫函數getenv來(lái)把環(huán)境變量的值作為一個(gè)字符串來(lái)讀取,在取得了字符串中的數據后,就可以對數據進(jìn)行需要的處理。CGI程序完成處理后的輸出被重定向到客戶(hù)瀏覽器,用戶(hù)通過(guò)瀏覽器就可以看到相關(guān)結果。請注意,在A(yíng)CTION后面所指向的CGI文件并沒(méi)有擴展名。
下面就是處理這個(gè)表單的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("

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

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



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>