基于PXA270嵌入式Web服务器的设计与实现
扫描二维码
随时随地手机看文章
随着嵌入式系统的发展和Internet的普及,嵌入式系统接入网络已经成为嵌入式系统应用的一个重要方向和必然结果,嵌入式Web服务器是嵌入式系统网络化应用的重要方面。传统的8位单片机由于其运行速度、驱动能力、功耗等问题已经越来越不能满足用户的需求。ARM处理器以其高性能、低功耗、丰富驱动等功能成为新的嵌入式电子产品开发的理想选择。同时为了实现对系统资源的更好分配、复杂任务的更好调度,引入嵌入式操作系统。ARM-Linux具有很好的移植性、稳定性、强大的协议支持功能和丰富的设备支持功能,现在被广泛应用于嵌入式操作系统。本系统采用基于INTEL Xscale架构的嵌入式处理器PXA270与ARM-Linux相结合构建一个嵌入式Web服务器。
1 嵌入式Web服务器技术
1.1 嵌入式Web服务器体系结构
嵌入式Web服务器的体系结构如图1所示。其中,客户端和Web服务器之间的通信协议采用HTTP 1.1;嵌人式实时多任务操作系统提供TCP/IP协议支持;Web服务器与数据库服务器间的交互接口为CGI(Common Gateway Interface)。
1.2 嵌入式Web服务器工作流程
客户端使用Web浏览器与Web服务器进行通信。Web服务器中使用HTTP协议,HTTP(超文本传输协议)为标准WWW传输协议,使用可靠的TCP连接,通常采用端口80。HTTP是一个简单的协议,每次连接只完成一个请求。客户端与Web服务器交换数据之前,首先用TCP/IP建立连接,服务器端程序建立TCP类型SOCKET并在80端口进行监听,服务器在接收到用户端的请求后,解析客户请求的HTTP协议头、分析客户的请求,根据客户的请求返回相应的数据。这些数据可来自静态主页和文件,也可以根据请求动态产生。由此可见,接收客户端请求、解析客户端请求、响应客户端请求、向客户端回送请求的结果是Web服务器所完成的主要任务。
2 模块功能分析
系统分为客户连接处理模块、客户请求处理模块、协议处理模块3个模块。
2.1 客户连接处理模块功能
连接处理模块如图2所示。此模块完成第一步客户连接请求的处理,并将请求信息传递给客户请求解析处理模块去处理。
模块工作流程如下:
(1)打开文件描述字,建立文件描述符;
(2)读取连接信息、获取客户信息;
(3)调用客户请求解析模块,关闭文件流。
2.2 客户请求解析处理模块功能
此模块在连接模块完成对客户请求信息进行解析、处理。模块工作流程如下:
(1)对用户信息进行解密;
(2)查找用户请求资源是否存在;
(3)判断用户请求类型,选取不同的协议进行数据回传。[!--empirenews.page--]
2.3 协议处理模块的功能
TCP/IP协议包括很多的协议,鉴于嵌入式Web服务器的应用场合和有限的资源,并不是所有的协议都需要实现,应根据系统的要求有选择的加以实现。以太网数据的传输是采用MAC地址来识别。为了保证系统在以太网的正常通信,首先需要实现ARP协议,因为ARP协议提供IP地址到MAC地址的转换功能。嵌入式Web服务器要实现在Internet上通信,在网络层一定要实现IP协议,以及能报告数据传送差错等情况的ICMP协议,因为IP协议是面向无连接的,它无法将状态信息和错误信息传到最初的主机上,因此要通过网际控制报文协议(ICMP)实现。在传输层主要有TCP协议和UDP协议,UDP协议是面向无连接的数据报文传输协议,而TCP协议则是面向可靠的数据流的传输。基于应用的需要和对可靠性的要求,在传输层采用TCP协议,并对TCP协议进行简化处理。在应用层,远端主机是通过浏览器的访问控制方式读取数据的,所以要实现HTTP协议。其他一些在Internet上应用较广泛的协议(如FTP协议、SMTP协议等)在此无需实现。
协议处理模块完成对连接信息进行分析,根据参数的不同,发送不同的HTTP协议头信息,在Linux系统下建立通信双方的服务程序可以使用套接字技术,常用的套接字有2种:流式套接字和数据报套接字。本系统为实现Web服务器功能采用的是流式套接字,流式套接字用法流程图如图3所示。
流式套接字提供了一种可靠的面向连接的数据传输方法,此方法对单个的数据报和对数据包都提供一种流式数据传输。流式套接字由socket函数调用来创建、而且调用时必须用bind函数为它分配一个地址。使用listen函数建立和客户机的连接,该函数告诉套接字开始侦听客户机的连接请求。一旦将套接字设置成侦听连接后,用accept函数来完成连接,如果连接成功,accept函数将返回一个新套接字的描述符,新套接字被用作以后处理的连接。一旦客户机套接字和服务器套接字建立连接,双方就可以通过send()和recv()函数来发送和接收数据。
3 硬件平台与软件设计
3.1 硬件开发平台
基于PXA270的Web服务器硬件平台为研兴科技开发的EDK-270SL硬件系统,EDK-270SL是研兴科技针对Intel PXA270 CPU推出的Linux开发平台。PXA270嵌入式微处理器最高主频可达624 MHz,加入了WirelessMMX技术,大大提升了多媒体处理能力,同时PXA270还引入PC机上的Intel SpeedStep动态电源管理技术,在保证CPU性能的情况下,最大限度地降低移动设备的功耗。EDK-270SL由处理器核心板、主板及LCD三部分组成。EDK-270SL上还集成了下列部件:64 MB SDRAM、32 MB FLASH Memory、LAN91C113以太网接口、1个全功能串口,1个带流控串口、1个红外接口、1个CF、接口、1个USB HOST、1个USB SLAVE、2个SSP接口等。因处理器的高性能、低成本、高效率等特点,广泛应用于PDA、智能电器、仪器仪表、监测控制等领域。
3.2 软件设计
嵌入式Web服务器的软件开发主要包括以下几项内容:
(1)嵌入式操作系统ARM-linux的移植。ARM-Linux可移植性强,用户通过重新进行配置、编译内核可以使其内核文件小于500 kB。Linux是源码公开的免费操作系统,所用版本支持MMU功能。ARM-Linux网络支持功能强大,支持PPP,Ethernet等多种网络连接方式,包括完整的TCP/IP协议栈及大量的其他协议。另外,由于ARM-Linux的开放性,新的网络协议可以很容易地加入到内核中。移植过程如下:
①安装交叉编译工具链。由于嵌入式设备没有足够的内存以及存储资源来完成编译工作,于是就必须在主机上完成针目标机的代码编译生成,编译后的代码下载到目标机上运行。
②编译Linux内核需要的源码树:linux2.6.9-270SL1.tar.gz。使用自动编译脚本my编译内核,生成可运行在嵌入式系统上的内核映像文件zImage。
③创建JFFS2根文件系统。对于一个实际的嵌入式应用系统,仅包含Linux内核是不够的,还必须有文件系统的支持。在嵌入式Linux内核启动后,需要加载根文件系统,以支持系统与用户交互。[!--empirenews.page--]
(2)TCP/IP协议族的裁剪。在TCP协议中采用“停止等待算法”代替“滑动窗口算法”。一方面是由于数据量小,对网络拥塞不会产生太大影响,从而可以裁剪TCP的流量控制功能;另一方面是因为数据量小时,采用停止等待算法的传输效率和滑动窗口算法的效率差不多,因此采用简单停止等待算法代替复杂的滑动窗口算法,不但降低了实现难度,提高了处理速度,同时取消了TCP发送缓存区和接收缓存区,从而减小了占用存储空间。研究发现,如果TCP层的上层实现服务器端的应用,可以将标准TCP状态机建立连接过程中客户端建立连接的状态机部分简化掉,即将主动创建连接的SYN-SENT状态,主动关闭连接的FIN-WAIT1,FIN-WAIT2,CL0SING,TIME-WAIT状态。同理,如果应用是基于客户端的,还可以将服务器建立连接的状态机部分简化。当处于监听状态的服务器收到客户端的请求时,发送“ACK+对方发过来的SYN数据”。当收到来自客户端的一个仅含有ACK的空数据片后,双方进人Established状态建立连接,之后可以进行TCP数据通信。这样既节省了系统开销,同时也保证了所有的数据段都能安全正确地到达目的端。
(3)编写HTTP Web Server。Linux下嵌入式Web服务器主要有3个:httpd,thttpd和Boa。系统以boa作为服务器。Boa是一个单任务的http服务器,源代码开放、性能高。建立boa Web服务器的步骤如下:
①下载boa源代码boa-0.94.14r21.tar.gz。BoaWeb服务器的源代码可以从http://www.boa.org下载,当前最新版本为0.94.14。
②安装并编译boa源代码。首先将源码文件进行解压,修改Makefile文件,修改CC=gcc为CC=/usr/local/arm-linux/bin/arm-linux-gcc(//自己主机交叉编译器的目录),修改CPP=gcc-E为CPP=/usr/local/arm-linux/bin/arm-linux-gcc-E,执行make,即可在SRC下得到boa可执行文件。
③配置boa Web服务器。Boa启动时将加载一个配置文件boa.conf,在boa程序运行前,必须对其进行修改。
④执行Boa。成功配置以后,创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,将静态网页存入该目录下(将主机/usr/share/doc/HTML/目录下的index.html文件和img目录复制到/var/www目录下),创建CGI脚本所在录/var/www/cgi-bin,将cgi的脚本存放在该目录下,另外还要将mime.types文件复制/etc目录下。在实际运行时,可以将index.html,index_Zcn.html文件、img目录和mime.types文件放到CF卡目录下,建立目录后,拷贝至相应目录。启动ARM-Linux,在终端运行./boa,用网页浏览器访问,看到/usr/share/doc/HTML/目录下的index.html网页,嵌入式Web服务器移植成功。
(4)CGI程序设计
嵌入式Web服务器,其为用户提供基于HTTP协议的网络接入方式,再通过编写适当的CGI程序来实现动态网页的交互。
要使用CGI程序,一般使用HTML中的FORM结构:<FORM ACTION="/cgi-bin/文件名";METHOD=传送方法>内容</FORM>,其ACTION属性指定相关的CGI程序,METHOD属性指明提交数据的方法(POST或GET);也可以在<A>标签的HREF属性中调用CGI程序,结构如:<A HREF="/cgi-bin/文件名">START CGI</A>;还可以在<IMG>的HTML标签中调用CGI程序,如果把CGI程序的路径当作SRC属性的话,服务器就会去运行程序并把运行结果当成图像的来源,结构如:<IMGSRC="/cgi-bin/文件名">。
4 结 语
嵌入式Web服务器是实现嵌入式系统通过Web方式与Intenet互联的关键组成部分,直接影响网络应用系统运行的质量与效率,对其进行研究对Intenet技术的发展有重要意义。本文提出一种基于ARM-Linux操作系统的嵌入式Web服务器的设计方法,并给出相应的软硬件设计,并利用Socket编程和CGI程序完成整个Web服务器的设计。该嵌入式Web服务器具有成本低、开放性好、可移植性强等优点,便于后期维护和升级。由于此设计的嵌入式Web服务器是一个单独的模块,提供的是标准接口,只要在软件上作少许的修改就能很容易地应用到其他的嵌入式设备(如智能家电、现场节点等)中,具有一定的推广价值。