5 软件设计
软件设计包括:操作系统移植、网络协议栈设计、文件系统生成、应用级代码编写等部分。
5.1 操作系统
为了简化设计,本文中的Web服务器采用单一线程,无需RTOS(实时操作系统)的支持。故采用EDK提供的仅支持单进程的standalone板支持包即可。
5.2 协议栈
系统采用的是EDK中包含针对MicroBlaze的网络协议栈,隐藏了低层硬件细节,以类似于Unix套接字的方式实现一个精简的网络协议栈Xilnet。他支持以下一些网络协议:IP,ARP,ICMP,UDP,TCP。调用如下函数初始化栈以及MAC地址和IP地址。
5.3 文件系统
为了支持HTTP协议,一个文件系统是必不可少的。本设计使用EDK提供的xilmfs文件系统对网页的静态页面和图片进行组织和存储。
调用mfs_file_open()和mfs_file_wrire()函数打开和创建文件系统。考虑到有限的系统资源,文件存放在DDR SDRAM中。
5.4 HTTP协议及其实现
嵌入式Web服务器技术的核心是HTTP(超文本传送协议)引擎。HTTP是WWW上的协议。HTTP协议使Web服务器和浏览器可以通过Web交换数据。他是一种请求/响应协议,即服务器等待并响应客户方请求。当用户要浏览服务器上的一个网页时,一个HTTP请求就会从用户的浏览器发到HTTP服务器。服务器响应这个请求,把指定的网页传送回来,用户才看到了网页。HTTP协议不维护与客户方的连接,他使用可靠的TCP连接,通常采用TCP的80端口。客户/服务器传输过程可分为4个基本步骤:浏览器与服务器建立连接;浏览器向服务器请求文档;服务器响应浏览器请求;断开连接。
服务器程序开始运行时,主进程就创建一个套接字,并与主机地址绑定到一起,随后置为被动监听状态,等待客户端连接请求的到来,分别有xilsock_socket()创建一个套接字,xilsock_bind()绑定,xilsock_listen()监听,xilsock_accept()接收来完成。一旦接收一个连接,xilsock_acept()会返回一个新的套接字描述符,主程序则开辟一个新的子程序来处理这个新的连接。这样系统可以同时接收多个客户端的请求。
如图2所示,首先创建套接字,将套接字与本地地址和端口绑定,并设置套接字处于监听状态。Web服务器在接收一个连接请求后,读取用户的请求,根据用户的请求进行相应的处理。
当请求位静态文本时,文档直接提交输出,当请求位动态文本时,请求模块自动调用脚本引擎,将脚本替换位现场数据,再提交输出,当请求为带参数的执行命令时,请求解析器调用命令执行模块分析命令并控制监控前端。
这里并没有采用通常的CGI(Common Gateway Interface)技术对请求信息进行处理,而是将活动页面由加载进Web服务器的模块处理,因此处理速度比CGI程序更快、更高效。活动页面还可以处理表单、HTTP会话和方便的访问数据库。因此,活动页面对动态Web页面提供完整的服务器端支持。
6 结 语
本文介绍的基于MicroBlaze的嵌入式Web服务器可以实现预期功能,用户可以通过IE浏览器浏览存储到FLASH芯片中的网页。
CPU本身是以软核的方式实现,其功能可根据需要进行定制,非常灵活。EDK不但在硬件设计上提供了支持,在软件上也为设计者提供了较好的支持,提供了现成的网络协议栈。加上EDK提供的集成开发环境使得软件开发更加便利。采用这种方式的控制系统具有控制分散、开放性好、使用简单、稳定性好等优点,而且可以通过浏览器进行远程多点监控和远程支持,是未来控制系统发展的一个趋势。