标准文案江苏科技大学嵌入式系统设计期末大作业----嵌入式web服务器设计学号:1341901124:武易专业:科技大学2016-12-30嵌入式Web服务器的设计与实现引言近年来,传统上用于办公室和商业的以太网逐渐进入了基于嵌入式设备的控制领域。
Web技术可跨越诸多设备和系统在硬件和软件产品间做到即连即用,只需用Web浏览器通过以太网和TCP/IP协议便可访问各种信息终端。
客户机可任意设置,只要能连上Internet并有权访问Web服务器,便可查阅现场有关信息,给维护和管理工作带来很大的方便。
本文提出的基于ARM Linux的嵌入式Web服务器以S3C2410处理器为核心,以可裁减可移植的Linux为操作系统,为嵌入式系统的Internet接入提供了一种方便、快捷、简单的实现方法。
1 嵌入式web服务器技术嵌入式Web服务器(embedded web server,EWS)是指将Web服务器引入到现场测试和控制设备中,在相应的硬件平台和软件系统的支持下,使传统的测试和控制设备转变为具备了以TCP/IP为底层通信协议,Web技术为核心的基于互联网的网络测试和控制设备。
其执行3种基本功能:①静态和动态网页信息发布;②提供接口监测现场设备;③提供接口控制现场设备。
由于Web技术的开放性和独立平台特性,降低了软件系统和通信系统的设计、维护工作量,提高了现场测试和控制设备的管理水平。
嵌入式Web服务器技术提供了异构网络远程管理和监控设备的方法和途径。
在嵌入式Linux系统中,常用的Web Server有Boa、httpd、thttpd和mini-httpd等。
其中Boa是一个运行在类Unix系统中的小型WebServer,适合嵌入式环境。
在Boa中若两个用户同时访问,则其中的一个必须等待,它产生独立进程来处理CGI(通用网关接口)程序,因此占用较少的资源,其体系结构如图1所示。
Boa的优点在于其快速可靠性。
它与其它服务器的区别:没有为CGI程序设置REMOTE_HOST环境变量;没有Server-Side Include(SSI)项,要产生动态网页只能通过CGI:没有设置进入控制,而是根据Linux/Unix的文件系统的权限来决定服务的对象:没有chroot选项,即不能改变根目录。
基于以上的阐述,Boa应用到嵌入式平台上有着诸多的优势,本文的嵌入式Web服务器也因此选用Boa作为平台。
下面笔者将着重介绍嵌入式Web 服务器的硬件平台及软件体系的设计与实现。
图1 Boa网络服务器的体系结构2 硬件平台的设计与实现本文的硬件平台采用S3C2410为系统硬件核心,系统框图如图2所示。
主要包括:存储系统、系统接口、用户接口(显示LCD与键盘)3个部分。
图2硬件平台体系结构S3C2410把外部复位信号作为一个中断处理,在系统复位时,程序指针(PC)被设置为0,程序跳转到0x00000000开始运行。
此空间对应Bank0,系统的2MB的NORFlash和处理器的Bank0相连接。
在NORFlash中存储的是BootLoader,它负责配置处理器的结构、工作模式以及自动检测系统的各个硬件是否工作正常。
系统经过初始化和自检后,BootLoader负责把16 MB NANDFIash的zlmage(即软件系统的镜像文件)复制到0xc0008000地址(此地址是系统64MB SDRAM的首地址)。
然后,引导程序把PC指向0xc0008000地址,系统开始运行。
3 基于Boa的软件平台设计与实现上述的嵌入式硬件平台实际上是一通用平台,基于该平台构建嵌入式Web 服务器,设计者必须考虑其通用性、响应速度及对于硬件的可操控性。
正是基于这样的考虑,笔者分三层构建嵌入式Web服务器的软件体系:ARMLinux 的建立;Boa服务器的移植与构建;Cgi程序的扩展。
3.1 ARM Linux的建立ARM Linux的建立是基于U-Boot的实现,它的建立实际上是Linux核在S3C2410上移植的过程,主要分为3个步骤:建立交叉编译环境;编译核;生成并配置根文件系统。
因本文的工作重点并不是介绍Linux移植,因此下面只是简要介绍3个步骤的实现。
(1)建立交叉编译环境:建立交叉编译环境的过程实际就是对交叉编译器压缩包解包的过程。
在本文中,所有的软件源码包都放在/tools目录下,解包所用指令序列在此不做赘述,其解包路径为/usr/local/arm cross。
(2)交叉编译Linux核:在交叉编译核之前,对编译选项的配置是很重要的。
执行“make menuconfig”指令,进入Syetem Type选项。
本文中选择对S3C2410系统板的支持,然后配置File System以及Block device。
保存配置后要修改Make.file文件,即把交叉编译的路径指定为本文中安装的特定目录,修改语句为:CROSS_Complie=/usr/Ioca/arm_cross/3.4.1/bin/arm-Linux-。
最后通过make dep;make clean;make zlmage命令编译核,得到核压缩映象zlmage。
(3)生成并配置根文件系统:生成并配置文件系统主要有以下的几个步骤完成:安装busybox工具包(首先解压busybox压缩包,在解压目录下修改Makefile文件,然后使用Make install完成安装);创建文件系统的映象文件(首先创建img目录,然后进入根目录创建一个空的映象文件,加载创建的文件系统,并复制文件系统中必要的文件):配置文件系统(经过上述步骤已经产生了文件系统所需要的一些文件,但是需要设置根路径,即在根路径下添加必须的目录、文件并且正确设置属性)。
3.2 Boa服务器的移植与构建基于Boa建立嵌入式Web服务器可分为以下步骤完成:(1)建立交叉编译环境并下载Boa源码包解压:交叉编译环境在前文中构建ARM Linux时已经建立了,这里编译Bao使用同样的交叉编译器,所以不需要重新建立一遍。
Boa的源码包可以从其官方http://.boa.org下载并解压。
(2)编译Boa代码生成可执行文件boa:在编译之前,需要在fooa/src/configure文件中加入CC和CPP的说明,同时修改Makefile里的CC=/usr /local/arm cross/3.4,1/bin/arm.1inux.。
另外还要在编译之前指定Web服务器的根目录路径(SERVERROOT),具体方法是:进入/boa/src /目录,通过修改defines.h文件中#defineERVER ROOT“/home/httpd”语句来指定SERVERROOT。
然后make即可完成编译并生成Boa可执行文件。
(3)配置Boa服务器:为了能够在硬件平台上运行Web服务器Boa,还需要对其运行环境、参数等进行设置,并将最终的配置文件Boa.conf置于适当位置。
通过修改配置文件Boa.conf"可实现对Web服务器的配置,部分配置为:侦听端口使用80端口;访问日志AccessLog存放于/var/log/boa/access_log;错误日志ErrorLog位于/var/log/boa/error_log;文件的根目录DocumentRoot设在/home/httpd/;KeepAliveMax的值修改为50;Keep-AliveTimeout的值修改为10;设置CGIPath为/cgi-bin/等;在Boa.conf的最后加上SewerNameEmServer,即将EmServer作为服务器名称(当然也可用其它名称作为服务器名)。
最后将修改好的配置文件Boa.conf存放于嵌入式系统根文件/ere/boa目录下。
通过镜像制作工具执行命令genromfs-fromfs.img—dromdisk生成romdisk的镜像文件romfs.img,将romfs.img通过Bootloader下载到flash存储器。
(4)测试Boa的运行:为了确保Boa的正常运行,利用简单的测试程序测试Boa的运行情况。
在目录/home/bttpd/下建立index.html文档,其容为:This is boa server</BODY></HTML>在PC机上通过浏览器连接到运行Boa的硬件平台http://192.168.1.20/(硬件平台IP),若页面显示This is boa server,说明Boa可以正常获取页面。
在/cgi.bin/路径下建立test文件,其容如下:#!/bin/sbecho Content-type:text/htmlecho”This is cgi test</body></html>”在浏览器中输入http://192.168.1.20/cgi—bin/test,若页面显示This is cgi test,说明服务器可以正常执行CGI程序。
3.3 CGI扩展开发CGI定义了Web服务器与CGI脚本之间的接口标准。
其主要功能是在Web环境下,从客户端传送一些信息给Web服务器,Web服务器把接收到的有关信息放入环境变量,然后再去启动所指定的CGI脚本以完成特定的工作,CGI脚本从环境变量中获取相关信息来运行,最后以HTML格式输出相应的执行结果返回给浏览器端。
由于用户能传递不同的参数给CGI脚本,所以CGI技术使得浏览器和服务器之间具有交互性。
CGI的扩展开发即是在config.c中为该扩展功能增加一个命令码flag,并指定它的处理响应函数;然后在cgihead.c中完成这个处理响应函数的代码即可。
下面笔者将以通过Web服务器实现设置嵌入式系统IP地址为例介绍CGI的扩展开发方法及步骤:(1)首先在left.html(注:主页采用框架,left.html为左框架的页面)主菜单栏中增加一项:“设置IP”。
即在:/home/httpd/html/left.html,增加一项:这个处理代码中用vfork+execl执行ifconfig/route命令,完成IP设置工作,并返回显示操作结果,提供用户重新启动。
重新启动后板子的IP地址就是更改后的IP地址了。
3.4运行扩展后的Web服务器采用上述扩展方法,结合硬件资源和既有驱动笔者相继实现了系统时间设置、MAC地址设置、MiniGui演示、触摸屏演示、步进电机控制、录音、播放MTV等多项基本功能和修改管理员密码、系统重启等系统功能。
为了较好实现动态网页的交互性,笔者将首页设置成为框架,左框架调用left.html显示各管理菜单,右框架显示点击某菜单选项后的页面。
通过在右框架中的确认最终实现管理功能。