uClinux下动态Web技术的实现方法

摘要:介绍uclinux操作系统的御,实现uclinux下的boa web server;讨论如何通过编写cgi程序来最终实现uclinux下的动态web页面技术。 关键词: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通用性强,能够在嵌入式平台上高效率地运行,有着广泛的应用前景。

无线电测控装备中的电磁信号干扰设计
路由器有信号没网络怎么回事
联发科技展示5G基带芯片Helio M70:向下兼容4G
罗德与施瓦茨示波器分析脉冲宽度调制信号
常见的异形LED屏有什么样的原理及特点
uClinux下动态Web技术的实现方法
如何利用Tensorflow搭建神经网络?
预测性维护应把ICS网络纳入防护范围
石墨烯电池:电动汽车可能三分钟把电充满,石墨烯到底是什么?
经纬恒润推出车载T-Box产线测试系统
USB连接器接口的行业发展分析
空调市场趋于增长,可为何会库存严重?问题竟在这里!
为什么HALT测试和HASS测试在PDLC中很重要
小米6原型机曝光:骁龙835或联发科Helio X30处理器?
详解5G新体制天线技术
如何利用Raspberry Pi建造半自动4WD汽车
充电宝哪个牌子好耐用质量好,值得入手的充电宝推荐
5G加速助推自动驾驶更加的成熟
如何正确挑选水银接头
索尼XperiaXZ和iPhone7Plus哪个好