嵌入式Web服务器的实现
- 格式:pdf
- 大小:227.78 KB
- 文档页数:17
嵌入式Web服务器的实现1Boa程序1.1Boa简介boa是最受人喜爱的嵌入式web服务器,功能较为强大,支持认证,cgi等。
Boa 是一个单任务的HTTP SERVER,它不像传统的web服务器那样为每个访问连接开启一个进程,也不会为多个连接开启多个自身的拷贝。
Boa对所有的活动的http连接在内部进行处理,而且只为每个CGI连接(独立的进程)开启新的进程。
因此,boa在同等硬件条件下显示出更快的速度。
测试表明boa在Pentium 300MHZ下能够每秒钟处理几千次点击,在20 MHz 386/SX 下能够每秒钟处理几十次点击访问。
Boa和thttpd等,与apache等高性能的web服务器主要区别是,它们一般是单进程的服务器,只有在完成一个用户请求后才能响应另一个用户的请求,无法并发响应,但这在嵌入式设备的应用场合里已经足够了。
Boa设计主要出于速度和安全,是指不被恶意用户暗中破坏,而不是指它有很好的访问控制和通信加密。
可以添加SSL来保证数据传输中的保密和安全。
1.2Boa的功能、特点1)支持HTTP/1.0(实验性的、有条件的支持HTTP/1.1)1.12)支持CGI/1.1,编程语言除了C语言外,还支持Python, Perl, PHP,但对PHP没有直接支持,没有mod_perl, mod_snake/mod_python等。
3)Boa支持HTTP认证,但不支持多用户认证。
4)它可以配置成SSL/HTTPS和IPv6。
5)支持虚拟主机功能。
Boa服务器与其它服务器的不同:为了追求速度和简单性,boa服务器在一些方面不同于一些流行的web服务器。
1)CGI程序的REMOTE_HOST环境变量没有设置2)Boa不具有ssi(server side includes)3)Boa不具有访问控制4)没有chroot选项1.3Boa的工作原理BOA是一款非常小巧的Web服务器,源代码开放、性能优秀、支持CGI通用网关接口技术,特别适合应用在嵌入式系统中。
微型嵌入式Web服务器的设计与实现微型嵌入式Web服务器的设计与实现类别:嵌入式系统1引言随着计算机、网络通信和Internet技术的飞速发展和不断进步,嵌入式系统在家庭和工业应用广泛。
如何将嵌入式系统和工业控制系统接人Internet,综合利用嵌入式系统资源,实现嵌入式系统的远程管理和控制,已成为关注的研究课题,而实现嵌入式系统的网络化则成为嵌入式系统的发展趋势。
以太网以其成本低、速度快、应用普遍、有广泛的硬件和软件支持等优点为实现管理控制网络一体化提供可能,在现场设备内置WEB服务器,使现场设备具有网页发布功能,将Internet技术直接引入现场设备。
本设计是基于ARM7的微型嵌入式Web服务器。
目前市场上大部分以太网控制器的封装均超过80引脚,而ENC28J60是业界最小的以太网控制器,只有28引脚,这样既能提供相应功能,又大大简化相关设计,减小空间,其标准的SPI串行接口只需4条总线即可实现与单片机连接,有利于在小型系统上实现以太网功能。
在研究和分析TCP/IP协议的基础上,合理简化TCP/IP协议,选择实现ARP、IP、ICMP、TCP和HTTP协议。
2系统硬件设计ENC28J60的硬件连接如图1所示。
ENC28J60的硬件设计包括复位电路、时钟振荡器、网络变压器和其他外部元件以及LED配置单元模块。
2.1复位电路当ENC28J60的RESET引脚为低电平时ENC28J60工作在复位模式。
RESET引脚内部有弱上拉电阻,应外接一只10kΩ的上拉电阻。
2.2时钟振荡器ENC28J60工作频率为25MHz。
在OSC1和OSC2引脚之间连接无源晶体振荡器。
ENC28J60要求使用平行切割的晶体。
本设计采用连接至OSC1引脚的外部25MHz有源晶体振荡器驱动,此时3.3V的外部时钟连接OSC1引脚,OSC2引脚可使用一只接地电阻或断开OSC2引脚以减少系统噪声。
2.3网络变压器和其他外部元件实现以太网接口控制,还需多个标准外部元件:网络变压器、偏置电阻、储能电容和去耦电容。
1.绪论自18世纪的工业革命以来,人类社会在每个世纪都有它的主流技术。
在经历了机械时代,蒸汽机时代和电气时代后,以信息的收集,处理和发布为主要特点的信息技术是成为我们这个时代的主流技术。
信息技术的蓬勃发展,对我们这个社会产生了极为深远的影响。
1.1 嵌入式系统的发展及现状嵌入式概念早在20世纪60年代末己被提出,在经历了二、三十年的缓慢发展后,截止到上世纪90年代,它获得了全面的应用和发展。
目前,随着IT 业向数字化、网络化和智能化方向发展,嵌入式技术的应用全面展开。
在通信领域中,采用嵌入式技术的交换和路由设备实现了智能的交换和路由。
在广播电视领域,嵌入式软件技术和数字技术的结合,造就了家电行业的未来发展方向-信息家电。
在控制领域,广泛应用于ATM机、自动售货机、工业控制等设备。
在商业领域中,先进的PDA己能在屏幕上实现汉字写入、短消息语音发布,应用范围也将日益广阔。
在个人领域中,嵌入式产品将主要作为个人移动的数据处理和通信软件。
由于嵌入式设备具有人性化的人机交互界面,GUI屏幕为中心的多媒体界面给人以很大的亲和力,手写文字输入、语音拨号、收发电子邮件以及彩色图形、图像取得初步成效,所有上述产品都离不开嵌入式系统技术。
中国的单片机应用和嵌入式系统开发有15年的历程,有超过10万名从事单片机开发应用的工程师,但绝大多数是以封闭的方式开发几乎不可重用的软件。
今天面对的是嵌入式系统工业化的潮流,嵌入式软件必须以工业化的方式生产开发,这对加速知识创新和建立面向新世纪的知识经济具有战略意义。
[1] 本文将讲述的单片机+TCP/IP软件的方法就可以使嵌入式系统上英特网,使嵌入式设备之间可以相互通信。
这种技术现今已用于工业自动化,POS(电子收款机系统)网络及电子商务,智能公路等方面。
1.2 嵌入式系统的定义嵌入式系统泛指单片机和微处理器构成的电子设备。
根据IEEE的定义,嵌入式系统是“控制、监视、或者辅助设备、机器和车间运行的装置”(devices used to control, monitor, or assist the operation of equipment, machinery or plants)。
第三章 嵌入式Web服务器的实现3.1 嵌入式Web服务器的概况随着计算机的日益普及,互联网络(Internet)已经成为人们日常生活的一部分。
互联网络是覆盖率极广、联网设备众多、协议完善、功能强大的一种通信方式,已经成为社会重要的基础信息设施,是重要的信息流通渠道。
具备互联网络的接入功能,已经成为众多使用微处理器的嵌入式应用的发展方向。
网络控制设备逐渐成为一种趋势。
使用互联网络的接入功能将给嵌入式的微处理器应用带来很多好处:利用无所不在的互联网络,可以从全球的任何一个角落实现对设备的监控;利用开放的TCP/IP 网络通信协议,任何的计算机都可以使用通用的网络浏览软件访问设备,不需要专门的计算机和专门的软件;设备的信息通过网页的形式体现。
因此从概念性上来讲,嵌入式Web服务器(Embedded Web Server)是指将Web服务器引入到现场测试和控制设备中,在相应的硬件平台和软件系统的支持下,使传统的测试和控制设备转变为具备了以TCP/IP为底层通信协议,Web技术为核心的基于互联网的网络测试和控制设备。
嵌入式Web服务器系统与传统的Web应用相比,简化了系统结构,将信息采集和信息发布都集成到现场的测控设备中。
一般来说,Web服务器通常由以下几个部分组成:● 服务器初始化部分。
这部分主要完成Web服务器的初始化工作,如建立守护进程、创建TCP套接字、绑定端口、将TCP套接字转换成侦听套接字,进入循环结构,等待接收用户浏览器连接。
● 接收客户端请求。
由于客户端请求以文本行的方式实现,所以服务器也以文本行为单位接收。
● 解析客户端请求。
这部分工作比较复杂,需要解析出请求的方法、URL(统一资源定位符)目标、可选的查询信息及表单信息。
如果请求方法为HEAD,则简单地返回响应首部即可;如果方法是GET,则首先返回响应首部,然后将客户端请求的URL 目标文件从服务器磁盘上读出,再发送给客户端:如果是POST,则比较麻烦,首先要调用相应的CGI程序,然后将用户表单信息传给CGI程序,CGI程序根据表单内容完成相应的工作,并将结果数据返回。
● 发送响应信息之后,关闭与客户机的连接。
Linux环境下,主要有三个Web服务器:Httpd、thttpd和Boa。
Httpd是最简单的一个Web服务器,它的功能最弱,不支持认证,不支持CGI。
thttpd和Boa都支持认证和CGI等,功能都比较全。
如果Web服务器仅需提供一些静态页面,例如系统介绍、简单的在线帮助等,完全可以用静态服务器Httpd 来实现。
但若需要与用户进行交互,例如数据查询、实时状态查询等,则必须使用动态Web技术,可以选用thttpd或者Boa来实现。
目前实现动态Web页面有多种技术可供选择,CGI, ASP, PHP等技术。
针对具体的嵌入式人机界面要实现动态数据和状态查询,而且要实现逻辑算法的实现,因此选择支持ASP、CGI、embedded JavaScript等脚本语言的Goahead。
3.2Goahead服务器3.2.1 GoAhead Web服务器的概况Web服务器采用GoAhead Web服务器,一款主要面向嵌入式系统的Web服务器。
它的体积非常小巧,但提供了不少的服务特性,它支持ASP,嵌入的JavaScript与内存CGI处理。
3.2.2 GoAhead Web服务器的结构图3-1为GoAhead Web服务器的处理流程,下面简单介绍其结构:main.c:GoAhead Web服务器的主程序文件,完成初始化、设置环境和启动Web 服务器等功能。
● 网页的根目录:*rootWeb = T("web");修改*rootWeb到新的网页目录下。
● 设置网站主页:websRedirect( wp, T("home.asp"));● 设置访问密码:*password = T("");● 设置访问端口:port = 80;Asp.c:asp解释器模块,主要有以下几个功能函数:websAspFunctions = symOpen( WEBS_SYM_INIT * 2 );创建asp函数列表,其中WEBS_SYM_INIT在头文件“wsIntrn.h”中定义。
websAspDefine( char_t *name, int (*fn)( int ejid, webs_t wp, int argc, char_t **argv));创建asp函数命令。
websAspFunctions是加载asp函数的标志;aspOpenCount是使用asp功能块的程序的个数;int websAspOpen()打开websasp正确返回0;void websAspClose()关闭asp模块;int websAspRequest( webs_t wp, char_t *lpath);处理asp请求和script命令。
Form.c:实现/goform的处理,主要有以下几个功能函数:formSymtab 是/goform处理列表的标志;int websFormHandler( webs_t wp, char_t *urlPrefix, char_t *webDir, int arg, char_t *url, char_t *path, char_t *query)处理form请求;int websFormDefine( char_t *name, void (*fn)( webs_t wp, char_t *path, char_t *query))定义一个form 的函数功能块;void websFormOpen()打开form表;void websFormClose()关闭form表。
cgi.c:cgi功能块int websCgiHandler( webs_t wp, char_t *urlPrefix, char_t *webDir, int arg, char_t *url, char_t *path, char_t* query)处理form请求。
security.c:安全功能块int websSecurityHandler( webs_t wp, char_t *urlPrefix, char_t *webDir, int arg, char_t *url, char_t *path, char_t *query)处理安全请求。
基于以上GoAhead Web服务器的结构和特点,针对动态网页的实现方面,采用ASP 和embedded JavaScrip技术来实现,才能实现组态动态网页。
3.3 Goahead服务器的移植Goahead的移植工作可以分为以下三个步骤来完成:第一步:下载Goahead源码由于Goahead的源代码是开放的,因此可以从Goahead的官方网站上下载到Goahead最新版本的源码。
最新开放源代码的Goahead版本为2.18。
第二步:配置Goahead Web服务器解压缩最新版本的Goahead服务器,进入目录,在修改/LINUX下的Makefile文件,将CC = arm-linux-gccAR = arm-linux-ar加到文件开始处,将cc -c -o $@ $(DEBUG) $(CFLAGS) $(IFLAGS) $<换成$(CC) -c -o $@ $(DEBUG) $(CFLAGS) $(IFLAGS) $<第三步:编译并下载执行$ Make clean$ Make将在LINUX目录下生成webs 和libwebs两个文件,只需将两个文件拷贝到ARM 目标板。
由于嵌入式系统没有足够的内存或存储资源来编译可执行代码,只有通过交叉编译代码来创建针对嵌入式系统的可执行文件,并把此文件送到目标机上执行。
因此,通常的嵌入式系统的开发都是装有Linux的PC机作为宿主机来编译内核和应用程序。
编译时可用arm-linux-来指定交叉编译器,不过使用之前先检查PATH路径是否正确。
在ARM目标板上运行Goahead Web服务器,还必须对目标板进行设置,设置如下:首先,在/etc/modules.conf 中加入alias binfmt-464c off ;其次,由于ARM中的Linux没有hostname,因此设置:hostname localhost; 设置IP地址:ifconfig eth0 192.168.1.34。
这样本地的浏览器或者其他主机的浏览器就可以浏览Goahead Web服务器网页。
注意:编译后用 strip 裁减生成的静态库与 webs 的文件大小,两个都在 120kb 左右,否则两个大小有 1.5MB。
3.4 Goahead服务器功能修改与增加3.4.1 Goahead服务器配置Goahead服务器得在程序中编译其配置信息,必须在编译之前将系统参数设置好,编译后,便不可以再改变。
针对这个功能,可以采取将配置信息存储在文件中,Goahead 运行时去获取相应配置信息即可。
那么就不需要重新编译其应用程序,只需要修改一下配置信息。
修改一些参数将其设置成配置信息,使其在修改时,不用重新编译和下载程序,现在做如下规定,配置参数存放在webs文件的同目录下,文件名为:“ServerCfg”。
需要配置的参数主要有以下几个,并定义其顺序,方便程序读取其参数。
0----------*rootWeb = T( "web" )1----------*password = T( "123456" )2----------port = 8080 (int)3----------retries = 5 (int)4----------umRestore( T("websconfig.txt") )5----------T( "/goform" )///goform handler6----------T( "/cgi-bin" )///cgi handler7----------T( "default.asp" )////default page8----------T( "asp.asp" )////home page9----------hostname///10---------ip地址定义了初始化程序,在Goahead服务器启动时,首先调用初始化程序;其次才正常启动Goahead服务器。
static int initconfig();//初始化配置信息为了方便初始化配置数据信息,定义了如下数据结构供初始化函数时使用: #define nmemb 11struct para_test{char name[30];int size;}serverCfg[nmemb];由于Goahead服务器启动过程中需要有hostname和ip地址,因此,在初始化程序中,将设置hostname和ip地址。