基于ARM的嵌入式Web服务器设计与实现.docx
- 文档编号:10949696
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:17
- 大小:258.64KB
基于ARM的嵌入式Web服务器设计与实现.docx
《基于ARM的嵌入式Web服务器设计与实现.docx》由会员分享,可在线阅读,更多相关《基于ARM的嵌入式Web服务器设计与实现.docx(17页珍藏版)》请在冰豆网上搜索。
基于ARM的嵌入式Web服务器设计与实现
河南工业大学嵌入式系统课程设计
题目:
基于ARM的嵌入式Web服务器设计与实现
专业课程设计任务书
学生姓名
专业班级
学院名称
学号
题目
基于ARM的嵌入式Web服务器设计与实现
课题性质
工程设计
课题来源
自拟
指导教师
同组姓名
主要内容
设计一个嵌入式系统,Web服务器设计与实现。
要求:
1.了解Web服务器的原理
2.Web服务器的设计与实现
任务要求
设计系统的总体方案,并进行论证。
说明Web服务器的原理和ARM微处理器控制板工作原理及组成,画出电路的总体方框图和电路原理图。
说明系统工作原理,对系统进行调试。
写出课程设计报告。
参考文献
嵌入式系统技术有关教材
电路设计手册
其他资料
审查意见
指导教师签字:
2018年1月6日
说明:
本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页
摘要
随着计算机、网络通信和Internet技术的飞速发展和不断进步,嵌入式系统在家庭和工业应用越来越广泛。
如何将嵌入式系统和工业控制系统接入Internet,综合利用嵌入式系统资源,实现嵌入式系统的远程管理和控制,已成为倍受关注的研究课题,而实现嵌入式系统的网络化则成为嵌入式系统的发展趋势。
网络通信时,应用程序使用C/S(客户/服务器)模式进行信息交互。
传统的服务器程序一般运行在大型的拥有高级操作系统的服务器的计算机上,这样服务器软件需要强大的硬件和系统软件支持。
嵌入式网络服务器是利用嵌入式系统实现服务器的软件和硬件功能,是嵌入式技术和网络技术相结合的产物。
与传统服务器相比,嵌入式Web服务器具有结构简单、体积小、可靠性强以及方便灵活等特点。
这些让它具有很大的发展潜力。
另一方面,嵌入式Web服务器与传统的web服务器相比,也受到一些限制。
传统的Web服务器主要用于处理较大的客户量的同时并发访问,硬件方面有强大的处理器和内存支持,软件方面有商业数据库支持,而嵌入式Web服务器的处理能力和存储容量都有限,这就要求嵌入式Web服务器在设计过程中需要尽量合理利用资源。
将嵌入式技术与Web技术相结合,已成为目前嵌入式系统的一个重要发展方向和必然趋势。
利用源代码开放的uClinux为操作系统平台,实现了以ARM微处理器为核心的嵌入式Web服务器,在分析了嵌入式Web服务器的体系结构后,给出了系统的硬件结构组成和软件设计。
对Web服务器的测试结果表明,该服务器运行稳定、控制方便,将在智能家居、远程数据采集、工业控制等领域有着广泛的应用前景。
关键词:
网络通信;嵌入式系统;ARM处理器;uClinux;Boa服务器;
1嵌入式Web服务器的软件构成
嵌入式Web服务器主要解决的问题是通过Internet来进行远程访问和控制现场的设备,所以必须在嵌入式设备中配置TCP/IP协议和Web服务器,以解决网络互联问题。
但是嵌入式服务器系统只需要使用其中的某些基本的功能,也要减去一些使用不到有功能,以节省有限的嵌入式资源。
TCP/IP此外还要用到的软件资源有嵌入式实时操作系统、HTTP协议,同时带有SMTP和SNMP协议,使其具有网络管理的简单功能,通过网络可以对接入到Internet上的设备进行管理和控制。
1.1CGI技术
1.1.1CGI概述
由于传统的Web服务器无法实现Web数据库访问功能,CGI技术充当了访问数据库的重要媒介。
CGI是使用应用相关软件增强Web服务器的一种标准方法,可以用任何语言书写。
CGI根据需求更新网页,是一种公共网关接口。
它通过客户提供给Web服务器的各种信息,由Web服务器启动指定CGI模块函数,完成客户端与服务器端动态的交互,从而实现静态HTML网页无法实现的功能(如表单查询、数据库查询等)。
通常CGI应用程序处于休眠状态,通过使用一定的网络事件触发回调函数来实现,并显示动态页面。
例如,Web服务器收到一个URL里面包含的网页请求时,将执行结果返回给HTML网页,CGI可实现处理表格、数据库查询和电子邮件等操作。
1.1.2CGI工作原理
系统嵌入式Web服务器通过CGI程序来获取用户的请求、查询条件,使用HTML方式描述结果并直接回送到客户端的浏览器上,此过程中浏览器将用户输入的数据发送到Web服务器,Web服务器将数据使用STDIN(标准输入)送到CGI程序。
在执行CGI程序后,会访问数据库的记录,最后使用STDOUT输出HTML形式的结果文件,经Web服务器送回浏览器显示给用户。
使用CGI实现客户与服务器的交互分一下九个标准步骤:
Web客户(浏览器)通过URL与Web服务器相连;
服务发送HTML(和别的组成请求页面的文件)给用户,一旦页面内容传完,这个连接自动断开;
在客户方,HTML脚本提示用户做动作或输入,当用户响应后客户请求Web服务器建立一个新的连接;
一旦建立连接,客户把用户输入的数据传送给Web服务器;
Web服务器把这些信息和别的进程变量传给由HTML以URL形式提交的CGI程序;
CGI程序根据输入作出相应的操作,产生对客户的响应(一般以一个HTML文档的形式),并将其传送给Web服务器;
Web服务器把应答数据传送给客户,并关闭连接;
图1.1CGI工作原理
其中CGI与表单之间的信息交互方法有两种模式:
“GET”和“POST”。
选择哪一种模式取决于表单(FORM)的“METHOD”字段的设置,如果METHOD设定为GET,CGI程序从环境变量QUER_STRING中获取数据。
为了解释数据和执行需要的动作,CGI程序必须要分析(处理)此字符串;如果METHOD设定为POST,数据会以STDIN,必须使用CONTENT_LENGTH值。
在本设计中CGI程序采用的是POST方法。
如果想从服务器获得数据并且不改变服务器上的数据时,应该选用GET方法;也有例外,当传输的数据很长时,选用POST方法较好;使用GET方式编写CGI程序会更加简单,但是POST方式则更加先进;当发送的数据将改变Web服务器端的数据时,或者想给CGI程序传输大量数据(一般地,超过1024字节,这是URL的极限长度)时,应该选用POST方法。
2嵌入式Web服务器简述
嵌入式Web服务器(EmbeddedWebServer)是指将Web服务器嵌入到控制设备和现场测试中,借助于相关的软硬件平台系统,将传统嵌入式设备转变成了以TCP/IP为底层通信协议和Web技术为核心的网络测试及远程控制设备。
嵌入式Web服务器基于HTTP协议运作,具有标准的接口形式和通信协议,所以它可以向接入其所在网络的用户提供统一的基于浏览器的控制界面和相关操作。
这种技术因具有平台独立特性和开放性,在某种程度上降低了开发难度,使通信系统和软件系统的设计维护工作更容易,提升了控制设备和现场测试的管理水平。
如图1所示是典型的嵌入式Web服务器的系统模型:
图1典型的嵌入式Web服务器系统模型
Internet可以提供多种网络服务,比如通过SMTP(简单邮件传输协议)收发邮件,通过FTP(文件传输协议)传输文件。
Internet能得到如此大规模的流行,WWW(WorldWideWeb)技术居功至伟。
可以说如果没有WWW和HTTP技术就不会有这么多人使用Internet,正是WWW技术把Internet的结构、服务和应用引上了一个新台阶。
2.1嵌入式Web服务器的主要应用
目前嵌入式Web服务器主要用于设备管理和企业应用程序网络扩展,它作为后台程序在运行嵌入式设备上,用户可以通过网络对设备进行配置、监测和控制,以保证设备正常而高效地运作。
Web接口可以让用户借助于Web浏览器和网络来访问嵌入式设备。
以这种方式对设备进行管理不仅可以监测和控制,而且可以根据设备的特点设计地更加人性化和智能化。
Web服务已成为支撑现代应用程序的技术和系统的核心组件,目前大部分企业用户都希望为他们的程序添加上基于Web的用户接口。
2.2嵌入式Web服务器的优点
嵌入Web服务器的优点主要体现在以下几个方面:
1)它可以与Internet连接,不再使用专用的线路,这样就具有了最大的普及范围;2)传输内容不局限于数据信息,还有图像和声音等多媒体信息;3)通信协议(HTTP)独立于系统平台,而且是标准而且公开的;4)Web页面使用的HTML语言是统一的网页语言,这使标准化界面与客户端的软硬件平台相互独立,节省了客户端的开发工
作;5)Web架构能够减少了在设计系统时的工作量;6)存在大量的工具和函数库,减少了开发的工作量;7)嵌入式Web服务器具有通用性,能够嵌入到任何设备当中。
通过应用程序接口,服务器可以运行程序去实现高级功能,普通的监控方式达不到这样的效果。
2.3嵌入式Web服务器实现原理
Web服务器监听来自客户端请求,并根据请求类型提供相对应的服务。
它将Web服务器引入到现场嵌入式设备中,并将信息采集与发布都集成到现场的嵌入式设备中。
在相应的软硬件平台支持下,利用标准的通信协议和接口形式,内嵌于嵌入式设备的Web服务器就具备了向接入它所在网络的合法用户提供统一的基于浏览器方式的控制界面和操作,此时浏览器成了设备的前端控制板。
当前在嵌入式应用领域,主要通过两种方式将嵌入式系统转变为嵌入式WebServer:
1)通过网关服务器实现Internet接入;2)直接通过TCP/IP协议实现嵌入式设备的Internet接入。
3嵌入式Web服务器硬件整体结构
嵌入式Web服务器的硬件系统包含了具有Web通信能力的微处理器,它可以通过现场总线与应用系统相连,也可以与前端的应用系统直接集成在一起。
其硬件结构如图2所示。
系统中的FLASHROM存储器是用来存储软件系统的内核、HTML文档、TCP/IP协议;RAM存储器用于存储各种数据;网络接口用于与Internet连接;前端现场测控的硬件完成对现场设备的监测、监测、报警、自动控制等功能;微型处理器负责全体的管理与运行;人机接口是可选条件,实现在本地对现场设备的人工监控。
图2(a)嵌入式系统web服务器硬件结构
Internet
图2(b)嵌入式系统Web服务器软件系统
3.1嵌入式Web服务器软件构成
嵌入式Web服务器主要解决的问题是通过Internet来进行远程访问和控制
现场的设备,所以必须在嵌入式设备中配置TCP/IP协议和Web服务器,
以解决网络互联问题。
但是嵌入式服务器系统只需要使用其中的某些基本
的功能,TCP/IP也要减去一些使用不到有功能,以节省有限的嵌入式资源。
此外还要用到的软件资源有嵌入式实时操作系统、HTTP协议,同时带有
SMTP和SNMP协议,使其具有网络管理的简单功能,通过网络可以对接
入到Internet上的设备进行管理和控制。
3.2精简TCP/IP协议及实现
嵌入式Web服务器软件中必须实现TCP/IP协议,但要根据实际的需求作相应的裁减。
精简的TCP/IP协议通常只包含TCP,IP,ARP,ICMP等协议。
3.2.1ARP协议及其实现
嵌入式Web服务器软件方面需实现ARP协议中的应答部分:
嵌入式Web服务器在收到远程ARP请求后,将ARP请求报文中目标机和本地IP、物理地址进行了交换处理,并将EWS的物理地址写在ARP应答报文的本地物理地址段。
实际上此ARP协议的实现是通过向网络接口层发送含有目标机物理地址和本机IP地址的ARP应答报文这一过程来完成。
3.2.2ICMP协议及其实现
ICMP(网际控制报文协议)主要用来将处理一个IP数据过程中的错误显示出来,并提供相关状态和管理信息。
ICMP的差错信息由8位代码和8位类型组成。
嵌入式Web服务器简化了ICMP协议,只需简化实现与Ping命令相关的ICMP报文处理部分。
具体可通过编制PingACK()过程来完成,用PingACK()监测Ping命令,如果监测到对本机的Ping连接,则发送类型为0的ICMP报文。
3.2.3IP协议及其实现
IP协议提供无连接的、不可靠的数据分组传送服务,在嵌入式Web服务器中,IP协议只需要完成接收数据的IP解包和发送数据的IP封装。
IP协议在嵌入式Web服务器中的实现可通过以下两个过程来完成:
1)IPPack(),此过程将传输层传来数据的前部添加20字节的IP报头。
2)IPUnpack(),此过程提取网络接口层送来的IP报头的20字节数据并与本机的IP地址进行比较,如果相同,
记录对方的IP地址,并去除报数据的前20字节的报头;否则,丢弃。
3.2.4TCP协议及实现
TCP协议提供面向连接的、可靠的字节流传输服务。
建立连接、数据传输和关闭连接的工作过程,保证了TCP协议数据传输的可靠性。
在数据传输前,必须在信源与信宿建立一条连接,只有连接成功才可以发送数据。
此外,接收端也要对收到的第一个报文进行确认,未经确认的报文被认为是出错。
由于嵌入式Web服务器传输数据量较少,支持单进程的TCP任务即可,故只需要简化TCP协议的数据重组和分组的功能。
方法为:
嵌入式Web服务器在本地打开一个端口监听TCP报文数据,监测到远程用户对系统的TCP请求连接时,系统发送确认报文并建立TCP连接,然后开始传送数据。
发送数据时,TCP状态机会在数据前面加上TCP报头后发送到IP层;接收数据时,从IP层来的数据经过TCP状态机去掉TCP报头后送到应用层。
TCP协议软件可通过两个过程来实现:
1)
TCPPack(),将TCP报头添加到应用层送来的数据前部;2)TCPUnpack(),将网络接口层送来的TCP报数据的3~4字节数据(目的端口号)与系统默认端口作对比,如相同,则去除数据报的前20字节的报头;否则,丢弃。
TCP数据报重发、确认是通过发送特定内容的报文来控制。
3.3HTTP协议
HTTP引擎是嵌入式Web服务器的核心,它是浏览器与Web服务器通信的协议。
HTTP规定了浏览器和服务器之间传输的消息格式及各种控制信息和发送和处理请求的标准方式,从而定义了所有Web通信的基本框架。
如图所示,在嵌入式Web服务器中,为了不影响嵌入式系统的CPU和内存资源而又得到一个稳定的用户界面,应该使用HTTP1.0标准。
3.4CGI接口
CGI也就是通用网关接口,它定义了CGI脚本与Web服务器之间的接口标准,其主要功能是在Web环境下,将客户端的一些信息传送给服务器端,Web服务器接收有关信息并放入环境变量,然后启动所指定的CGI脚本以完成特定的工作。
CGI脚本从环境变量中获取相关信息来运行,最后以HTML格式输出相应的执行结果返回给浏览器端。
由于用户能传递不同的参数给CGI脚本,所以CGI技术使得浏览器和服务器之间具有交互性。
4系统软件设计
4.1嵌入式操作系统
uClinux是一种专为嵌入式系统设计的Linux,它从Linux2.0/2.4内核派生而来,专门应用于没有MMU的CPU[9]。
uClinux带有一个完整的TCP/IP协议,同时它还支持许多其他网络协议。
因此,uClinux对于嵌入式系统来说,是一个网络完备的操作系统。
另外,由于Linux的源代码开放性,任何新的网络协议都可以很容易加入到内核中,用户可以方便地开发定制,不受任何限制。
正是基于以上原因,本系统采用了uClinux作为嵌入式Web服务器的操作系统。
4.2Boa的移植
在uClinux下构建Boa服务器的方法由以下步骤完成:
(1)从www.boa.org上下载Boa的源代码,将其解压后生成Makefile文件。
修改Makefile文件,将文件中的CC=gcc改为CC=arm-linux-gcc,CPP=gcc-E改为CPP=arm-linux-gcc-E。
然后运行make进行编译,得到可执行文件boa,再将调试信息舍去,使其瘦身。
(2)修改boa.conf文件。
Boa启动时需要用到一个配置文件boa.conf,该文件用于配置Boa服务器的相应接口、服务器名称、相关文件路径等。
在这里,将Usernobody改为User0,将Groupnogroup改为Group0,将DocumentRoot/var/www改为DocumentRoot/etc/boa/html,将ScriptAlias/cgi-bin//usr/lib/cgi-bin/修改为ScriptAlias/cgi-bin//etc/boa/cgi-bin/。
(3)由于默认的根文件系统是只读的,所以在编译内核前,需要根据配置文件boa.conf在文件系统中建立相关目录。
(4)将可执行文件boa、配置文件boa.conf、可执行的CGI程序和网页文件分别放入对应的目录中,并在/etc/boa/html中建立主页文件index.html。
(5)重新编译内核,将编译好的内核下载到开发板。
4.3软件实现
为了实现客户浏览器同Web服务器之间的动态交互性,需要采用某种服务器端技术来动态生成Web页。
目前,实现动态网页的四种技术分别是CGI、ASP、
PHP和JSP,但uClinux不支持ASP和PHP,故采用CGI来实现动态Web页面。
CGI是一种在Web服务器中运行的程序,它定义了Web服务器与其他可执行程序之间进行交互的接口标准。
当Web服务器接收到客户浏览器发送的HTTP请求时,先判断它是静态页面请求还是CGI动态请求,如果是后者就将数据传递给CGI程序,并重定向CGI程序的输出到Web页,CGI程序在处理时将数据封装成HTML形式发送到输出,这样客户端浏览器就可以看到对应的Web页。
软件的设计框架如图3所示。
N
Y
静态页面请求CGI动态请求
图3软件设计框图
其中的监听连接部分是一个无限循环,它总在监听来自浏览器端的连接请求,如果发现连接合法,就建立起客户端浏览器和Web服务器的连接。
可以利用uClinux提供的Socket套接字在80端口进行监听连接,其过程为:
socket()→bind()→listen()→accept()。
在Web环境中,浏览器与服务器之间的数据交互,很多是通过HTTP中的Form表单完成的,Form提供了两种数据传输的方式——GET和POST方法。
虽然HTTP支持的方法有多种,考虑到硬件资源的限制和系统响应的速度,这里只响应GET和POST两种请求。
在嵌入式服务器端,CGI程序接收到来自客户端浏览器的请求,将请求分解后,查看其请求的方法
是GET还是POST。
当为GET请求时,从请求行中读取用户请求的文件名;当为POST请求时,读取请求行中的文件名和报文主体中用户提交的表单数据,并对表单数据进行处理。
当用户在网页中输入数据时,数据会先传给Web服务器,再传给CGI程序,而Web服务器将数据传给CGI程序前,会先经过一个编码程序,这样CGI程序如果想要得到用户输入的原始数据,就需要对数据进行解码。
Web服务器中对用户数据进行编码的原则是:
每个输入字段的名称和用户输入的数据会形成一系列的键-值对,键和值由“=”分开;每个配好对的键-值之间,由“&”分开;对字段中的特殊符号,用十六进制的ASCII码的方式来编码,空格则以“+”来编码。
因此,CGI程序要想对数据解码,就需要将每个配好对的键=值分离出来,去除配对数据间的“&”,把“+”置换成空格,将十六进制的ASCII码置换成原来的数据。
最后,就可以得到用户输入的原始数据。
虽然动态网页的处理由CGI完全可以实现,但由于Web服务器每运行一个CGI程序,就需要fork一个进程为其服务,这样服务器与浏览器的交互越多,对服务器的总体性能影响就越大。
因此,对于数据的后期处理和显示方式等任务,可以采用基于客户端浏览器的动态HTML技术来完成,这里由脚本语言JavaScript来实现,以减轻Web服务器的负担。
5实验测试
在Web服务器端生成网页index.html,放置在目录etc/boa/html下。
编写的CGI程序,放置在目录etc/boa/cgi-bin下。
将目标板的IP地址设置为210.42.150.225后,启动Boa服务器。
在任意一个Web浏览器上输入http:
//210.42.150.225,可以看到服务器的默认网页。
当用户选择相关信息并提交后,CGI将其接收,并根据提交内容对家居设备进行相应控制,图3(a)就是用户对空调进行设置的测试页面。
同时,用户也可以对家居设备的目前状态进行查询,查询结果如图4(b)所示。
图4(a)Web服务器的空调控制测试页面
图4(b)Web服务器的家居状态查询页面
6结束语
本文从整体上介绍了嵌入式Web服务器的体系结构、程序的组件视图、嵌入式Web服务器的组成模块以及怎样精简TCP/IP协议以减少不必要的资源开支和适应嵌入式系统对资源的要求。
支持Web浏览功能的嵌入式设备不但可以简化设备的设计,而且减轻了用户的应用难度,可以通过浏览器方便地设置嵌入式设备的参数。
通过嵌入式Web技术实现设备的远程监控、管理和维护,将降低系统的运行费用、提高管理水平,在工业控制、远程医疗等方面有着十分广泛的应用。
嵌入式Web服务器的实现,使得用户通过Internet就可以远程控制和管理嵌入式系统的运行。
和传统的Web服务器相比,它简化了系统结构,将信息采集和信息发布都集成到现场的嵌入式设备中,在很大程度上方便了维护和管理工作。
经测试表明,该嵌入式Web服务器运行正常,能够实现系统所设定的智能家居控制,且服务器每秒能处理几百次的连接请求,较之httpd和thttpd服务器,其响应速度更快,而且该Web服务器还具有成本低、可靠性高等优点。
但该服务器并没有完整支持CGI规范,如果应用领域有此要求,还需要做相应改进。
本文设计的这种基于ARM的嵌入式Web服务器,响应速度快,运行良好,经过适当的修改和完善,可用于智能家居、数据采集、工业控制等领域,具有一定的应用推广价值。
参考文献
[1]胡国珍,严伟.基于AX88796的嵌入式WEB服务器构建.《国外电子元件》2007年11期
[2]刘志东,纪金水,杨锋英.嵌入式Web服务器技术探究.《电脑知识与技术》2011年27期
[3]王莉,周伟.基于ARM的嵌入式Web服务器设计.《计算机工程与应用》2012年14期
[4]李荣鑫,喻国平.基于ARM的嵌入式WEB服务器技术研究.[J]微计算机信息,2007(8)
[5]王庆志.嵌入式Web服务器的结构研究与设计.《中国石油大学》2010年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM 嵌入式 Web 服务器 设计 实现