摘要:主要介绍嵌入式Web服务器技术的设计思想和软件设计流程,以及应用程序文件系统的构造,将网页文件转化为可编译的数据结构;并以32位ARM7微处理器LPC2210为硬件平台,在源码公开的ZLG/IP软件包的支持下,给出了一个嵌入式Web服务器的应用实例。
关键词:Web服务器;应用程序文件系统;LPC2210;ZLG/IP软件包
1 概述
随着嵌入式技术和网络技术的发展,嵌入式设备通过网络接入局域网或者Internet逐步成为一种发展趋势。嵌入式Web服务器技术以其良好的通用性和交互性为嵌入式设备提供网络接口,对嵌入式设备实现远程管理和控制,是实现嵌入式设备网络化的重要技术。
本设计提出的基于ARM7的嵌入式Web服务器设计有三大技术亮点:
①采用浏览器/服务器(B/S)通信架构。与客户机/服务器通信架构相比,B/S架构无需在客户端上开发专门的应用软件,只需从浏览器上输入IP地址,直接对设备进行远程监控。
②传统的Web服务器需要一个数据库系统的支持用来保存内容,因而对用于存储的硬件设备要求更高,增加了成本。本设计只需构建一个简单的文件系统对网页文件进行管理,通过网页转换程序将网页文件转换为十六进制的可编译的数据结构,是一种直接绑定在一个应用程序
上面的文件系统。
③本设计构造的Web服务器提供动态内容和动态表单的支持,能满足一般嵌入式设备的应用要求。
2 HTTP协议讨论
HTTP(超文本传输协议)是一种应用层协议。Web服务器是基于HTTP协议运行的,Web服务器和Web客户机之间通过HTTP协议来进行通信。在进行通信前,先要建立客户机与服务器之间的连接:启动Web服务器,启动后服务器将监听80端口号,Web客户机发送一个动态随机产生的连接端口号连上服务器,从而建立一个通信通道。
HTTP协议基于请求/响应模式。一个客户机与服务器建立好连接后,向服务器发送一个请求报文,服务器接到请求后给予相应的响应信息。响应信息的格式为一个状态行(包括信息的HTTP协议版本号、一个成功或错误的代码),再跟上MIME信息(包括某些通用且详细的有关应答的信息,如可选报头、报文报体等)。HTTP协议结构如图1所示。
3 嵌入式Web服务器的设计
3.1 嵌入式Web服务器设计思想
嵌入式Web服务器主要有以下2个用途:根据Web客户机的请求为其提供设备运行状态、参数;从客户机提取控制信息,更改设备运行参数等。由于嵌入式系统资源的有限性,本文设计的Web服务器具有很强的针对性,具体包含以下性能:
①对动态内容和动态表单的支持,Web服务器只需处理GET和POST请求方法,无需提供对其他请求方法的支持。
②用于内容保存的“应用程序”文件系统,即将内容文件转换成数据结构,直接绑定在一个应用程序上面。
③嵌入式Web服务器只实现与系统控制相关的页面。
嵌入式Web服务器模型层次如图2所示。
3.2 对动态内容和动态表单的实现
先编写一个包含动态标志和表单的HTML文件,再分别编写动态内容处理功能函数和表单分析处理函数。在建立HTTP服务器套接字之前,需要先安装好自己句柄,将网页中的动态标识与其对应的动态内容处理功能函数,以及表单标识与表单分析处理函数相关联。图2中的动态内容/句柄API就是用来提供变量名/表单名与用户定义功能之间的联系。
动态内容安装句柄:
addDynamicContent(“temperature”,&getTemper);
表单安装句柄:
addDynamicHandler("/control",&myHandler);
其中,temperature和/control分别为网页中的动态内容标识和表单标识,getTemper和myHandler分别为动态内容处理功能函数和表单分析处理函数。
这样,每当有GET请求时,动态内容处理功能函数的返回值将替代动态标志的值嵌入到内容流中。每当有POST请求时,表单分析处理函数调用parseVarialbe功能,简单地在内容中查找变量名。一旦发现,这个值便被复制到用户缓冲器中,直到发现分界符“&”。POST构造一个包括报体的HTTP请求报文,发送给Web服务器。该报文按照键值对其进行组装,使用符号“&”分隔。
3.3 嵌入式Web服务器主程序
嵌入式Web服务器主程序流程如图3所示。本设计中使用的Web服务器套接字是典型的TCP流套接字。通过socket()创建一个套接字,使用bind()将该套接字绑定在80端口上,通过listen()设定监听的连接数,最后调用accept()等待Web客户机的连接请求。一个套接字支持一个请求,不能支持永久型连接。当服务器接收到一个连接时,功能函数handleConnection()对用户请求进行解析,根据返回的内容关闭客户机套接字,然后等待另一个套接字请求。
对handleConneetion()功能函数(请求报文分析程序)分析如下:
①在HTTP请求报文中进行读操作,从该套接字循环读取,直到满足以下两个条件之一:查找到Content_Length报头,确定报文报体大小;请求若为post方法,简单地查找+QUERY文本。
②处理HTTP请求类型。对请求报文的第一个令牌进行识别。如果为GET请求,则从中分析请求的文件名,使用lookupFilename()功能函数查找该文件名,若没有则发送适当的状态码给请求者,若有则调用returnFile原语通过套接字来发送请求文件。如果为HTTP POST请求,则再次分析文件名,然后通过call Dynamic Handle功能函数调用一个用户定义的功能处理请求。若既非GET请求,也非POST请求,则返回状态码“not implemented”。
4 应用程序文件系统的构造
本设计使用一个特殊的buildfs应用程序将网页文件编译为顺序的数据结构,它将网页文件所在的目录路径作为变量,将这个变量作为内容树的根。遍历内容树,将遇到的每个文件累计到应用程序文件系统结构中,并写入文件filedata.c。文件filedata.c作为工程文件的一部分,一同被编译、下载到硬件上。buildfs生成的应用程序文件系统结构如表1所列。当定位一个文件时,只需找到文件报头,将文件项目的文件名和源文件名进行比较。若文件匹配,则可将后来检索的元素调出。
本设计采用HTML语言设计的嵌入式网页文件如图4所示。使用buildfs应用程序生成该网页文件的数据结构,如图5所示。
5 测试HTTP服务器的应用实例
本设计的软件平台构成如图6所示。硬件平台由NXP公司的32位ARM7微处理器LPC2210和RTL8019AS网卡芯片构成,如图7所示。LPC2210是基于一个支持实时仿真和嵌入跟踪的32/16位ARM7TDMI-SCPU。
图6中TCP/IP协议栈使用周立功公司提供的ZLG/IP软件包。修改软件包中的cfg_net.h文件,子网掩码设置为与PC机相同,IP地址设置为192.168.0.174(与PC机同一网段),网关设为PC机的IP地址。用双绞线将PC机与RJ45以太网接口相连,启动微处理器LPC2210。在PC机上打开Web浏览器,在地址栏输入http://192.168.O.174/server.html,将出现如图4所示的网页文件。此时,测得的室内温度为26 ℃。
在Parameters Setring栏中输入预设温度和开关的开或关,单击Upload按钮,在Web服务器的表单分析程序中会将预设值和开关值复制到用户缓冲器中,从而进行相应的处理。
结语
本文介绍了基于ARM7微处理器LPC2210的嵌入式Web服务器的设计方法,并用一个应用实例对其进行了验证。结果表明,该方法是可行的,可用于对嵌入式设备进行远程监控的应用中。