關鍵詞:uClinux 動態(tài)Web技術 CGI(通用網(wǎng)關接口) Web Server
隨著計算機技術發(fā)展,嵌入式系統(tǒng)已成為計算機領域的一個重要組成部分。所謂嵌入式系統(tǒng),是以應用中為心,以計算機技術為基礎,軟件硬件可裁剪,適應應用系統(tǒng)對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統(tǒng)。它具有計算機的功能,但又不稱為計算機,包括機頂盒、微波爐、電梯、數(shù)控系統(tǒng)、醫(yī)療儀器等。
當今的信息時代,是一個構筑在網(wǎng)絡基礎之睥時代,互聯(lián)網(wǎng)已經(jīng)滲透到了人們工作和生活的各個角落。嵌入式Internet是近幾年發(fā)展起來一項新興概念和技術,不僅通過PC機能上網(wǎng),通過各種各樣的嵌入式設備也能上網(wǎng),使用瀏覽Web已經(jīng)成為現(xiàn)代人的習慣。21世紀的電子信息產(chǎn)品,如果不能適應這個發(fā)展的方向和要求,將很難有強勁的競爭力。而目前正在開發(fā)的嵌入式系統(tǒng)中,49%的項目選擇Linux作為嵌入式操作系統(tǒng),因此對uClinux操作系統(tǒng)下嵌入式Web技術的研究具有較高的現(xiàn)實意義,本文就此作些討論。
1 uClinux嵌入式操作系統(tǒng)
Linux是一種優(yōu)秀的自由軟件。由于源代碼公開,功能強大,具有良好的網(wǎng)絡支持,又易于睛,近幾年成為了最有潛力的嵌入式操作系統(tǒng)。UClinux是一個完全符合GNU/GPL(通用公共許可證)公約的項目和完全開發(fā)代碼。它是標準Linux的一個分支,現(xiàn)在由Lineo公司支持維護。它專門針對沒有MMU的CPU,并且為嵌放式系統(tǒng)做了許多小型化的工作?,F(xiàn)在已經(jīng)成為使用uClinux的安例包括:基于ColdFire的CISCO 2500/3000/4000路由器;基于ARM7TDMI的Aplio公司的voice-over-IP電話;Axis公司的AXIS2001網(wǎng)絡數(shù)碼相機;Adomo公司的機頂盒以及各種開發(fā)板。
UClinux經(jīng)過對標準Linux內核的改動,形成了一個高度優(yōu)化的、代碼緊湊的嵌入式Linux,雖然它的體積很小,但uClinux仍然保留了Linux的大多數(shù)的優(yōu)點:穩(wěn)定、良好的移植性、優(yōu)秀的網(wǎng)絡功能、對各種文件系統(tǒng)完備的支持,以及標準豐富的API。它的主要特征如下:①通用Linux API;②內核體積小于512KB,內核加上文件系統(tǒng)小于900KB;③完整體積小于512KB,內核加上文件系統(tǒng)小于900KB;④支持其它大量網(wǎng)絡協(xié)議;⑤支持各種文件系統(tǒng),包括NFS、ext2、romfs and JFFS、MS-DOS和FAT16;⑥支持各種典型的處理器構架,包括ARM、PowerPC、X86等。
2 基于uClinux的動態(tài)Web實現(xiàn)技術
2.1 uClinux下Web Server的實現(xiàn)
uClinux下,主要有三個Web Server:httpd、thttpd和Boa。Httpd是最簡單的一個Web Server,它的功能最弱,不支持認證,不支持CGI。Thttpd和Boa都支持認證、CGI等,功能都比較全。為了實現(xiàn)動態(tài)Web技術,這里我們選擇實現(xiàn)一個支持CGI的、非常適合于嵌入式系統(tǒng)的Boa Web Server。
Boa是一個單任務的http服務器,源代碼開放、性能高。目前,uClinux的代碼中已經(jīng)包含boa的源代碼,在uClinux下實現(xiàn)Boa,需要對Boa做一些配置和修改。這主要通過對boa.conf和mime.types文件進行修改來實現(xiàn),需要改動的配置有以下幾項。
(1)建目錄
由于uClinux默認的根文件系統(tǒng)romfs是只讀的,不能用mkdir等命令來新建目錄,故應在編譯內核前先建好要用到的目錄,這通過修改/uclinux-samsung/vendors/Samsung/4510b/makefile文件來實現(xiàn)。在ROMFS_DIRS=bin dev etc home lib mnt proc usr var的后邊增加home/web home/web/cgi-bin,這樣修改后編譯內核,編譯好的根文件系統(tǒng)romfs中就包含這些目錄了。
(2)指定Web服務器的根目錄路徑(SERVER_ROOT)
進入/uclinux-samsung/user/boa/src/目錄,通過修改define.h文件中#define ERVER_ROOT“/home”語句 來指定SERVER_ROOT。另外,還可以通過命令行來指定,例如:boa-c/home/&。而且命令行 指定的SERVER_ROOT可以覆蓋define.h文件所指定的。
(3)修改boa.conf文件
在./uclinux-samsung/user/boa/src/boa.conf里修改:
*將user obody
Group ogroup
改為User 0
Group 0;
*將DocumentRoot/var/www
改為DocumentRoot/home/web,這樣web服務器的文檔根目錄為/home/web;
*將MimeTypes/etc/mime.types
改為MimeTypes/home/web/mime.types;
定義默認首頁和CGI程序所在目錄,即
DirectoryIndex index.html
ScriptAlias/cgi-bin//home/web/cgi-bin/
這樣指定后,.index.htm為遠程瀏覽客戶訪問Web Server所看到的首頁默認值,用C編寫的CGI程序編譯成二進制文件,放到/cgi-bin/目錄下,CGI程序能被正確地執(zhí)行。
Boa.conf文件和mime.types文件必須放到Web服務器根目錄下,所以把修改后的bao.conf和mime.types拷貝到“./uclinux-samsung/romfs/home/”目錄下。然后在/uclinux-samsung/Vendors/Samsung/4510b/inittab里修改,在:inet:unknown:/bin/inetd后加入:boa:unknown:/bin/boac/home。
配置過程后,重新編譯內核,編譯時選中Boa選項。把編譯好的內核下載到開發(fā) 板,啟動uClinux,完成IP配置,啟動Boa Web Server,然后就可以通過IE訪問你的網(wǎng)頁了。如果想啟動uClinux時自動啟動Boa Web Server,可以修改rc文件,進入uclinux-samsung/vendors/Samsung/4510B目錄,在運行腳本rc中增加兩行:
ifconfig eth202.196.9.197up
boa-c /home/&
修改后重新編譯內核,再下載到開發(fā)板運行。運行uClinux后,不需要配置就可以直接通過IE來訪問你的網(wǎng)頁了。
2.2 uClinux下實現(xiàn)動態(tài)Web頁面的CGI技術
到目前為止,實現(xiàn)動態(tài)Web頁面有4種技術可供選擇:CGI(Common Gateway Interface)、ASP(Active X ServerPage)、ASP(Active XServerPage)、PHP(Personal Home Page)和JSP(Java Server Page)。在uClinux下如果要實現(xiàn)動態(tài)網(wǎng)頁,只能采用CGI,因此目前uClinux還不支持ASP、PHP等動態(tài)Web頁面技術。
CGI(通用網(wǎng)關接口)提供Web服務器一個執(zhí)行外部程序的通道,這種服務端技術使得瀏覽器和服務器之間具有交互性。CGI程序屬于一個外部程序,需要編譯成可執(zhí)行文件,以便在服務端運行,其應用程序結構如圖1所示。瀏覽器將用戶輸入的數(shù)據(jù)送到Web服務器,Web服務器將數(shù)據(jù)使用STDIN送給CGI程序,在執(zhí)行CGI程序后,可能會訪問存儲數(shù)據(jù)的一些文檔,最后使用STDOUT輸出HTML形式的結構文件,經(jīng)Web服務器送回瀏覽器顯示給用戶。
CGI程序可以用任何程序設計語言編寫,如Shell腳本語言、Perl、Fortran、Pascal、C語言等。但目前uClinux不支持Perl、Fortran等語言,而且C語言在平臺無關性上表示不錯,所以我們選擇用C來編寫CGI程序。另外,uClinux也不支持數(shù)據(jù)庫,所以需要保存的數(shù)據(jù)只能保存到文件中,CGI查詢數(shù)據(jù)時也是查詢這些文件,而不是訪問數(shù)據(jù)庫。
2.3 uClinux下動態(tài)Web頁面的實現(xiàn)
下面通過一個例子來說明如何實現(xiàn)uClinux下的動態(tài)Web頁面技術。此例子的目的是使用戶能夠通過Web頁面內嵌表單提交數(shù)據(jù),并能把用戶提交的數(shù)據(jù)通過Web瀏覽器正確地返回給用戶。實現(xiàn)動態(tài)Web頁面的第一步是用HTML語言編寫Web頁及內建表單。編寫Web頁面時,要由ACTION屬性來指定相關的CGI程序,如ACTION=cgi-bin/demo;由MOTHOD屬性來指明所用的提交數(shù)據(jù)的方法,即MOTHOD=POST(GET)。本人編寫的Web頁面在瀏覽器中的顯示如圖2所示。
實現(xiàn)動態(tài)Web頁面的第二步是用C編寫CGI程序,CGI程序分為以下幾部分:①根據(jù)POST方法或GET方法從提交的表單中接收數(shù)據(jù);②URL編碼的解碼;③用printf()函數(shù)來產(chǎn)生HTML源代碼,并將經(jīng)過解碼后的數(shù)據(jù)正確地返回給瀏覽器。包括demo.c、cgivars.h和cgivars.c三個文件。將編寫好的CGI程序編譯成二進制文件放在cgi-bin/目錄下,CGI程序能被正確地執(zhí)行,最終CGI程序對上述表單數(shù)據(jù)的處理結果如圖3所示。
圖3 CGI程序處理結果
下面對程序稍加說明。若以GET方法提交數(shù)據(jù),表單中的數(shù)據(jù)被保存在QUERY_STRING環(huán)境變量中,通過調用函數(shù)getenv("QUERY_STRING")來讀取數(shù)據(jù);若以POST方法提交數(shù)據(jù),則程序先從CONTENT_LENGTH環(huán)境量得到數(shù)據(jù)的字長,然后從標準輸入中讀取相應長度的字符串即可得到提交的數(shù)據(jù)。數(shù)組postinput[i]中保存的就是從表單中提取的數(shù)據(jù)。
URL編碼的解碼過程較為復雜,URL編碼的規(guī)則下:①變量之間用“&”分開;②變量與其對應值之間用"="連接;③空格符用"+"代替;④特殊意義的字符用%接相應的十六進制ASCII碼代替。解碼即為編碼的逆過程。在程序中,對于從表單中提取過來的postinput[i]中的數(shù)據(jù),當發(fā)現(xiàn)字符為“+”時,將它轉換成空格;當發(fā)現(xiàn)字符為“&”時,意味著個名字/值對的結束,在此處將字符中切成幾個字符串;當再現(xiàn)字符為“=”時,意味著一個名字/值對的名字部分的結束,在此再將名字/值對分開。最后通過調用unescape_url(char *url)子函數(shù)將十六進制ASCII碼值表示的特殊字符轉換成相應的ASCII字符。
結語
用本文所提供的方法實現(xiàn)的動態(tài)Web Server通用性強,能夠在嵌入式平臺上高效率地運行,有著廣泛的應用前景。
- 實現(xiàn)方法(5285)
相關推薦
基于ARM技術的uClinux系統(tǒng)設計和應用分析


uClinux串口編程的基本方法
uClinux內核與驅動開發(fā)
uClinux平臺下的Flash存儲技術
uClinux平臺下的Flash存儲技術
uClinux平臺下的Flash存儲技術的系統(tǒng)設計
uClinux的引導程序選擇
uclinux的使用方法
一文知道uClinux和Linux的異同
主流web前端技術框架
使用WebView組件實現(xiàn)應用與Web頁面間的通信
單片機嵌入式Internet技術的Web應用實現(xiàn)
在uIP協(xié)議棧實現(xiàn)基于AJAX和CGI的動態(tài)Web服務器
基于FPGA的uClinux系統(tǒng)移植及實現(xiàn)web-server[1]
基于LabVIEW和Matlab虛擬實驗室的實現(xiàn)
基于嵌入式Web Server的無線數(shù)據(jù)采集系統(tǒng)
如何實現(xiàn)對嵌入式WEB服務器系統(tǒng)的控制設計
如何利用ColdFire uClinux實現(xiàn)數(shù)據(jù)采集和傳輸?
如何去實現(xiàn)FPGA動態(tài)部分的重構?
如何才能正常啟動uclinux呢?
嵌入式Web技術在無紙記錄儀中的應用研究
嵌入式Web視頻點播系統(tǒng)實現(xiàn)方法
嵌入式uClinux的內核結構和開發(fā)環(huán)境
嵌入式Linux系統(tǒng)下的CGI程序設計技術資料大合集
怎樣編寫uClinux下CAN設備的驅動程序?
成都WEB技術培訓及WEB前端開發(fā)培訓
求大佬分享一種基于FPGA的OLED真彩色動態(tài)圖像顯示的實現(xiàn)方法
第47章 RL-TCPnet之Web服務器的CGI實現(xiàn)
第52章 RL-TCPnet之Web服務器的Ajax實現(xiàn)
請問uclinux的rx指令無法使用,如何通過串口傳文件進去?
請問一下遠程測控中嵌入式Web服務器的FPGA的實現(xiàn)方法
請問怎么通過wifi實現(xiàn)WEB訪問?
基于ARM的嵌入式uClinux系統(tǒng)設計與Web服務器應用的

uClinux下動態(tài)Web技術的實現(xiàn)方法

基于uClinux的嵌入式無線IPSecVPN網(wǎng)關

Web元數(shù)據(jù)信息提取技術的研究

提高傳感器動態(tài)特性方法分析

用SVG技術實現(xiàn)動態(tài)圖形輸出的嵌入式Web服務

基于Web的三維GIS的設計與實現(xiàn)

應用FPGA動態(tài)配置技術實現(xiàn)uClinux動態(tài)外設

基于ARM的uClinux移植與開發(fā)

uClinux 下CAN 通信卡驅動程序的實現(xiàn)

SOPC系統(tǒng)建立及uClinux移植實現(xiàn)

基于ARM嵌入系統(tǒng)的動態(tài)WEB技術的研究與實現(xiàn)

基于uCLinux和S3C4510B的網(wǎng)絡通信的設計與實現(xiàn)

基于uClinux平臺的程序設計

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

基于QoS控制技術的Web服務合成

基于WEB的遠程實時監(jiān)測系統(tǒng)的實現(xiàn)技術

一種基于Web Service的動態(tài)電子政務系統(tǒng)

動態(tài)網(wǎng)頁環(huán)境下的Web使用記錄挖掘研究

基于Web的中水遠程監(jiān)控系統(tǒng)的設計與實現(xiàn)

基于Web的中水遠程監(jiān)控系統(tǒng)的設計與實現(xiàn)

異構網(wǎng)絡下的Web監(jiān)控系統(tǒng)設計研究

Java在基于WEB的嵌入式系統(tǒng)中的應用

基于SOPC的嵌入式Web服務器設計與實現(xiàn)

Linux嵌入式WEB系統(tǒng)研究及實現(xiàn)

利用緩存技術優(yōu)化基于ASP.NET的Web GIS性能

基于MDA的Web應用開發(fā)方法

基于嵌入式Linux的動態(tài)Web開發(fā)模型研究

基于AJAX技術的WEB研究與實現(xiàn)

基于ARM uCLinux的網(wǎng)絡控制系統(tǒng)設計與實現(xiàn)


什么是uCLinux?


基于Linux的WEB服務器的設計與實現(xiàn)


利用ColdFire uClinux實現(xiàn)數(shù)據(jù)采集和傳


基于模塊化設計方法實現(xiàn)FPGA動態(tài)部分重構


基于MD5算法的動態(tài)口令技術的軟件實現(xiàn)

基于uClinux的實時操作系統(tǒng)分析與實現(xiàn)

基于SSH框架的動態(tài)表單設計與實現(xiàn)

基于CGI技術的嵌入式動態(tài)Web的研究與實現(xiàn)

動態(tài)Web服務器設計

uClinux進程調度器的實現(xiàn)分析

在uclinux下實現(xiàn)撥號

基于89c54的遠程動態(tài)可重構技術原理及實現(xiàn)方法

基于對象跟蹤的動態(tài)分析方法

WEB測試環(huán)境搭建和測試方法

基于Agent技術實現(xiàn)Web服務集成原型系統(tǒng)設計實例分析


如何使用Java RMI實現(xiàn)動態(tài)Web服務的詳細資料說明

基于WEB技術與嵌入式技術實現(xiàn)對設備的控制與診斷


基于ARM技術的uClinux系統(tǒng)設計與應用分析

基于ColdFire5307處理器和uClinux操作系統(tǒng)實現(xiàn)數(shù)據(jù)采集系統(tǒng)的設計


Web的應用基礎


通過Python實現(xiàn)PLC數(shù)據(jù)可視化呈現(xiàn)于Web端的方案

基于arm和uclinux多串口通訊的設計與實現(xiàn)

評論