一种轻量级的嵌入式WEB服务器的设计与实现

来源 :光盘技术 | 被引量 : 0次 | 上传用户:qqgames
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:针对嵌入式系统资源有限、应用定制的特点,提出一种经裁减的轻量级TCP/IP协议的设计思想,经过协议的分析与裁减、功能模块的划分与具体实施,实现了一个为嵌入式系统量身定制的通信协议,并把协议集成在一个实际的嵌入式WEB服务器系统中。实践表明方案灵活高效、占用资源少、扩展性和移植性好。
  关键词:嵌入式系统;Web Server;轻量级 TCP/IP协议
  中图分类号:TP393文献标识码:A
  
  Design and Realization of A lightweight Embedded Web Server
  WU Tao
  (computer science Department of Lishui University,Zhejiang Lishui 323000)
  Key words: embedded system;Web Server;lightweight TCP/IP protocol
  
  嵌入式Internet技术是嵌入式技术和网络通信技术紧密结合的产物。它使互联网延伸到各种各样的嵌入式设备。具有广阔的应用前景和巨大的市场潜力。嵌入式Internet技术的实现方案很多,大致可分为以下四种[1]:
  (1)处理器+专用网络芯片方式。这种方式采用独立的专用网络接口芯片实现网络功能,通过网关与Internet相连。典型的产品有E1552、Webchip等。图1方式(1)为专用芯片Webchip实现的网络接入方案。这种方案的优点是不必考虑网络协议,只需要解释并执行网络芯片传送过来的指令和数据就可以实现与Internet连接。缺点是只能在低性能处理器中使用,而且需要一台微机作为通信的网关。
  (2)“EMIT技术”方式[2]。该技术由emWare公司开发,这种系统由emNet和emGateway两部分组成,emNet是运行在处理器内部,实现嵌入式系统和其他网络(如RS485等)连接的网络协议。emGateway(嵌入式微控制器网关)运行在外部设备(PC机等),它是实现与Internet连接的桥梁。图1方式(2)所示。这种方式应用广泛,适合于高性能的处理器。缺点是开发人员必须熟悉emNet协议和相关的接口,处理器处理emNet协议要占用一定的资源,同时需要计算机做通信网关。
  


  (3)“固化TCP/IP协议硬件芯片”方式。典型产品有沈阳东大公司的Webit。公司对产品的定义为:“Webit是一个微型Web服务器,它可以有自己的IP地址,传统的电器设备通过它可以直接连接到Internet,这样人们即便在千万里之外,也可以轻易地通过Internet控制各种电器设备”[3]。解决方案图1方式(3)所示。网络协议芯片把协议处理部分独立出来,使得开发人员省去了网络部分的工作,可把主要精力集中在应用系统本身上。但是从总体上看,它还是一个基于AVR单片机的系统,资源有限,不利于扩展。
  (4)嵌入式操作系统方式。这是目前应用最广泛的嵌入式Internet接入方式。处理器一般为高性能的ARM系列、Xscale系列等。系统都有一个集成了完整TCP/IP协议的操作系统。在嵌入式操作系统上实现各类服务或应用程序。这种方式的优点是开发方便、快捷。缺点是操作系统和TCP/IP协议都很庞大,要占用许多嵌入式系统资源,实时性不好。
  从上述分析可知,前三种网络接入方式主要针对单片机系统,使用场合受限。第四种方案从开发模式、操作系统以及TCP/IP协议都借鉴了桌面系统,同样不太适合嵌入式系统的特点和开发条件。为此,本文提出了一种轻量级TCP/IP协议的设计思想。
  
  1 轻量级Internet网络接入设计
  
  1.1轻量级TCP/IP协议设计思想
  嵌入式Internet应用系统的特点是资源有限、应用定制。而传统的TCP/IP通信协议庞大臃肿,消耗大量的系统资源。本文的设计思想是:针对嵌入式设备的具体特点,对TCP/IP协议进行裁减:使之成为紧凑的、轻便的,同时又是模块化的、高效的和易于移植的轻量级TCP/IP协议。用模块化的设计方法加以实现,集成到具体的应用系统中。
  本设计思想的实现方法是:(1)以"够用"为原则。对TCP/IP协议的进行裁减,去掉系统用不到的协议,同时对系统用到的协议也作适当简化。变庞大臃肿为紧凑轻巧。(2)模块化实现。把TCP/IP协议分成不同的模块实现,达到高效而又易于移植。(3)协议模块直接集成到一个无操作系统的应用程序中,实现嵌入式设备的Internet连接。(4)协议实现原则:一是高效(占用尽可能少的存储器和处理器时间),二是非阻塞(防止程序进入死锁)[4]。
  这是一种轻量级的TCP/IP协议在嵌入式设备"裸机"上直接实现的网络接入方案。特点是协议体积小、性能高、使用灵活、组件复用性强。不足之处在于系统结构复杂,开发周期长;同时协议与实际应用系统集成时,需要解决一些技术细节。
  1.2基于轻量级TCP/IP协议的嵌入式WEB服务器系统
  


  基于上述设计思想。我们开发一个轻量级TCP/IP协议的嵌入式WEB服务器系统:某医院重症监护区(ICU)实时监护监控系统。该系统对重症病人单一生命体征实施24小时不间断、无人值守监控,同时实现设备远程操作和应急报警等。监护参数有:心电(ECG)、血压(NIBP)、体温(TEMP)、血氧饱和度(SPO2)等。监护数据和设备控制信号通过接口电路进入嵌入式系统,嵌入式设备通过网线接入医院的局域网。供相关人员随时查询,远程指导以及应急处理等。
  针对实际系统,以“够用”为原则对TCP/IP协议进行裁减。具体实现如表1所示。系统接入层协议只保留以太网接入模块和ARP模块。传输层只保留TCP模块。应用层使用HTTP协议,WEB服务器中的业务处理包括各种实时信息的处理,由专门的程序实现。
  1.3软硬件系统的选择和确定
  硬件系统:目前设计和生产嵌入式系统的芯片公司很多。考虑到开发团队对芯片的熟悉程度、硬件的通用性和成本等因素,本系统采用Samsung 公司的S3C44B0X微处理器,芯片使用ARM7TDMI核,集成了许多部件。性价比高、通用性好。重症监护区(ICU)监控信号和对外控制信号都从GPIO接口接入。
  软件平台:系统是从“零”开始,在硬件“裸机”上直接开发的,因此软件开发平台的选择至关重要。在比较了各种集成开发环境(IDE)后,确定使用IAR Embedded Workbench的嵌入式开发平台。平台包含了C/C++编译器、调试器的IDE、起步套件、硬件调试探示器和状态机设计等工具。能在同一平台上实现编辑、编译、调试以及直接编译成二进制文件。从网络接入层的驱动到应用程序功能的实现都可以在这个集成开发环境中完成。下载最终编译成的二进制文件到硬件系统的工具采用Philips公司的Flash软件。网络调试和测试时还用到网络协议分析器(Wireshark)和网络包捕获器(WinPcap)等工具。
  
  2 轻量级嵌入式系统的实现
  
  2.1底层的协议实现
  2.1.1以太网引擎集成芯片接口
  系统的以太网控制器为Cirrus Logic公司的CS8900A芯片。芯片与S3C44B0X处理器实际的连接线有:IOW(写信号线)、IOR(读信号线)、4条地址线(XA)和16条数据线等。网络集成芯片工作在S3C44B0的Bank2上。
  2.1.2以太网协议层的再次分层实现
  


  以太网接口层是网络的实际连接层,底层要对网络集成芯片端口和寄存器读写访问,高层要实现对网络层数据包的收、发处理。调用关系复杂。采用再次"分层"的方法不仅明晰了各函数调用的关系,而且利于实现。如图2为各子层之间调用的关系图。在Ethernet.c文件中实现。对芯片的I/O口、内部寄存器、状态寄存器定义后。使用汇编函数NIC_read_port()和NIC_writer_port()分别实现读写I/O端口;NIC_read_reg()为读寄存器函数,NIC_writer_reg()为写寄存器函数;Frame_get()负责拆分以太帧。Frame_send()把上层的数据打包成以太帧。再上面一层就是提供给IP层访问的接口层了,IP层调用Ethernet_poll()轮询状态信息,当接收了以太帧后由frame_process() 处理。当IP层发送数据包时,调用ethernet_send()函数。
  系统加电时,调用相应初始化函数。先对芯片I/O引脚的方向和相应的内部寄存器初始化。再加载或初始化以下的状态参数:1)指定数据包大小和帧头长度。2)确定接收、发送数据缓冲区大小,3)网络参数的初始化,包括IP地址、子网掩码地址、物理地址,网关等。4)以太网帧头结构定义。5)网络字节序列与处理器字符序的转换宏定义。6)其它模块的常量和外部变量等。一旦初始化完成。系统调用Ethernet_poll()自动轮询函数。进入正常的运行状态。
  2.1.3ARP协议和IP协议的实现
  ARP(地址解析)协议实现网络中的IP地址与物理地址的对应。使用结构体描述这一映射表。struct arp_entry { char proaddr[4]; //IP地址
  char hwaddr[6];//物理地址
  char state;//状态
  unsigned short tout; //超时
  charretries; // 重试
  unsigned shortqueries; //被请求的次数 };
  模块实现的主要功能:(1)初始化ARP表。(2)处理进入的ARP报文。(3)解析IP地址。(4)维护ARP表。(5)实现显示ARP表。
  IP协议层主要功能是根据IP数据报头拆分或封装IP数据报。当下一层传来的数据包时,函数ip_process()对数据拆分,供上一层调用。待发送的数据,由ip_send()打包通过调用底层函数把数据包发送出去。标准的IP数据报头的结构体如下:
  struct ip_hdr {char verhl;// IP协议版本号和头长
  char tos; // 服务类型
  unsigned short len; // 总长度
  unsigned short id;// 标识号
  unsigned short fragment; // 标志和字段偏移量
  char ttl; // 生存时间
  char protocol;// 协议
  unsigned short chksum;// IP 头部检验和
  char srcipaddr[4];// 源IP地址
  char destipaddr[4];// 目标IP地址};
  开发和使用过程中,需要对网络进行调试和测试。本层还实现ICMP协议的功能。以实现简单的显示请求服务(ping命令)。
  2.2高层协议的实现
  2.2.1面向连接的套接字的实现
  TCP是一个基于套接字的面向连接的协议。系统中引用运输控制块(TCB)保持每个TCP连接和套接字的状态[5],TCB由一个表结构体组成,每个条目对应一个套接字字段:TCB表的结构和字段说明以下:
  struct tcb { charstate;//状态
  unsigned short local_port;//本地端口号
  char remote_ip[4];//远程IP地址
  unsigned short remote_port; //远程端口号
  unsigned short remote_mss; // 远程最大数据报长度
  char flags;//标志
  unsigned int snduna; //程的外部标识符
  unsigned intsndnxt;unsigned short sndwnd;
  unsigned int rcvnxt; unsigned short rcvwnd;
  unsigned short rTimer; unsigned short rTimeout;
  char retries;unsigned short cTimer;
  void(*event_handler)(int,char,char*,unsigned short,unsigned short,unsigned short);//套接字结构指计
  unsigned short more_data;//还有未发送数据
  unsigned short position; //发送位置
  int (*fill_buffer) (int,unsigned short *,unsigned short *); };
  定义了通信的Socket套接字,就可以实现套接字相关的函数实现。如初始化套接字、打开、建立、断开、接收、关闭TCP套接字、TCP端口侦听等。系统运行时,各状态之间变迁和事件的处理由TCP有限状态机实现。这与WINODWS下的网络通信相似。
  2.2.2文件系统的实现
  本系统中的WEB服务页面相对固定,体积不大。所以决定把文件系统放在内存中。首先需要在HTTP模块中定义一个表结构体来支持文件系统。结构体中的条目为文件的属性[3]:
  struct{char filename[13]; //13字节的文件名
  const char *contentpointer; //指向对应的content_Type的字符串指针
  unsigned short contentsize; //保存content_Type字符串的长度
  const char*filepointer;//指向文件内容的开始位置
  unsigned short filesize;//文件的长度
  }filesystem[NUMBER_OF_FILES]
  WEB服务器创建HTTP响应时,不同的文件类型加载不同的内容类型首部。因此还需在模块中定义下列文件类型:
  const char text[] = "Content-Type: text/plain\r\n";
  const char html[] = "Content-Type: text/html\r\n";
  const char app[] ="Content-Type: application/octet-stream\r\n";
  系统启动时,将调用文件系统的初始化函数,分别把txt文件、html文件、程序代码等文件和数据存储到指定的内存空间。一旦文件系统被加载,WEB服务器就可以启动了。
  2.2.3Web服务器处理HTTP请求的流程
  系统启动时首先运行初始化函数。在进行各种初始化工作后,开始调用监听函数监听网络中HTTP请求,当建立了TCP连接,接收了HTTP请求后,则会产生数据接收事件。服务器要完成以下处理:(1)处理HTTP请求:如果是GET命令请求,会直接调用函数获取请求的文档的索引值。如果是POST命令请求,则先回调处理上传的变量,处理完后再去获取请求文件的索引值。(2)处理POST命令:从POST命令中提取"变量=值"的数据。实现事务层的处理。(3)创建HTTP响应:创建页面文件给浏览器。
  


  图3为一个完整的HTTP请求过程:当TCP层的Tcp_process_segment()例程收到来自下层(IP层)的HTTP请求时,它通知http_control_process()发生TCP-EVENT_DATA事件①,然后调用http_process()例程处理该请求②。如果HTTP请求的命令是POST,则调用应用服务层的Process_POST()程序③来处理浏览器提交的变量A,http模块提供了parse_variable()完成该任务B。当完成了POST数据,就去调用getFileName()函数获取请求的文件名的索引号④。一旦http_process()返回一个值,便可从文件系统中提取被请求的文档,由Tcp_send_data()函数负责向浏览器发送HTTP响应⑤。Tcp_send_data()例程调用回调函数create_contend()填充发送缓冲区,创建HTTP响应⑥,向该响应中加载状态行、内容类型首部、空行和报文主体(被请求的网页)。当填满缓冲区时,调用tcp_send()⑦把http响应发送出去。
  2.2.4整个系统开机启动的流程
  系统是从“裸机”上开始实现的。必须从CPU的初始化开始实现。运行的流程为:CPU初始化‘关中断’中断初始化‘开中断’COM口初始化‘应用程序初始化’协议初始化‘WEB服务初始化’进入正常状态(协议进程和应用程序进程)。
  


  
  3 结束语
  
  经过精心的设计和调试,系统终于上线使用。实际应用表明,系统设计合理,效果令人满意。并有以下优点:(1)系统体积小。本系统编译好的二进制文件只有209KB。(2)灵活高效,实时性好。(3)系统移植性和扩展性好。如只要修改应用层模块功能,就可方便地实现其它的嵌入式系统;如果使用PPP拨号连网,则用PPP协议替代以太网协议模块就可以了。
  系统存在的不足之处有:对TCP/IP协议进行了精简而没有做到很好的优化;系统有些模块需要进一步改进和完善。
  以后的工作:一是进一步完善和优化系统,提高实时性和在复杂网络中的通信性能,二是把这一轻量级协议移植到其它嵌入式应用,开展更多的嵌入式应用。
  
  参考文献:
  [1]刘锬.四种嵌入式Internet实现方式[J].计算机世界报.2006,(8):23.
  [2]朱林生.嵌入式系统与Internet的互连技术[J].浙江师范大学学报(自然科学版)2003,(8).
  [3]沈阳东大新业信息技术股份有限公司.Webit 用户手册(V1.0).2005.
  [4]田裕康.轻量级TCP/IP协议栈OpenTCP的移植与应用[J].单片机与嵌入式系统应用.2008,(5).
  [5]阿根廷.Sergio Scaglia嵌入式Internet TCP/IP基础、实现及应用[M].北京航天航空大学出版社,2008.
  [6]史绪蓬,卢迪.一种通用嵌入式Ethernet接口设计与实现.理论与方法[J].2008,(2):13.
其他文献
太多的产品线、太复杂的组织架构、太冗长的运作流程……复杂,不但耗费公司成本,引起顾客不满,而且还模糊了公司的焦点,占用了原本可以投入到更重要事情上的资源。因此,如何把事情变“简单”,就成了一门重要的学问。如何防止“复杂”悄悄爬进你的企业?如何化繁为简,把较少的事情做得更好?如何追求简单,抓住顾客真正重视的重点?    曾经有个时代,是匮乏的时代,但今天,复杂、太多,却成为许多人的痛苦。作为消费者,
期刊
从现实来看,国内诸多企业对提升客户忠诚显得策略贫乏。与此相反,一些欧洲经典品牌TESIRO通灵、路易·威登、哈根达斯在提升消费者忠诚度方面却有着不菲的业绩,探究他们的营销智慧,核心正在于他们对体验式营销的成功运用。    培养忠诚的客户群体,是企业取得长期利润增长的必然要求。顾客忠诚度的高低直接决定企业的核心竞争力。在市场开拓中,新客户的开发诸如广告、促销等环节成本耗资庞大,相比而言,与客户保持联
期刊
几乎每家公司都一样,创新最大的挑战不是缺乏构想,而是能否妥善管理创新,让公司投资的金钱、时间与人力获得期望的回收。    几乎每家公司都一样,创新最大的挑战不是缺乏构想,而是能否妥善管理创新,让公司投资的金钱、时间与人力获得期望的回收。大多数创新都没能达成投资报酬,没有得到足够的收益。  所谓收益,就是在规划的时间内,得到期望的现金收入。企业投资在创新上,创造出的事物,迅速又直接地产生现金收入,这
期刊
中国过去二十年持续经济改革,令愈来愈多的富裕省份冒起,本地的购买力亦随之递增。普华永道零售及消费品行业研究《从圣保罗到上海——中国报告》,分析中国零售及消费品行业的企业投资机遇与挑战,预期中国零售及消费品行业的并购活动会持续以捕捉这些不断涌现的机遇。  普华永道中国零售及消费品行业主管杜源申表示:“对外资零售商而言,并购是进入市场的即时通行证。本土方面,强大的零售商为了扩大市场份额,也会收购它们有
期刊
随着配额时代的终结,国际间双边和多边的合作已经成为当今服装业的主流。想打造以知识为基础的国际性品牌,就必须具备国际化的经营理念、运作模式及符合国际标准。    随着配额时代的终结,国际间双边和多边的合作已经成为当今服装业的主流。想打造以知识为基础的国际性品牌,就必须具备国际化的经营理念、运作模式及符合国际标准。服装企业靠自己单打独斗势必很难有所作为,要推广自己的品牌,加快国际化路线,与国外的大品牌
期刊
由民建中央、科学技术部、广东省人民政府和深圳市人民政府共同主办,中国风险投资研究院、科学技术部火炬高技术产业开发中心、广东省科技厅、广东省风险投资促进会、深圳市科技和信息局、深圳市创业投资同业公会、香港理工大学、中国风险投资有限公司等单位联合承办的第九届中国风险投资论坛暨2007中国风险资本—项目对接会于2007年4月13日至15日在深圳五洲宾馆隆重举行。  中国风险投资论坛,由全国人大常委会副委
期刊
在首度受命担任管理职位时,就是领导能力面临的初次考验。这项考验相当重要:一旦顺利通过,对职场生涯的发展将有着决定性的影响。然而,大多数新手经理人对领导常存在一些误解,使得他们无法顺利通过考验。    不管你再怎么聪明过人、才智出众,在跻身成为领导人的过程中,都必须持续不断地学习和发展。其中面临的第一道关卡,就是“担任管理职的初体验”。这等于是转型的头一关试炼,不论对个人或组织而言,都是件大事。  
期刊
拼死拼活地工作、永无止境的竞争,这是现代人每天逼自己面对的生活,也被企业认为是最佳榜样。其实,天天盲目的工作,对自己、对企业都不会有幸福的结果。该如何才能活出黄金人生?什么是5/8的定律?    现年62岁的野村正树,从日本庆应义塾大学经济学部毕业之后,曾在日本三多利(Suntory)公司工作长达28年,活跃在业务部、宣传部和营销部。1995年,50岁时结束长达28年的白领上班族生涯,成为专业作家
期刊
十几年前,盖洛普的著名研究归纳出使员工展现优异绩效的12项要素。企业应该如何运用这些管理原则,才能激发员工对工作的热情?    不论公司有多么宏远的愿景与多么优异的策略,最终,员工的表现决定一切。你需要他们热情地投入工作,展现合作精神,以达成目标,甚至超越期望。经理人如何协助员工展现优异的绩效?如何激发员工的工作热情?   十多年前,盖洛普公司(Gallup Organization)组成了一个小
期刊
客人指酒店擅自退房应担责,酒店质疑是否有如此巨款    从云南来的罗先生打算经营鲜花生意,5月27日入住观澜某星级酒店,酒店在其没有退房的情况下擅自作退房处理并将房间开给其他客户,罗先生声称酒店的失误使其丢失了12万元的现金,酒店一方则对罗先生所谓的“12万现金”提出质疑。  罗先生说,5月27日凌晨,他入住观澜某星级酒店1729房间,该酒店收取了他600元押金,他在酒店住了一个晚上,5月28日上
期刊