关键词: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的应用基础


评论