ARM平台嵌入式WEB服务器的设计与实现-毕业论文_第1页
ARM平台嵌入式WEB服务器的设计与实现-毕业论文_第2页
ARM平台嵌入式WEB服务器的设计与实现-毕业论文_第3页
ARM平台嵌入式WEB服务器的设计与实现-毕业论文_第4页
ARM平台嵌入式WEB服务器的设计与实现-毕业论文_第5页
免费预览已结束,剩余38页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计论文(20XX届)本科毕业设计(论文)资料 题 目 名 称:ARM平台嵌入式WEB服务器的设计与实现 学 院(部):计算机与通信学院 专 业:通信 学 生 姓 名: 班 级: 学号: 指导教师姓名: 职称: 最终评定成绩: 湖南工业大学教务处摘 要论文主要介绍了基于ARM9的嵌入式Web服务器Boa的软、硬件设计及其实现,其中硬件部分的核心是三星的S3C2440为处理器。最后成果形式为可以远程访问的WebServer嵌入式服务器。Boa是一款单任务的HTTP服务器。与其他传统的Web服务器不同的是当有连接请求到来时,它并不为每个连接单独创建进程, 也不通过复制自身进程来处理多链接。而是通过建立HTTP请求列表来处理多路HTTP连接请求。同时它只为CGI程序创建新的进程,这样就在最大程度上节省了系统资源,这对嵌入式系统来说至关重要。同时它还具有自动生成目录、自动解压文件等功能。因此, Boa在嵌入式系统中具有很高的应用价值。关键词:ARM;Linux;嵌入式Web服务器;CGIAbstractThis paper has mainly developed the software hardware design and realization of the embedded Web server Boa based on ARM. And the core of the hardware part is S3C2440 microprocessor produced by Samsung . The final achievement is the embedded webserver which can remote visit. Boa is a single-tasking HTTP server. That means that unlike traditional webservers, it does not fork for each incoming connection, nor does it fork many copies of itself to handle multiple connections. It internally multiplexes all of the ongoing HTTP connections. And forks only for CGI programs, this is very important to embedded system. At the same time, it also has the function of automatic directory generation、automatic file gunzipping and so on. So Boa is of highly value in the embedded system application. Keywords: ARM;Linux;Embedded Web server;CGI第一章 引言6第二章 课题背景72.1 嵌入式系统简介82.2 嵌入式系统和Linux82.3 ARM9硬件平台92.3.1 ARM简介92.3.2 mini2440嵌入式开发板9第三章 建立嵌入式系统开发环境102.1 在Vmware下安装ubuntu12.04112.2 虚拟机的配置122.2.1 安装配置tftp服务器122.2.2 配置NFS服务器132.2.3 交叉编译器的配置13第四章 系统移植144.1 Uboot移植144.2.U-boot烧写144.3.1 u-boot的功能144.3.2 使用DNW烧写u-boot144.3.3 使用H-Jtag烧写u-boot154.3Linux内核移植154.3.1 Linux kernel 的下载164.3.3 Linux内核的配置和编译164.4 文件系统的移植174.5 加载Linux内核映像174.6 Boa Web服务器的移植184.6.1 Boa Web服务器的建立184.7 Linux下动态Web页面的实现194.7.1 CGI程序分析194.7.2 Form输入的分析和解码21第五章 嵌入式Web服务器225.1 概述225.2 Web服务器原理235.3 嵌入式Web服务器实现原理235.3.1 TCP/IP协议235.4 嵌入式Web服务器Boa245.4.1 Boa概述245.4.2 Boa的功能实现24第六章 CGI技术256.1 CGI概述256.2 CGI工作原理26第七章 系统功能的测试287.1 测试Web服务器287.2 动态Web页面测试29结束语32致谢33参考文献34附录35第一章 引言随着计算机技术的发展,嵌入式系统已成为计算机领域的一格重要组成部分。以ARM体系结构设计的微处理器具有高性能、低功耗和低成本的特点,它广泛应用于嵌入式系统设计领域,是目前最广泛的32位微处理器。以前设备控制系统一般是通过通信线路进行的,其通信介质、通信协议、相关软件和硬件都是专用的,而Internet 技术的发展使嵌入式设备的远程控制和管理方式有了改变。不需要专用的通信线路,并且传输的信息不局限于数据信号,还有声音和图像。最终要的是其通信协议是标准且公开的。随着Web技术的发展,几乎改变了现在的信息表达形式,很多应用都是基于Web技术的。由于HTML语言的标准统一性,只要在嵌入式设备中有一个微型服务器,就可以使用任意一种Web浏览器接收和发送信息。所以如何设计这种特别的Web服务器,如何在嵌入式设备中安装Web服务器,就成了嵌入式Web服务器的发展和研究方向。对于嵌入式Web服务器的研究和应用,其意义是重大的,它为我们管理、控制和监测各种各样的设备提供了一个很好的途径。这种设备可以是具有有限内存资源的8位或16位系统,已足够提供一个用户界面,而且这种方式是基于Internet的。这种设备可以在世界任何一个地方,只要它连入Internet就能够控制它。第二章 课题背景这章对嵌入式系统作了定义,详细介绍了嵌入式Linux以及嵌入式Linux在现代嵌入式系统中的地位,最后介绍了本次课题的硬件平台。2.1 嵌入式系统简介嵌入式系统被定义为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。在制造工业、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等方面均是嵌入式计算机的应用领域。嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。2.2 嵌入式系统和Linux随着微处理器的产生,价格低廉、结构小巧的CPU和外设连接提供了稳定可靠的硬件架构,那么限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,陆续出现了一些嵌入式操作系统,比较著名的有Vxwork、pSOS、Nucleus和Windows CE。但这些专用操作系统都是商业化产品,其高昂的价格使许多生产低端产品的小公司望而却步;而且源代码封闭性也大大限制了开发者的积极性。另外结合国内实情,当前国家对自主操作系统的大力支持,也为源码开放的Linux的推广提供的广阔的发展前景。还有,对上层应用开发者而言,嵌入式系统需要的是一套高度简练、界面友善、质量可靠、应用广泛、易开发、多任务,并且价格低廉的操作系统。在不久的将来,从冰箱到收音机都会内置处理器。因为Linux的开放性,许多人认为Linux非常适合多数Internet设备。他们认为Linux可以支持不同的设备,支持不同的配置。Linux对厂商不偏不倚而且成本极低,能够很快成为用于各种设备的操作系统。如今,业界已经达成共识:即嵌入式Linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix相似、以核心为基础的、完全内存保护、多任务多进程的操作系统。支持广泛的计算机硬件,包括X86,Alpha,Sparc,MIPS,PPC,ARM,NEC,MOTOROLA等现有的大部分芯片。程式源码全部公开,任何人可以修改并在GNU通用公共许可证(GNU General Public License)下发行,这样,开发人员可以对操作系统进行定制,再也不必担心像MS windows操作系统中后门的威胁。同时由于有GPL的控制,大家开发的东西大都相互兼容,不会走向分裂之路。Linux用户遇到问题时可以通过Internet向网上成千上万的Linux开发者请教,这使最困难的问题也有办法解决。Linux带有Unix用户熟悉的完善的开发工具,几乎所有的Unix系统的应用软件都已移植到了Linux上。Linux还提供了强大的网络功能,有多种可选择窗口管理器(X windows)。其强大的语言编译器gcc、g+等也可以很容易得到。不但成熟完善、而且使用方便7。选择Linux的原因:1.可应用于多种硬件平台。Linux已经被移植到多种硬件平台,这对受开销、时间限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发然后移植到具体的硬件上,加快了软件与硬件的开发过程。2.Linux可以随意地配置不需要任何的许可证或商家的合作关系。3.它是免费的,源代码可以得到。这是最吸引人的。毫无疑问,这会节省大量的开发费用。4.它本身内置网络支持。5.Linux的高度模块化使添加部件非常容易。6.Linux在台式机上的成功,使大家看到了Linux在嵌入式系统中的辉煌前景。2.3 ARM9硬件平台2.3.1 ARM简介广义地讲,凡是带有微处理器的专用软硬件系统都可以称为嵌入式系统。它是嵌入到对象体系中的专用计算机系统,以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。ARM作为嵌入式系统得核心,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字,目前非常流行的ARM内核有ARM7TDM1、StrongARM、ARM720T、ARM9TDM1、ARM920T、ARM940T、ARM946T、ARM966T、ARM10TDM1等。本文所讨论的目标板的CPU为ARM920T内核的三星S3C2410芯片。下面介绍该微处理器的特点及其应用领域。ARM9系列微处理器在高性能和低功耗特性方面提供最佳的性能。它具有以下特点:l 提供1.1MIPS/MHz的5级流水线结构;l 支持32位ARM指令集和16位Thumb指令集;l 支持32位高速AMBA总线接口;l 全性能MMU,支持Windows CE、Linux、Palm OS等主流嵌入式操作系统;l MPU支持实时操作系统;l 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。它包含ARM920T、ARM922T和ARM940T三种类型,以适用于不同的应用场合。S3C2410X是一款由Samsung公司设计的低功耗、高集成度的基于ARM920T核的微处理器。这款芯片集成了以下部件:16KB指令Cache、16KB数据Cache、MMU、外部存储控制器、LCD控制器(STN和TFT)、NAND Flash控制器、4个DMA通道、3个URT通道、一个I2C总线控制器、一个I2S总线控制器,以及4个PWN和1个内部定时器、通用I/O口、实时时钟、8通道10位ADC和触摸屏接口、USB主、USB从、SD/MMC卡接口等。现在它广泛应用于PDA、移动通信、路由器、工业控制等领域3 。2.3.2 mini2440嵌入式开发板Mini2440是一套硬软件集成的、基于ARM的完整开发板,该系统包含丰富的硬件资源、完善而优越的调试手段和详尽的资料9。Mini2440目标处理器采用Samsung公司的S3C2440微处理器,是友善之臂公司出品的一款商业性质的开发板,嵌入式开发的所有过程都可在该环境下完成。系统有以下组成部分:1) ADT IDE集成开发环境;2) 各种连接线、电源适配器以及学习光盘等;3) 教学实验系统配套光盘。Mini2440开发板模型如图1所示:图1.开发板模型示意图第三章 建立嵌入式系统开发环境本章详细介绍了嵌入式系统开发环境的建立,Linux内核的编译,目标板中U-boot的烧写等。 2.1 在Vmware下安装ubuntu12.04安装过程很简单,在网关配置中我选的是桥接,安装完后如图所示4) 安装Vmware Tools。进入系统后,点击虚拟机上的安装vmware tools.打开终端(应用程序-附件-终端)。在命令行输入“ls”后将列出文件夹文件;接着输入“cd vmware-tools-distrib”指定到此文件夹,接着输入“ls”列出此文件夹内容,接着输入“sudo ./vmware-install.pl”,输入用户密码便可开始安装了。安装完成后重启,安装vmtool可以实现虚拟机和物理机之间的文件共享。2.2 虚拟机的配置2.2.1 安装配置tftp服务器1、安装相关软件包apt-get install tftpd (服务端)apt-get install tftp (客户端)apt-get install xinetd2、建立配置文件cd /etc/xinetd.d/vi tftp输入service tftpsocket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /tftpbootdisable = noper_source = 11cps = 100 2flags = IPv4存盘退出3、建立tftp服务文件目录mkdir /tftpboot4、重新启动服务/etc/init.d/xinetd restart安装完成!测试方法:在/tftpboot 目录下随便放个文件abc然后 运行tftp 02 进入tftp命令行输入get abc 看看是不是能把文件下下来,如果可以就可以了,也可以put 文件上去。检查tptp是否打开:chkconfig -list 如果没有打开,则用这个命令也可以打开:chkconfig tftp on或者用ps -A | grep tftp看是否有tftpd的服务2.2.2 配置NFS服务器 1.NFS安装 $ sudo apt-get install nfs-kernel-server nfs-common portmap2.NFS配置 2.1 配置/etc/exports文件 $ sudo vim /etc/exports在文件最后加入如下内容: /rootnfs *(rw,sync,no_root_squash) 注:nfs允许挂载的目录及权限在文件/etc/exports中进行了定义。其中:/rootnfs是要共享的目录,*代表允许所有的网络段访问,rw是可读写权限,sync是资料同步写入内存和硬盘,no_root_squash是nfs客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root权限。2.2.3 交叉编译器的配置1、解压缩拷贝光盘目录的arm-linux-gcc-4.3.2.tgz ,然后解压缩到/opt/FriendlyARM/mini2440目录下,根据我在Ubuntu下实验。2、设置环境变量在/etc/profile中添加环境变量注意,需要重新注销或者source一下配置文件profile, 环境变量才能生效。第四章 系统移植4.1 Uboot移植首先下载u-boot-2008.10,移植比较繁杂,参考mini2440的uboot移植手册。4.2.U-boot烧写4.3.1 u-boot的功能Mini2440使用u-boot作为bootloader,通过它可以实现如下功能: 1、烧写flash; 2、引导Linux操作系统及其它程序; 3、通过以太网下载Linux内核或其它程序并引导。 4.3.2 使用DNW烧写u-boot 通过USB的方式,首先需要安装USB驱动4.3.3 使用H-Jtag烧写u-boot 通过并行口的方式烧写,需要安装H-Jtag软件4.3Linux内核移植 Linux内核的移植可以分为板级移植和片级移植。对于Linux发行版本中已经支持的CPU,通常只需针对板级硬件进行适当的修改即可,这种移植叫做板级移植;而对于Linux发行版本中没有支持的CPU,则需要添加相应的CPU的内核移植,这种移植叫做片级移植。片级移植相对板级移植来说要复杂许多,需要对Linux内核有详尽的了解。本课题中所用的Linux中已经包含S3C2440 ARM920T处理器的移植包,下面将在此基础上介绍Linux板级移植的基本过程和方法9。图19为本课题所采用的实验环境以及开发流程。安装交叉编译器arm-linux-gcc;对Linux内核进行配置(make menuconfig),并选择适合本课题系统得相关配置;编译生成Linux映像文件ulmage;通过u-boot的tftp命令将该文件下载到目标板并执行。这将在下面的内容中作介绍。 安装Linux安装arm-linux-gcc配置makemenucongfig编译运行Linux下载Linux映像文件启动u-boot图19.JXARM9-2410 Linux开发流程4.3.1 Linux kernel 的下载/4.3.3 Linux内核的配置和编译5) Linux源代码结构Linux的源代码组织成如下结构,根目录是/home/cvtech/jx2410/linux。内核的文件组织结构为:6) arch/arm:与架构和平台相关的代码都放在arch目录下。针对ARM的Linux,有一个子目录和它对应arm。7) drivers:包含所有的设备驱动程序。驱动程序又被分为“block”、“char”、“net”等几种类型。8) fs:这里有支持多种文件系统的源代码,几乎一个目录就是一个文件系统,如MSDOS、VFAT、proc和ext2等。9) include:相关的头文件。它们被分成通用和平台专用两部分。目录“arm-$(ARCH)”包含了平台相关的头文件。10) init:含一些启动kernel所需做的所有初始化动作,里面有一个main.c,针对kernel做初始化动作、设置一些参数等,并对外围设备初始化。11) ipc:提供进程间通信机制的源代码,如信号量、消息队列和管道等。12) kernel:包含进程调度算法的源代码,以及与内核相关的处理程序,例如系统调用。13) mm:用来存放内存管理的源代码,包括MMU。14) net:支持网络相关的协议源代码。15) lib:包含内核要用到的一些常用函数。如字符串操作、格式化输出等。16) script:包含在配置和编译内核时要用到的脚本文件。2Linux内核源码移植修改参考mini2440的linux移植手册4.4 文件系统的移植nandflash采用yaffs2的文件系统4.5 加载Linux内核映像17) 将mini2440的串口0与PC的串口连接,mini2440的网卡和PC的网卡使用直连网线进行连接,或者将mini2440和PC机使用普通网线接入同一局域网。ARM实验箱的IP为5,虚拟机下的Linux的IP设为80,宿主机IP设为45。 18) 将mini2440上电,正常情况下将在终端DNW中看到bootloader菜单界面。在bootloader中按照如图24的提示进行: 4.6 Boa Web服务器的移植4.6.1 Boa的编译建立Boa Web服务器包括以下步骤:1.下载Boa源代码。Boa web服务器的源代码可以从下载,本文中下载文件为:boa-0.94.13.tar.gz,为当前最新版本。19) 安装并编译Boa源代码。20) 通过Vmware Tools中的文件共享将Windows下下载的Boa源代码复制到/home/cvtech/jx2410/examples/目录下。21) 安装源代码:#cd /home/cvtech/jx2410/examples/#tar zxvf boa.tar.gz#cd boa/src 生成Makefile文件# ./configure22) 修改Makefile文件,找到CC=gcc,将其改成CC = arm-linux-gcc,再找到CPP = gcc E,将其改成CPP = arm-linux-gcc E,并保存退出。23) 运行make进行编译,在boa/src目录下将生成 Boa文件,该文件即为Boa Web服务器执行文件。将调试信息剥去,得到的最后程序只有约60KB大小。#CC/usr/local/arm/2.95.3/bin/arm-linux-gcc make 3.配置Boa Web服务器,使其能够支持CGI程序的执行。Boa启动时将加载一个配置文件boa.conf,在Boa程序运行前,必须首先编辑该文件,并将其放置于src/defines.h文件中SEVERROOT宏定义所定义的缺省目录,或者在启动Boa时使用参数“-c”指定boa.conf的加载目录。在boa.conf文件中需要进行一些配置,下面作简要介绍:24) Port:该参数为boa服务器运行端口,缺省的端口为80。25) ServerName:服务器名字。26) DocumentRoot:HTML文档根目录。建议使用绝对路径表示,如“/mnt/jffs2/web”,如果使用相对路径,则它是相对服务器根目录。 27) ScriptAlias :指定CGI程序所在目录,一般所有的CGI脚本都要放在实际路径里,用户访问执行时输入站点+虚拟路径+CGI脚本名,本课题中CGI的路径设为:ScriptAlias /cgi-bin/mnt/jffs2/web/i-bin/。28) CGIPath: /bin:/usr/bin:/usr/local/bin,提供CGI程序的PATH环境变量值。用户可以根据自己需要,对boa.conf进行修改,但必须要保证其他的辅助文件和设置必须和boa.conf里的配置相符,不然Boa就不能正常工作。 在上面的例子中,我们还需要创建日志文件所在目录/var/log/boa,将mime.types文件拷贝 到/etc目录。mime.types文件用来指明不同文件扩展名对应的MIME类型,一般 可以直接从Linux主机上拷贝一个,大部分也都是在主机的/etc目录下。4.7 Linux下动态Web页面的实现本课题中通过CGI程序来获取用户的请求、查询条件,使用HTML方式描述结果并直接回送到客户端的浏览器上。生成动态网页的步骤:(1) 用户在浏览器中提出数据或查询条件的请求,并执行“提交”后,便将请求信息发送到网上相应的Web服务器上; (2) Web服务器收到这一请求便激活一个CGI程序(程序是驻留在Web服务器上的一个程序); (3) CGI程序调用该服务器下的所有程序或数据库,并完成读者需要的任务,同时将处理结果送回CGI网关接口; (4) 网关接口程序又将其结果转换成该服务器能识别的HTML 文件格式,并确定CGI返回文档的类型; (5) Web服务器将其结果送回浏览器中,浏览器进行数据处理并显示结果。由于C语言在平台无关性上表现不错(几乎在任何的系统平台下都有其相应编译器),而且对大多数程序员而言都算得上很熟悉(不像Perl),因此,C是CGI编程的首选语言之一。CGI程序通常分为以下两部分9:29) 根据POST方法或GET方法从提交的表单中接受数据。本文中采用的是GET方法。CGI程序必须检查REQUEST_METHOD环境变量以确定是否采用了POST方法,并决定是否要读取STDIN。30) 用printf()函数来产生HTML源代码,并将经过解码后的数据正确地返回给浏览器。将CGI测试程序 cgi_test/tar.gz复制到/home/cvtech/jx2410/examples/目录下。然后安装源代码:#cd /home/cvtech/jx2410/examples#tar zxvf cgi_test.tar.gz#cd cgi-test#make#cp cgi_test /tftpboot 4.7.1 CGI程序分析CGI程序见附录1. 在cgi.c中定义了main()函数:31) 用“form_method = getRequestMethod();”将调用POST/GET方法的信息存储在form_method中,调用POST,则为1;调用GET,则为0。32) 以下程序先定义了若采用GET方式则调用函数getGETvars();若采用POST方式则调用函数getPOSTvars来处理表单。if(form_method = POST) getvars = getGETvars();postvars = getPOSTvars(); else if(form_method = GET) getvars = getGETvars(); 33) 打印HTML表单,最后清空ARM中的CGI程序使用的缓存。htmlHeader(Demo Web Page);htmlBody();template_page(postvars, form_method)htmlFooter();cleanUp(form_method, getvars, postvars);fflush(stdout); exit(0); 2.cgivars.c:34) 该程序中先首先将XX形式的十六进制的数字(ASCII码)转换成字符,再按URL编码规则解码%XX转换成字符。此部分程序将在6.5.2中给出详细分析。35) 以下程序首先读入字符串信息,比较字符串判断采用GET还是POST方式,信息返回到form_method。request_method = getenv(REQUEST_METHOD);if(request_method = NULL)return -1;if (!strcmp(request_method, GET) | !strcmp(request_method, HEAD) ) form_method = GET; else if (!strcmp(request_method, POST) form_method = POST; else return -1;return form_method; 36) POST和GET方式处理表单的程序见附录,如果请求方法 REQUESTMETHOD的值为GET,CGI程序读入环境变量QUESTRYSTRING;如果请求方法为POST,CGI程序就可确定数据来自标准输入,根据CONTENTLENGTH的值确定从读入的数据流大小。在完成表单处理后调用函数cleanUp()来释放缓存空间。37) HTML表单的制作11htmllib.c及template.c,介要分析如下:printf(Content-type: text/htmlnn%s, title);38) 此行通过标准输出将字符串“Contenttype:text/htmlnn%s,title)传送给Web服务器。它是一个MIME头信息,它告诉Web服务器随后的输出是HTML源代码。请注意在这个头信息中有两个新行符,这是因为Web服务器需要在实际的文本信息开始之前先看见一个空行。printf(, /cgi-bin/cgi_test );39) 在HTML中参数 action 用以指明该 CGI 程式的位置,这样此表单所填的资料才能正确传给 CGI 作处理。传送资料给 CGI 的的方式,可选值为 POST, GET,用method来定义,此处定义为POST方式。printf(); printf();40) 的参数设定,type=Submit 设定输入方式为 Submit 或 Reset。value=submit或者Reset ,这个值不是输给 CGI 的,而是显示在按键上,可以不用,传送键的内定值为 Submit Query,清除键的内定值为 Reset。4.7.2 Form输入的分析和解码当用户提交一个HTML Form时,Web浏览器首先对Form中的数据以名字/值对的形式进行编码,并发送给Web服务器,然后由Web服务器传递给CGI程序。其格式如下: name1=value1&name2=value2&name3=value3&name4=value4&. 其中名字是Form中定义的INPUT、SELECT或TEXTAREA等标置(Tag)名字,值是用户输入或选择的标置值。这种格式即为URL编码,程序中需要对其进行分析和解码。要分析这种数据流,CGI程序必须首先将数据流分解成一组组的名字/值对。这可以通过在输入流中查找下面的两个字符来完成。 每当找到字符=,标志着一个Form变量名字的结束;每当找到字符& ,标志着一个Form变量值的结束。请注意输入数据的最后一个变量的值不以&结束。 一旦名字/值对分解后,还必须将输入中的一些特殊字符转换成相应的ASCII字符。这些特殊字符是: +:将+转换成空格符; %xx:用其十六进制ASCII码值表示的特殊字符。根据值xx将其转换成相应的ASCII字符。 对Form变量名和变量值都要进行这种转换。下面是CGI中对Form数据进行分析并将结果回送给Web服务器的程序的分析。char hex2char(char *hex) char char_value;char_value = (hex0 = A ? (hex0 & 0xdf) - A) + 10 : (hex0 - 0);char_value *= 16;char_value += (hex1 = A ? (hex1 & 0xdf) - A) + 10 : (hex1 - 0);return char_value;void unescape_url(char *url) int n, k;for(n=0, k=0;urlk;+n, +k) if(urln = urlk) = %) urln = hex2char(&urlk+1);k += 2;urln = 0;上述程序首先将XX形式的十六进制的数字(ASCII码)转换成字符,再按 URL编码规则解码%XX转换成字符。 第五章 嵌入式Web服务器5.1 概述随着计算机技术的发展,嵌入式系统已成为计算机领域的一格重要组成部分。随着网络技术的发展,使得B/S(客户端/服务器)应用方式已成为一种潮流。它的基础是客户端要有一个浏览器程序,服务器端要有一个对应的Web服务器。一般网站都采用大型的通用Web服务器,但对于一般的管理信息系统或中小型应用系统,所需的功能比较简单,如仍采用通用Web服务器,无疑是资源的浪费。解决方法是使用功能相对简单,体积更小、消耗资源更少的简单Web服务器,于是嵌入式Web服务器就应运而生了。5.2 Web服务器原理从功能上来讲,Web服务器监听用户机的服务请求,根据用户请求的类型提供相应得服务。用户端使用Web浏览器和Web服务器进行通信。Web服务器在接受到用户端的请求后,处理用户请求并返回需要的数据。这些数据通常以格式固定、含有文本和图片的页面出现在用户端浏览器。5.3 嵌入式Web服务器实现原理嵌入式Web服务器是指将Web服务器引入到现场嵌入式设备中,并驻留其中有限的代码空间内。与传统的Web应用相比,简化了系统结构,并将信息采集和信息发布都集成到现场的嵌入式设备中。在相应得软硬件平台支持下,利用标准的接口形式和通信协议,内嵌于嵌入式设备的Web服务器可以向任何接入到它所在网络的合法用户提供统一的基于浏览器方式的操作和控制界面,此时浏览器成了设备的前端控制板。当前在嵌入式应用领域,嵌入式系统转变为嵌入式WebServer,大体可分为2种实现方案1:(1)基于网关服务器的嵌入式设备Internet接入;(2)直接实现TCP/IP的嵌入式设备Internet接入。本课题中采用第二种实现方案。5.3.1 TCP/IP协议TCP/IP(传输控制协议/网间协议)是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式。TCP/IP是Internet的基础协议,也是一种电脑数据打包和寻址的标准方法。在数据传送中,可以形象地理解为有两个信封,TCP和IP就像是信封,要传递的信息被划分成若干段,每一段塞入一个TCP信封,并在该信封面上记录有分段号的信息,再将TCP信封塞入IP大信封,发送上网。在接受端,一个TCP软件包收集信封,抽出数据,按发送前的顺序还原,并加以校验,若发现差错,TCP将会要求重发。因此,TCP/IP在Internet中几乎可以无差错地传送数据。在TCP/IP协议基础上建立的HTTP超文本传输协议、FTP文件传输协议、Telnet远程登录协议以及SMTP邮件协议等协议簇构成了Web技术的核心。同时,Web服务器同Web浏览器之间的通信是通过HTTP协议进行的,这一通用的、无状态的、面向对象的协议HTTP协议是Web浏览器和Web服务器之间的应用层协议,也是基于TCP/IP协议的。为了勾勒TCP/IP在现实网络世界中所扮演的角色,请考虑当使用HTTP的Web浏览器从连接在Internet上的Web服务器上获取一页HTML数据时所发生的情况。为形成同Web服务器的虚链路,浏览器使用一种被抽象地称为称为套接口(socket)的高层软件。为了获取Web页,它通过向套接口写入HTTPGET命令来向Web服务器发出该指令。接下来套接口软件使用TCP协议向Web服务器发出包含GET命令的字节流和位流,TCP将数据分段并将各独立段传到IP模块,该模块将数据段转换成数据报并发送给Web服务器。嵌入式系统TCP/IP协议选择时遵循的原则是:首先,嵌入式系统中实现的协议要根据系统自身的特点以及功能来设计自己的协议簇,实现与需要有关的部分,不使用的协议一概不考虑;其次,对于要使用的协议也根据实际应用情况做取舍。考虑到嵌入式Web服务器的硬件处理速度慢并且存储容量相对较小的条件限制,在TCP/IP协议栈中主要能够实现ARP,IP,ICMP,TCP,HTTP协议即可6。5.4 嵌入式Web服务器Boa5.4.1 Boa概述目前有很多功能强大的Web服务器,主要包括Apache, httpd, thttpd和Boa5等几种。其中httpd最小,只需几千字节的空间,功能简单,但不支持CGI;Apache,thttpd和Boa支持CGI。其中Boa是一个单任务的小型HTTP服务器,源代码开放、性能优秀,运行所需空间仅为140 KB 左右,特别适合应用在嵌入式系统中。虽然本文中所用到的嵌入式Linux的Web服务器也可以通过自行裁剪Apache服务器得到,但是Apache服务器是采用传统的生成子进程的方式来提供服务的形式,这种形式比较适合服务比较复杂的情况,不适合嵌入式设备低内存和主频的情况。Boa与Apache等高性能的Web服务器主要的区别在于它们是单进程服务器,只有在完成一个用户请求后才能响应另一个用户的请求,而无法并发响应,但这在嵌入式设备的应用场合里已经足够了。而且从对CGI支持的性能指标15可知,Boa对CGI的支持效果最佳。除此之外,Boa与其他Web服务器相比主要有以下几个优点:41) 对CGI程序无需设置REMOTE- HOST环境变量,在REMOTE-ADDR变量中已经提供了IP 地址,可以直接使用gethostbyaddr函数或变量,从而使Boa较其他Web服务器更易于使用; 在Boa中对Server2side模块可以剪裁,以提高系统运行速度,其内部的“字节流执行引擎”采用了非完全的图灵机方式实现; 不存在访问控制特征,采用符号连接方式进行控制,可以对任何可以读取的文件提供服务,因此速度更快。所以,本课题中选择Boa作为嵌入式Linux系统的Web服务器.5.4.2 Boa的功能实现嵌入式Web服务器Boa和普通Web服务器一样, 能够完成接收客户端请求、分析请求、响应请求、向客端返回请求结果等任务。它的工作过程主要包括:(a) 完成Web服务器的初始化工作, 如创建环境变量、创建TCP套接字、绑定端口、开始侦听、进入循环结构,以及等待接收客户浏览器的连接请求;(b)当有客户端连接请求时,Web服务器负责接收客户端请求,并保存相关请求信息;(c)在接收到客户端的连接请求之后,分析客户端请求,解析出请求的方法、URL目标、可选的查询信息及表单信息,同时根据请求做出相应的处理;(d)Web服务器完成相应处理后,向客户端浏览器发送响应信息,关闭与客户机的TCP连接5。嵌入式Web服务器Boa根据请求方法的不同,做出不同的响应。如果请求方法为HEAD, 则直接向浏览器返回响应首部;如果请求方法为GET,则在返回响应首部的同时, 将客户端请求的URL目标文件从服务器上读出,并且发送给客户端浏览器;如果请求方法为POST,则将客户发送过来的表单信息传送给相应的CGI程序,作为CGI的参数来执行CGI程序,并将执行结果发送给客户端浏览器。Boa的功能实现也是通过建立连接、绑定端口、进行侦听、请求处理等来实现的。本课题中BOA整体工作流程如图2所示:NYYN有Request请求否接收Request请求根据执行结果,发送数据到Web浏览器返回侦听端口请求CGI否?创建套接字设置CGI环境变量初始化设置信号量绑定端口分析Request请求执行CGI程序读取指定数据到Web浏览器图2.Web服务器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论