嵌入式WEB服务器设计电子版本.doc
Good is good, but better carries it.精益求精,善益求善。嵌入式WEB服务器设计-嵌入式WEB服务器设计摘要为实现远程控制,将嵌入式设备和WEB服务器结合起来,组成嵌入式WEB服务器。本课题设计的嵌入式WEB服务器基于ARM实现,ARM芯片中安装有ARM-Linux操作系统,最后能够实现静态页面和动态交互页面的发布,向WEB服务器写入命令。本课题的设计方案由Apache服务器、SQLite数据库和PHP引擎构成,具体的设计安装过程本论文给出了详细阐述。在ARM-Linux平台上安装Apache+SQLite+PHP系统,成功实现了管理员与SQLite嵌入式数据库系统的动态交互。嵌入式WEB服务器的设计对实现精确远程控制有着深远意义。关键词:嵌入式系统;WEB服务器;SQLite数据库TheDesigningofEmbeddedWEBServerAbstractInordertoachieveremotecontrol,embeddeddevicesandWEBserversarecombinedtoformtheembeddedWEBserver.ThedesigningofembeddedWEBserverisbasedontheARMchiptorealize,theARM-Linuxoperatingsystemisinstalledinthechip.Finally,thesystemcouldsuccessfullyissuethestaticwebpagesandthedynamicinteractivepages,inputorderstotheWEBserver.ThedesignplanofthesubjectismadeupbytheApacheserver、theSQLitedatabaseandthePHPengine,thepaperhasdefinedthespecificprocessofdesignandinstallation.Apache+SQLite+PHPareinstalledintheARM-Linuxplatform,dynamicinteractionaresuccessfullyachieved.ThedesigningofembeddedWEBserverhasafar-reachingsignificancetoachieveremoteandprecisecontrol.KeyWords:EmbeddedSystems;WEBServer;SQLiteDatabase目录1绪论11.1嵌入式WEB服务器的发展背景.11.2嵌入式WEB服务器的应用前景.21.3论文完成的主要工作.32嵌入式WEB服务器设计方案.42.1设计方案及比较.42.2软件资源、硬件资源简介.62.2.1嵌入式操作系统简介.72.2.2ARM芯片简介.83嵌入式WEB服务器的设计.93.1嵌入式WEB服务器的构成.93.2嵌入式WEB服务器的工作方式.133.3通信协议.143.3.1HTTP协议.143.3.2TCP协议.143.3.3嵌入式TCP/IP协议栈.153.4浏览器/服务器通信过程.163.5瘦WEB服务器.173.6Apache+SQLite+PHP系统184简单嵌入式WEB服务器设计194.1软件分析.214.2硬件实现.234.3性能分析.265Apache+SQLite+PHP系统设计.265.1SQLite数据库275.2Apache服务器.295.3PHP325.4系统调试.346结论.35致谢.37参考文献.38附录.40外文资料翻译.54-1绪论计算机技术的发展使得嵌入式系统近年来发展迅速,广泛应用到生产生活的各个方面。随着远程遥控在航天、医疗、军事领域的成功实现,人们希望这一技术能够推广应用,为生产生活带来更多动力和便利。在一些应用场合如要求低功耗的场所,不需要安装一台完整的计算机进行控制,只需要安装有一个嵌入式WEB服务器即可满足需要,不但节约了成本,也减少了占用空间。近年来,国内外研究嵌入式Internet的学者越来越多,他们成立众多的组织和机构,来专门讨论和制定该领域的标准和开发相关的技术。如Sena公司开发了一个小型的实验室系统,可以在网上访问并控制实验室的智能设备,这些设备包括0-100%亮度的台灯,0-100%速度的电风扇以及开关式的壁灯。国内的公司如东大阿尔派公司开发了一套远程维护CT产品的诊断系统,通过Internet实现对各地CT机的远程诊断和维护。本课题为嵌入式WEB服务器的设计应用研究,基于ARM实现。在深入学习研究WEB服务器工作原理的基础上,采用功能强大、适用于嵌入式系统的服务器和数据库,进行设置后,实现了嵌入式WEB服务器的设计。该系统占用存储空间小、性能稳定、源代码开放,是理想的为小型设备配备的WEB服务器。目前,嵌入式WEB服务器已经用于远程楼宇电梯控制、信息家电管理、生产过程控制等领域。本课题设计的嵌入式WEB服务器对于嵌入式系统在远程控制领域的推广应用具有深远意义。1.1嵌入式WEB服务器的发展背景凡是带有微处理器的专用软硬件系统都可以称为嵌入式系统,嵌入式系统可以通过各种无线形式(如WAP、BlueTooth等)和有线形式(TCP/IP)的网络连接方式实现它们之间的相互连接,因此,在网络通信市场上极具生命力。嵌入式设备,是指具有计算机功能,但又不称为计算机的设备或器材,几乎包括了我们周围的所有电路设备:PDA、手机、数字电视机顶盒、汽车、微波炉、电梯、自动售货机、医疗仪器、自动取款机等。现在人们对Internet应用的依赖程度日渐增加,也促进了嵌入式技术的增长。信息家电的发展也为嵌入式Internet技术提供空间,如面向Internet的信息冰箱。这种信息家电的特点就是价格合理、功能强大、全面支持Internet访问、软件可通过网络升级。嵌入式Internet技术主要包括传感器技术、通信技术、计算机技术和集成电路技术等。以前的设备控制系统一般是通过专用通信线进行的,其通信介质、通信协议、相关软件和硬件都是专用的,如Can总线技术、Modbus协议,而Internet技术的发展使嵌入式设备的远程控制和管理方式有了改变。不需要专用的通信线路,并且传输的信息不局限于数据信号,还有声音和图像。最重要的是其通信协议是标准且公开的。WEB技术的发展,改变了现在的信息表达形式,很多应用都是基于WEB技术的。由于HTML语言的标准统一性,只要在嵌入式设备中有一个微型服务器,就可以使用任意一种WEB浏览器接收和发送信息。所以如何设计这种特别的WEB服务器,如何在嵌入式设备中安装WEB服务器,就成了嵌入式WEB服务器的发展和研究方向。1.2嵌入式WEB服务器的应用前景互联网覆盖率极广、联网设备众多、协议完善、功能强大,已经成为社会重要的基础信息设施,是重要的信息流通渠道。具备互联网的接入功能,已经成为众多使用微处理器的嵌入式设备应用的发展方向。通过Internet可以获得世界各个状态的实时变化,并且通过Internet远程控制、调节,使之达到要求。比如将世界各地的气象站、水文站联入Internet,不仅可以实现无人监控,而且可以随时了解当时各地的状况;通过Internet对住宅进行远程监测与控制(如室内温度监测,空调遥控等);跨国公司对国外的工厂、生产线的监控;大型设备的远程管理与维护等。这样我们所面对的Internet将不仅仅是服务器硬盘中的文件和数据,而是一个充满生机的现实世界。利用TCP/IP网络通信协议,任何计算机都可以使用通用的网络浏览软件访问配备嵌入式WEB服务器的设备,而不需要专门的计算机和软件;设备的信息通过网页发布,可以使用数据、图表、动画等各种丰富的表现方式。WEB通信是从客户机端开始的,客户机通过WEB浏览器向服务器发送一个查询请求,当服务器接收到请求时,由服务器负责对来自客户机的请求做出回答,即找到要查询的信息,然后又由服务器将查询结果以HTML标记的文本形式传递给客户机。具有网络接入功能的嵌入式设备可以应用在诸多场合,例如:*信息家电:冰箱、空调、电视机、洗衣机等的网络化;*智能家庭管理系统:温度湿度控制系统,防火防盗系统;*工业自动化:生产过程控制、电网设备监测、石油化工系统;对于嵌入式WEB服务器的研究和应用,其意义是重大的。它为管理、控制和监测各种各样设备提供了一个很好的途径。这种设备可以是具有有限内存资源的8位或32位系统,而且这种方式是基于Internet的。这种设备可以在世界任何一个地方,只要将其连入Internet就能够对其进行管理控制。1.3论文主要完成的工作本论文介绍了一种基于ARM9的嵌入式WEB服务器的设计方案,硬件平台采用UP-ARM2410-S实验箱,主要工作在于软件方案的实现。本文在深入学习目前的嵌入式WEB服务器设计方法的基础上,结合ARM功能强大的特点,提出了一种完善的设计思路,并完成了系统的设计和最后的测试。论文结构如下:第一章介绍了课题的发展背景、应用前景;第二章介绍了嵌入式WEB服务器的设计方案及软硬件资源;第三章介绍了嵌入式WEB服务器的构成、工作方式及其通信过程;第四章介绍了简单嵌入式WEB服务器的设计;第五章介绍了Apache+SQLite+PHP系统设计,将其在UP-ARM2410-S实验平台上进行了验证;第六章对论文工作进行了总结,简述了本系统已取得的研究成果。2嵌入式WEB服务器设计方案实现嵌入式WEB服务器设计,总体方案有两种:根据需要编程构建服务器和使用应用成熟的专门嵌入式WEB服务器如Apache、Boa服务器等,但不同软硬件资源需要不同的配置,才能正常的按照要求工作。整个设计方案在基于RedHat9.0、Arm-Linux的软件环境和UP-ARM2410-S硬件环境中完成。由于嵌入式系统资源有限,所以在PC机上通过交叉编译生成在ARM上可执行的代码,通过串口线将生成的可执行文件下载到ARM芯片中,利用移植在芯片中嵌入式操作系统ARM-Linux启动WEB服务器。这样,一个嵌入式WEB服务器就设计完成了。从实用性的角度考虑,一个完整的嵌入式WEB服务器能够提供动态网页,即能够提供实时的数据,实现人机双向通信。这就要求服务器有一个数据库存储实时数据。所以在方案二中提出WEB服务器由Apache实现,数据库由sqlite实现,数据库和服务器的通信由PHP实现。2.1设计方案及比较嵌入式WEB服务器的设计方案要根据其要完成的任务而定。如果任务较简单,只显示静态网页,则只需要服务器即可;如果涉及到动态交互页面,如向设备发送命令,读取设备当前的工作状况信息,则必须要用数据库来完成存储数据、命令的功能。下面列出各种设计方案:方案一:只含有一个简单的WEB服务器,能够显示静态页面。其中服务器的程序根据需要自行编写,比较灵活,关键理解TCP/IP协议、HTTP协议和网络通信的进程。结构图如图2.1所示。方案二:Apache+SQLite+PHP数据库采用嵌入式数据库SQLite,服务器采用Apache,脚本引擎采用PHP.首先在PC机上编译配置后,安装到ARM2410开发板上。PHP作为连接服务器和数据库的桥梁,当收到查询时连接数据库并发送查询命令将查询结果变换成为HTML格式,发送给服务器。结构图如图2.2。方案三:移植BOA服务器在ARM上移植支持脚本或CGI功能的BOA服务器。BOA是一个非常小巧的WEB服务器,可执行代码只有60KB.它是一个单任务WEB服务器,只能依次完成用户的请求,而不会生成新的进程来处理并发连接请求。支持CGI,能够为CGI程序生成一个进程来执行。其设计目标是速度和安全。经过比较以上三种方案,最终确定方案一和方案二。原因有下列几点:方案一较易实现,而且可以深入学习网络编程方面知识,理解网络通信过程;在比较方案二和方案三的过程中,着重考虑了系统的功能、稳定性、体积和可实现性等方面,Apache服务器是Linux下最常用的服务器,性能优秀,应用趋于成熟,所以最终选择方案二。2.2软件资源、硬件资源简介本课题研究的嵌入式WEB服务器应用的软硬件资源有:在PC机上运行的RedHat9.0操作系统、在ARM芯片上运行的ARM-Linux嵌入式操作系统、UP-ARM2410-S实验箱。本课题是基于嵌入式系统设计的,嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统的架构如图2.3所示。2.2.1操作系统简介本课题应用的是Linux操作系统,PC机上运行的是RedHat9.0Linux操作系统,ARM上运行的是嵌入式操作系统ARM-Linux。选择Linux操作系统基于以下方面:1)Linux操作系统可裁剪,根据需要裁剪内核适用于各种硬件环境;2)Linux源代码开放,可直接从网上下载资源安装而无需购买,节约成本;3)Linux操作系统性能稳定,适合在环境恶劣的场所应用;4)课题中用的ARM2410芯片支持Linux操作系统。Linux是能够自由传播并继承了Unix内核的操作系统,是对Unix的简化和改进,它既保留了Unix系统的高安全性,同时也使其操作更加简单方便,从而使单机用户也可以使用。Unix内核指的是操作系统底层的核心程序代码。Linux是由芬兰的赫尔辛基大学学生LinusTorvalds把Minix系统向X86移植的结果。与其它操作系统相比,Linux还具有以下特色:采用阶层式目录结构,文件归类清楚、容易管理;支持多种文件系统,如Ext2,Ext3以及Windows的文件系统FAT16,FAT32,NTFS等;具有可移植性,系统核心只有小于10%的源代码采用汇编语言编写,其余均是采用C语言编写,因此具备高度移植性;可与其他操作系统如Windows98/2000/XP等并存与同一台计算机上。本课题在PC机上采用RedHatLinux9.0操作系统。由于ARM920T有MMU,故可以直接移植标准的ARM-Linux内核。虽然大多数Linux系统运行在PC平台上,但Linux也是嵌入式系统的可靠主力。Linux的安装和管理比Unix更加简单灵活。Linux中有许多命令和编程接口同传统的Unix一样。但是对于习惯于Windows操作系统的人来说,需要记忆大量的命令行参数却是一个缺点。随着Linux社团的不断努力,Linux的人机界面开发环境正在不断完善。典型的Linux系统经过打包,在拥有硬盘和大容量内存的PC机上运行,嵌入式系统不需要这么高的配置。一个功能完备的Linux内核要求大约1MB内存。而Linux微内核只占用其中很小一部分内存,包括虚拟内存和所有核心的操作系统功能在内,只需占用系统约100K内存。只要有500K的内存,一个有网络栈和基本实用程序的完全的Linux系统就可以在一台8位总线(SX)的Intel386微处理器上运行的很好了。内存要求是根据需要的应用决定的,Linux系统甚至可以仅使用256KBROM和512KBRAM进行工作。本课题中用到的Linux内核版本是2.4.18,交叉编译器gcc版本是2.95.2。2.2.2S3C2410X芯片简介S3C2410X是一款由Samsung公司为手持设备设计的低功耗、高集成度的基于ARM920T核的微处理器。为了降低系统总成本和减少外围器件,这款芯片中还集成了以下部件:16kb指令Cache、16kb数据Cache,MMU,外部存储器控制器,LCD控制器,NANDFlash控制器,4个DMA通道,3个URT通道,1个IIC总线控制器,1个IIS总线控制器,以及4个PWM和1个内部定时器,通用I/O口,实时时钟,8通道10位ADC和触摸屏接口,SD/MMC卡接口等。现在它广泛应用于PDA,移动通信,路由器,工业控制等领域。16/32位RISC结构和ARM精简指令集,支持ARM调试结构,片上ICE支持JTAG调试方式,内置先进微控制器总线接口AMBA。本课题用的硬件平台是基于ARM体系结构,由北京博创科技有限公司开发的UP-NetARM2410-S实验箱。UP-NetARM2410-S的CPU为采用ARM920T内核的三星S3c2410芯片,由于有MMU可以运行标准的ARM-LINUX内核。3嵌入式WEB服务器的设计原理嵌入式WEB服务器工作是基于网络通信协议传输信息的,本课题中用到的主要是TCP/IP协议、HTTP协议。通信协议规定了信息传输的各种规则,保证数据在传输过程中的完整性、正确性,当数据传输出现故障时要求服务器再次发送该数据。由于嵌入式系统资源有限,特别是存储资源,所以在嵌入式WEB服务器中只能应用缩减版的只包含必须功能的嵌入式TCP/IP协议,相应的服务器成为瘦WEB服务器,成为适合在资源有限的设备或环境中应用的嵌入WEB服务器。在通信时,服务器首先启动侦听进程,当有来自浏览器的请求时,服务器解析请求并将请求数据发送给浏览器。为实现动态交互网页,完整的服务器还应包含嵌入式数据库,用来存储各种实时数据。3.1嵌入式WEB服务器的构成嵌入式WEB服务器的软件系统主要解决远程用户通过Internet访问现场设备的问题,为此必须在设备中嵌入TCP/IP协议栈和WEBServer,以解决非Internet设备的网络互联和管理问题。嵌入式WEB服务器是以瘦TCP/IP协议栈和嵌入式实时操作系统(ERTOS)为基础构建而成的,使设备具有简单的网络管理功能,因此通过网络就可以对接入到Internet上的设备进行管理和控制。嵌入式WEB服务器的体系结构如图3.1所示嵌入式WEB服务器硬件系统是包含了WEB通信功能的微型处理器,它可以和前端的应用系统直接集成在一起,也可以通过现场总线与应用系统相连。其硬件结构图如图3.2所示。一个完整的嵌入式WEB服务器硬件系统必须具备FLASHROM存储器,用来存储实时操作系统的系统内核、TCP/IP协议栈、各种WEB文档;DRAM存储器供系统运行时使用;以太网接口实现与Internet连接;前端应用系统的硬件完成传统意义上的应用功能;而微型处理器负责全面的管理控制。嵌入式WEB服务器的核心是HTTP引擎和CGI接口。HTTP(超文本传输协议)是WEB服务器用来与浏览器通信的协议,HTTP规定了发送和处理请求的标准方式,规定了浏览器和服务器之间传输的消息格式及各种控制信息,从而定义了所有WEB通信的基本框架。如图3.3所示。在嵌入式WEB服务器中,为了得到一个稳定的用户界面而又不影响嵌入式系统的CPU和内存资源,应该使用HTTP1.0标准。图3.3HTTP示意图CGI(通用网关接口)定义了WEB服务器与CGI脚本之间的接口标准。其主要功能是在WEB环境下,从客户端传送一些信息给WEB服务器,WEB服务器把接收到的有关信息放入环境变量,然后再去启动所指定的CGI脚本以完成特定的工作,CGI脚本从环境变量中获取相关信息来运行,最后以HTML格式输出相应的执行结果返回给浏览器端。由于用户能传递不同的参数给CGI脚本,所以CGI技术使得浏览器和服务器之间具有交互性。一个完整的嵌入式WEB服务器系统由浏览器和服务器两部分构成,二者通过网络连接,详细的内部构成如图3.4所示。3.2嵌入式WEB服务器的工作方式WEB服务器的工作方式都是以套接字(Socket)机制为基础的。在服务器端,首先创建一个套接字,并将该套接字与服务器的公认地址绑定在一起;接着将套接字转换成侦听套接字用来侦听用户请求,然后接受客户机的连接。建立连接后,服务器和客户机之间就可以进行通信了。本论文的嵌入式WEB服务器主要由初始化模块、侦听模块、请求解析模块、脚本引擎模块、输出模块和命令执行模块,各模块关系如图3.5所示:图3.5WEB服务器模块图初始化模块用于定义变量、设置信号量、创建套接字、将套接字与本地地址和端口绑定,并设置套接字处理侦听状态。侦听模块在接收到一个连接请求后,读取用户的请求,进行处理,再交给解析模块进行解析。请求解析模块是服务器的核心所在,根据用户的请求,进行相应的处理。当请求为静态文本时,文档直接提交输出模块输出;请求为动态文本时,请求解析模块自动调用脚本引擎模块,将脚本替换为现场数据,再提交输出模块输出;当请求为带参数的执行命令时,请求解析器调用命令执行模块分析命令并控制监控前端。3.3通信协议WEB在工作过程中,使用TCP/IP、HTTP协议和HTML语言,它们只在自己的层次上工作。TCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制协议/网际协议)是最早出现的传输协议。连接到Internet上的所有计算机都使用这个通信标准,它的功能是负责Internet上的任意两个计算机之间准确传送数据。3.3.1HTTP协议HTTP(HypertextTransferProtocol,超文本传输协议)是WEB服务器能够理解的一种语言,因此有时也称WEB服务器为HTTP服务器。超文本(Hypertext)就是在引用处到被引用的对象之间用一个有向链(Link)表示。超链(Hyperlink)文档加上超链就构成超文本。WEB客户机要想与服务器进行对话,它就用TCP/IP向服务器发送HTTP信息。这些信息的主要作用是请求驻留在服务器上的特定文档。HTML是专门用来描述WEB页面的,对于用HTML描述的信息,WEB浏览器可以以一种客户比较容易理解的方式表达出来,并显示在客户机的显示器上。3.3.2TCP协议TransmissionControlProtocol(传输控制协议)该协议主要用于在主机间建立一个虚拟连接,以实现高可靠性的数据包交换。IP协议可以进行IP数据包的分割和组装,但是通过IP协议并不能清楚地了解到数据包是否顺利地发送给目标计算机。而使用TCP协议就不同了,在该协议传输模式中在将数据包成功发送给目标计算机后,TCP会要求发送一个确认;如果在某个时限内没有收到确认,那么TCP将重新发送数据包。另外,在传输的过程中,如果接收到无序、丢失以及被破坏的数据包,TCP还可以负责恢复。它是一种面向连接的、可靠的、基于字节流的运输层通信协议。服务器程序开始运行时,主进程(守护进程)就创建一个套接口,并和主机地址绑定到一起,随后置为被动监听状态,等待客户端连接请求的到来。一旦接收了一个连接,Accept会返回一个新的套接口描述符,主进程则开辟一个新的子进程来处理这个新的连接,这样系统可以同时接受来自多个客户端的请求。程序具体如下:intsocket(family,type,protocol)该函数用来创建一个套接口,并返回一个短整数的套接口描述符;intbind(socket,localaddr,addrlen)该函数为一个套接口指明一个本地IP地址和协议端口号,一般用来为服务器指定指明端口,其中socket为上边socket()函数所创建的套接口描述符;intlisten(socket,queuelen)服务器使用该函数使上面所创建的套接口处于被动监听状态(即准备接受客户端的请求);intaccept(socket,addr,addrlen)该函数接受连接请求,为该请求创建一个新套接口,并返回新的套接口描述符,交给子进程具体处理,原套接口继续用来监听后续请求,子进程用来处理每个具体请求。3.3.3嵌入式TCP/IP协议栈标准的TCP/IP协议栈,包括TCP、IP、ICMP、RARP等,对嵌入式Internet系统的大量使用有着很重要的意义。但是,这些协议的实现在嵌入式系统中有着特别的要求,如图形和数据的显示、实时分布式对象计算等。所以研究嵌入式TCP/IP协议栈以满足嵌入式系统的性能要求是很重要的,应尽量减小TCP/IP协议栈而又不失一般的标准性。现在国外对此已经有很多的相关研究,如国外的C/IP项目的研究,它是一个为微控制器和嵌入式系统而设计的小型TCP/IP协议栈;又例如CMX公司的MicroNetTCP/IP,它是为8位或16位微处理器而设计的,支持大部分的标准协议,连接方式有以太网连接、拔号连接和直接连接方式。嵌入式WEB服务器技术的核心是HTTP引擎。HTTP协议是WEB应用的标准协议,已经从HTTP1.0发展到HTTP1.1,性能有很大改变,增加了缓存功能,同时也是TCP连接形式的改变。HTTP1.0在每次HTTP请求中都需要TCP连接。一个典型的页面可能含有许多单独的HTTP请求,如基本页面请求、每个HTML框架请求、每个图形请求等。建立每个请求和产生每个TCP连接需要占用大量的CPU和内存资源;而HTTP1.1标准可以为多个HTTP事务在浏览器和服务器之间只保持一个TCP连接,这样就大大提高网络和系统的性能。但嵌入式WEB服务器功能单一,访问用户不会很多,仅限于管理员,从占用内存资源角度考虑,选择使用HTTP1.0标准。3.4浏览器/服务器通信的过程浏览器根据用户显式提供的URL,或单击锚点隐式提供的URL,向WEB服务器提出连接请求。服务器方有一个常驻的守候进程(Daemon),该进程开机后就由操作系统创建,并一直处于就绪状态,专门监听来自各个端口的外来请求。一旦监听到来自80号端口的请求,守候进程就要求操作系统创建或从缓冲池中分配一个WEB服务器进程(或线程),并把浏览器发来的连接请求转交给这个进程,守候进程就结束了一次它的监听任务,并转入继续监听状态,剩下的任务就由WEB服务器进程来完成。WEB服务器进程首先与浏览器建立连接。浏览器就向WEB服务器进程发出传送某文档的请求,WEB服务器进程取出所需文档,向WEB服务器发出确认信息,WEB服务器将文档以HTML的格式发送给浏览器。在收到浏览器的确认后,WEB服务器进程就释放与浏览器的连接,该进程也随即结束,或被返回缓冲池,从而完成一个请求处理。实现上述传送过程的协议称超文本传送协议(HypertextTransferProtecol,HTTP)图3.63.5瘦WEB服务器瘦WEB服务器是随着WEB应用环境的改变而提出的。在嵌入式设备中,一个WEB服务器不可能很全面,它必须拥有足够小的体积,并且不影响嵌入式系统的整体性能,但又必须具备一个WEB服务器应有的特征。它可以包含一个实时操作系统(RTOS)。WEB服务器可以被用作一个单一线程,而不需要RTOS的支持,或者是当使用RTOS时作为多线程应用的一个线程,不需要动态存储分配。嵌入式WEB服务器通过CGI接口或其它方法,可以在HTML文件或表格中插入运行代码,供RAM读取/写入数据。HTML页面内容一般是通过存储在ROM中的压缩文件,由快速运行的代码动态产生。可以利用Java、JavaScripts等技术在客户端生成应用代码,而在服务器端只是发布网页,以减少在服务器端的代码和容量,提高服务器端的性能。这些就是瘦WEB服务器的要求。嵌入式WEB服务器是瘦WEB服务器一个很好的体现。3.6Apache+SQLite+PHP系统嵌入式WEB服务器Apache与数据库SQLite的连接由PHP引擎实现。其具体功用为:从WEB服务器接受查询指令和查询参数,并执行对数据库的查询操作,然后,将查询结果生成一新的WEB页发送给浏览器。WEB服务器Apache用HTML语言中的文档或表格方式向引擎传递从WEB页接收到的查询参数(如人名、地名、主题词、分类号等)。根据查询参数执行对数据库的查询。当查询完成后,将结果加上HTML的格式命令输出到服务器上,WEB服务器将该HTML文件发送给浏览器。SQLite数据库对数据进行安全存储和快速检索。WEB服务器Apache在前台运行,当客户机提出一个查询请求的时候,WEB服务器运行一个应用程序对数据库进行操作,并把结果传送给客户机,客户机的浏览器得到数据后将最终结果显示给用户。客户端通过IE等浏览器在表格中输入查询条件或其他要求并提交给WEB服务器;服务器将查询条件等客户信息置与标准输入或环境变量中,并运行相应的PHP程序。PHP程序依据标准输入或环境变量向数据库服务器提出查询要求,执行相应的SQL语句。数据库服务器返回查询结果给WEB服务器,并通过HTML页面返回至客户端浏览器。从WEB服务器查询嵌入式数据库遵循以下基本步骤:1.检查并过滤来自用户的数据2.建立一个到数据库的连接3.查询数据库4.获取查询结果5.将结果显示给用户4简单嵌入式WEB服务器设计简单嵌入式WEB服务器完成功能简单,但是包含了WEB服务器必须有的所有部分。本课题中设计的嵌入式WEB服务器采用客户端/服务器模式。嵌入式客户端/服务器模式在操作过程中采取的是主动请求方式,服务器必须首先启动,直到它执行完accept()调用,进入等待状态后,方能接收客户请求。假如客户在此前启动,则connect()将返回出错代码,连接不成功。首先服务器方先启动,根据请求提供相应服务:1.打开一通信通道并告知本地主机,它愿意在某一公认地址上接收客户请求;2.等待客户请求到达该端口;3.接收到服务请求,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。4. 返回第二步,等待另一客户请求。5. 关闭服务器在服务器主机上,应用进程执行一个被动的打开,即服务器表明它已准备好接受连接,但并没有真正建立连接。服务器通过调用以下三个操作来完成打开:intbind(intsocket,structsockaddr*address,intaddr_len)intlisten(intsocket,intbacklog)intaccept(intsocket,structsockaddr*address,int*addr_len)如前所述,TCP/IP协议的应用一般采用客户端/服务器模式,因此在实际应用中,必须有客户端和服务器两个进程,并且首先启动服务器,其系统调用时序图如图4.1:开发一个Server-Client模型的程序开发原理大致如下:服务器使用ServerSocket监听指定的端口,端口可以随意指定。等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。在客户端使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。 Socket接口是TCP/IP网络的API,可将其看作是本地应用进程与网络的接入点。接口定义了各种操作,包括创建套接字、将套接字连到网上、通过套接字发送/接收消息,关闭套接字。Socket接口还定义了许多函数或例程,可以用它们来开发TCP/IP网络上的应用程序。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。服务器的实现实际上很简单。首先,它填入自己的端口号(SERVER_PORT)构造地址数据结构。其次,它并不指明IP地址,从而使应用程序可以接受来自本地任一IP地址的连接。然后,服务器执行与被动打开有关的初始步骤:创建一个套接字,将它绑定到本地地址;然后设置允许同时连接的最大数;最后,主循环等待远端主机与它连接,当远端有一台主机试图与它连接时,它就接收并输出连接上送来的字符。4.1软件分析服务器程序部分要完成的功能包括:建立浏览器和服务器之间的连接;获取浏览器的请求;解析请求;发送请求数据给浏览器。示意图如图4.2所示:图4.2主程序是系统的总入口,也是系统的主要控制函数。它的功能是建立环境设置,设置信号处理方式,建立TCP类型。SOCKET在80端口进行监听连接请求。接收到连接请求后,将请求传递给连接处理模块,并继续监听。流程图如图4.3所示:图4.3web服务器流程图流程图确定后编写服务器程序httpd.c(程序及注释见附录)、编译文件makefile及Google搜索页面的HTML表单。4.2硬件实现程序编写完成后即可在UP-ARM2410-S实验箱验证所编写的服务器程序。首先将实验箱通过串口线和网线挂载到PC机上,启动minicom进入ARM上的主目录。在PC上进入服务器程序httpd.c文件所在的目录,进行编译,生成在ARM上可执行的二进制文件。在共享目录下将httpd通过nfs方式下载到开发板上,用Google搜索的网页进行测试。具体步骤如下:1.编译应用程序,运行make产生可执行文件httpdrootlocalhost#cd/arm2410s/exp/basic/09_httpd/rootlocalhost09_httpd#makearmv4l-unknown-linux-gcc-DHTTPD_DOCUMENT_ROOT="/mnt/yaffs"-c-ohttpd.ohttpd.carmv4l-unknown-linux-gcc-DHTTPD