摘 要:在各种基于客户机/服务器模式的Internet应用中,为了降低服务器的功耗、体积和成本,提出了采用嵌入式WEB服务器代替传统的PC机服务器的方法。介绍了基于ARM嵌入式的WEB服务器设计,分析了系统的硬件配置与软件实现,探讨了嵌入式操作系统的选择和HTTP服务器的工作流程,并进行了相应的实验。
关键词:嵌入式系统;ARM;服务器;Socket;HTTP协议
引言
随着Internet的日益普及,将嵌入式系统接入Internet的想法变得更加现实和充满生机,在众多使用微处理器的嵌入式应用环境中,具备互联网络接入功能已经成为其发展的主要方向。通过Internet不仅可以获得现实世界各种状态的实时变化情况,还可以根据这些变化,制定相应的处理方案,再通过Internet实现远程控制和处理工作,与传统的基于个人计算机的Internet应用相比,基于嵌入式系统的Internet应用已经将我们带入了一个全新的境界。
使用互联网络的接入功能为嵌入式的微处理器应用带来许多优势:利用无所不在的互联网络,可以从全球的任何一个角落实现对设备的监控;利用开放的TCP/IP 网络通信协议,任何的计算机都可以使用通用的网络浏览软件访问设备,不需要专门的计算机和专门的软件;设备的信息通过网页的形式体现,可以使用数据、图表、动画等各种丰富的表现方式。
在各种基于客户机/服务器模式的Internet应用中,嵌入式WEB服务器以其功耗低、体积小、性能高、成本低廉、可便携、易于布置实施等特点,在应用环境灵活多变、任务响应实时性强、系统可靠性高等复杂应用领域中比传统的PC机服务器更具优势。有关二者主要性能指标的对比可以参见表1。
项目 |
PC服务器 |
WEB服务器 |
体积 |
庞大 |
很小 |
功耗 |
数百瓦 |
数瓦 |
成本 |
数千元 |
数百元 |
供电 |
必须使用市电 |
可以使用电池 |
布置实施 |
复杂 |
简单、容易 |
处理能力 |
多路 |
多路 |
任务响应速度 |
较慢 |
快 |
操作系统 |
大多为多任务、非实时操作系统 |
实时嵌入式操作系统 |
防水性能 |
很难实现 |
容易实现 |
防爆性能 |
很难实现 |
容易实现 |
可便携性 |
不能便携 |
可以便携 |
适应性 |
较差 |
适应应用环境灵活多变的场合 |
可靠性 |
较低 |
高 |
表1 WEB服务器与PC服务器主要性能对比
1 系统硬件设计
在系统结构设计上,考虑了现有的各种嵌入式网络实现方案。本文选择了采用32 位微处理器来构建系统的硬件平台。Samsung S3C44B0X微处理器是三星公司专为嵌入式设备和一般应用提供的高性价比微控制器解决方案[1],它使用ARM7TDMI核,工作频率在66MHz。为了降低系统总成本并减少外围器件,这种芯片还集成了下列片上外部设备[2]。
系统硬件结构主要包括:存储器;JTAG仿真器接口;D/A 和A/D接口;以太网接口;通用I/O接口;IIC总线接口电路与实时钟接口电路;CPLD接口;LCD和LED接口;HDLC(面向位的传输协议)接口;USB接口等。其基本硬件组成如图1所示。
2 系统软件设计
在嵌入式WEB 服务器中,软件设计十分重要。编写的TCP/IP 协议栈应该稳定可靠、性能合适,并且具有良好的使用界面,占用的系统资源要尽量少,以便为以后的二次开发和应用保留必要资源。
系统开发模式,如图2所示。直接在目标板上进行开发,并将宿主机和目标板通过串口相连,在宿主PC 机上运行相应软件作为目标板的显示终端,实现在目标板上的调试。
2.1 嵌入式操作系统
嵌入式操作系统EOS(Embedded Operating System)负责嵌入系统的全部软、硬件资源的分配、调度、控制、协调并发活动。Linux是一种非常受欢迎的操作系统,它与Unix系统兼容,源代码开放。它目前已广泛应用于服务器领域,并逐渐地应用到嵌入式设备当中。uClinux正是在这种氛围下产生的[3]。uClinux是面向无MMU(内存管理单元)CPU的嵌入式操作系统。它的内核是由Linux 2.0 Kernel发展起来的,由于Linux具有很高的可移植性,所以嵌入式Linux操作系统可以很容易地提供对特定厂家CPU的支持。
这种嵌入式Linux操作系统具有强大的网络功能,支持PPP、Ethernet等多种网络连接方式,包括完整的TCP/IP协议栈及大量的其他协议。目前,有很多的网络协议正在开发中。另外,由于Linux的开放性,任何新的网络协议可以很容易地加入到内核中。正是基于以上分析,本系统采用了uClinux作为嵌入式WEB服务器的内核。
2.2 HTTP协议
TCP/IP协议是一个四层协议系统,包括数据链路层、网络层、传输层和应用层,每一层负责不同的通信功能。基于TCP/IP协议可以实现多种功能应用,如:HTTP、TELNET、FTP等。本文主要讨论HTTP,也就是Web Server在应用层的主要协议。
HTTP服务器可使HTML页面,如Web页及其它文件为客户端所使用。用户可以根据自己的需要添加构成Web Server的所有其它动态或静态元素。HTTP是WWW上的协议。当用户要浏览服务器上的一个网页时,一个HTTP 请求就会从用户的浏览器发到HTTP服务器。服务器响应这个请求,把指定的网页传送回来,用户才能够看到网页内容。
工作流程:当数据包通过相应接口传送到以太网控制器和ARM处理器后,系统内部的TCP/IP堆栈进行数据包解析和流向判断,然后进行解包或者打包的动作,以继续进行后续工作。显然,最终的处理结果都要通过Web Server来进行。
系统主程序功能:建立TCP 类型SOCKET 在80 端口进行监听连接请求。接收到连接请求,将请求传送给连接处理模块处理。并继续进行监听。
系统主程序功能分配如图3所示:
·发送当前目录文件列表信息:将服务器当前目录下所有文件的信息发送给客户端,信息包括:文件名、大小、日期。
·发送HTML 类型文件:将客户请求的HTML 类型文件发送给客户。
·发送纯文本文件:将客户请求的纯文本发送给客户。
·发送JPG 图像文件:将客户请求的JPG 图像文件发送给客户。
·发送GIF 图像文件:将客户请求的GIF 图像文件发送给客户。
·解析客户请求HTTP 协议头:分析客户的请求。
图3 系统主程序结构图
3 实验
uClinux本身就是一个网络的产物,要掌握在uClinux下设计用户应用程序,就必须要了解有关uClinux下的网络编程,目前在网络编程中被广泛使用的socket。socket一般被翻译为“套接字”,简而言之就是网络进程中的ID。其实网络通信,本质就是进程间的通信,在网络中,每个节点都有唯一一个网络地址,即通常说的IP地址,两个进程在通信的时候,必须首先要确定通信双方的网络地址。
套接字最常用的有两种[4]:流式套接字(Stream Socket)和数据报套接字(Datagram Socket)。在Linux中,分别称为“SOCK_STREAM”和“SOCK_DGRAM”。这两种套接字的区别在于它们使用不同的协议。流式套接字使用TCP协议,数据报套接字使用的是UDP协议。
下面就结合本例,介绍如何在linux(uClinux)[5]下建立通信双方中服务器端的程序。本例是一个服务器程序,采用流式套接字,因为流式套接字提供了一种可靠的面向连接的数据传输方法。正如它的名字所指的那样,不管是对单个的数据报,还是对于数据包,流式套接字都提供一种流式数据传输。流式套接字由socket()函数调用来创建,而且调用时必须用bind()函数为它分配一个地址。
在创建好一个套接字,并赋给它一个地址之后,需要用一种方法来建立和客户机的连接,为了做到这一点,要使用listen()函数。该函数告诉套接字开始侦听客户机的连接请求。一旦将套接字设置成侦听连接后,实际的连接就可以由accept()函数来完成。如果连接成功的接受,accept()函数将返回一个新套接字的描述符,正是由accept()函数所创建的这个新套接字会被用作以后处理新的连接。在该例程中,ConnectData结构体中的msgFd套接字就是用来真正和客户端进行通信的socket。
原来的侦听套接字将会继续侦听新的连接请求,而新的请求可能会通过accept()函数的再一次调用而获得接受。在主程序中,利用信号处理函数,进行每隔2秒定时的往客户端发送字符串。
网络应用程序包括两个部分:一部分是服务器端的应用程序,主要是用于接受客户端的连接请求,接收客户端的信息,处理客户端的计算请求,向客户端发送计算结果和应答信息等。另一部分就是客户端应用程序,主要用于申请连接到服务器,向服务器发送计算请求,处理服务器发回的计算结果和其他信息。一旦客户机套接字和服务器套接字建立了连接,双方就可以通过send()和recv()函数的调用来发送和接收数据了。
具体实验包括如下几个步骤:
(1) 将用于访问嵌入式Web服务器的PC机(客户机)的IP配置成192.168.0.XXX(其中:XXX为不等于111的任意一个整数);
(2)将嵌入式Web服务器的IP配置成 192.168.0.111(当然也可以是其它地址,但要求与客户机在同一网段);
(3)启动嵌入式Web服务器的HTTP服务;
(4)在PC端(客户机)用浏览器IE去浏览地址192.168.0.111。实验得到的结果如图4所示。
图4 从PC机上浏览嵌入式Web服务器上的网页资源
当然也可以根据上面的结果进一步开发其它基于嵌入式Web服务器的应用功能。例如:将嵌入式数据库移植到Web服务器中,可以研发基于嵌入式Web服务器的数据库应用系统,在天气预报、火车飞机票务查询系统、股票信息等任务中代替传统的PC机服务器,降低系统的成本和体积,提高系统的可靠性。
4 结论
在各种基于客户机/服务器模式的Internet应用中,嵌入式WEB服务器以其功耗低、体积小、性能高、成本低廉、可便携、易于布置实施等特点,在应用环境灵活多变、任务响应实时性强、系统可靠性高等复杂应用领域中必将得到广泛应用,具有良好的发展前景。
本文的创新点:
1、提出了基于嵌入式系统ARM体系结构的嵌入式WEB服务器的设计思想。
2、实现了基于客户机/服务器模式的嵌入式WEB服务器系统。
参考文献
[1] S3C44B0X User Manual[EB/OL]. http://www. samsung.com/Products/Semiconductor/SystemLSI/Networks
/PersonalNTASSP/CommunicationProcessor/S3C44B0X/um_s3c44b0x_rev1.p df
[2] ARM7TDMI(Rev4) Technical Reference Manual. [EB/OL].http://www.arm.com/pdfs/DDI0210B_7TDMI_R4. pdf
[3] 顾咏枫, 陈章龙.嵌入式Linux 裁剪方法[J].小型微型计算机系统,2003.24(9):1697-1700
[4] 俞建新等.嵌入式应用程序开发综合实验9例[M].北京:清华大学出版社.2006
[5] 周蓓,王典洪,宋俊磊.ARM在信息家电方面的应用[J].微计算机信息,2006,2-2:126-128
|