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


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

基于uClinux的嵌入式無線IPSecVPN網關

Web元數據信息提取技術的研究

提高傳感器動態特性方法分析

用SVG技術實現動態圖形輸出的嵌入式Web服務

基于Web的三維GIS的設計與實現

應用FPGA動態配置技術實現uClinux動態外設

基于ARM的uClinux移植與開發

uClinux 下CAN 通信卡驅動程序的實現

SOPC系統建立及uClinux移植實現

基于ARM嵌入系統的動態WEB技術的研究與實現

基于uCLinux和S3C4510B的網絡通信的設計與實現

基于uClinux平臺的程序設計

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

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

基于WEB的遠程實時監測系統的實現技術

一種基于Web Service的動態電子政務系統

動態網頁環境下的Web使用記錄挖掘研究

基于Web的中水遠程監控系統的設計與實現

基于Web的中水遠程監控系統的設計與實現

異構網絡下的Web監控系統設計研究

Java在基于WEB的嵌入式系統中的應用

基于SOPC的嵌入式Web服務器設計與實現

Linux嵌入式WEB系統研究及實現

利用緩存技術優化基于ASP.NET的Web GIS性能

基于MDA的Web應用開發方法

基于嵌入式Linux的動態Web開發模型研究

基于AJAX技術的WEB研究與實現

基于ARM uCLinux的網絡控制系統設計與實現


什么是uCLinux?


基于Linux的WEB服務器的設計與實現


利用ColdFire uClinux實現數據采集和傳


基于模塊化設計方法實現FPGA動態部分重構


基于uClinux的實時操作系統分析與實現

基于SSH框架的動態表單設計與實現

基于CGI技術的嵌入式動態Web的研究與實現

動態Web服務器設計

uClinux進程調度器的實現分析

在uclinux下實現撥號

基于89c54的遠程動態可重構技術原理及實現方法

基于對象跟蹤的動態分析方法

WEB測試環境搭建和測試方法

基于Agent技術實現Web服務集成原型系統設計實例分析


如何使用Java RMI實現動態Web服務的詳細資料說明

基于WEB技術與嵌入式技術實現對設備的控制與診斷


基于ARM技術的uClinux系統設計與應用分析

基于ColdFire5307處理器和uClinux操作系統實現數據采集系統的設計


Web的應用基礎


評論