




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计(论文)资料题目名称ARM平台嵌入式WEB服务器的设计与实现学院(部)计算机与通信学院摘要论文主要介绍了基于ARM9的嵌入式WEB服务器BOA的软、硬件设计及其实现,其中硬件部分的核心是三星的S3C2440为处理器。最后成果形式为可以远程访问的WEBSERVER嵌入式服务器。BOA是一款单任务的HTTP服务器。与其他传统的WEB服务器不同的是当有连接请求到来时,它并不为每个连接单独创建进程,也不通过复制自身进程来处理多链接。而是通过建立HTTP请求列表来处理多路HTTP连接请求。同时它只为CGI程序创建新的进程,这样就在最大程度上节省了系统资源,这对嵌入式系统来说至关重要。同时它还具有自动生成目录、自动解压文件等功能。因此,BOA在嵌入式系统中具有很高的应用价值。关键词ARM;LINUX;嵌入式WEB服务器;CGIABSTRACTTHISPAPERHASMAINLYDEVELOPEDTHESOFTWAREHARDWAREDESIGNANDREALIZATIONOFTHEEMBEDDEDWEBSERVERBOABASEDONARMANDTHECOREOFTHEHARDWAREPARTISS3C2440MICROPROCESSORPRODUCEDBYSAMSUNGTHEFINALACHIEVEMENTISTHEEMBEDDEDWEBSERVERWHICHCANREMOTEVISITBOAISASINGLETASKINGHTTPSERVERTHATMEANSTHATUNLIKETRADITIONALWEBSERVERS,ITDOESNOTFORKFOREACHINCOMINGCONNECTION,NORDOESITFORKMANYCOPIESOFITSELFTOHANDLEMULTIPLECONNECTIONSITINTERNALLYMULTIPLEXESALLOFTHEONGOINGHTTPCONNECTIONSANDFORKSONLYFORCGIPROGRAMS,THISISVERYIMPORTANTTOEMBEDDEDSYSTEMATTHESAMETIME,ITALSOHASTHEFUNCTIONOFAUTOMATICDIRECTORYGENERATION、AUTOMATICFILEGUNZIPPINGANDSOONSOBOAISOFHIGHLYVALUEINTHEEMBEDDEDSYSTEMAPPLICATIONKEYWORDSARM;LINUX;EMBEDDEDWEBSERVER;CGI第一章引言6第二章课题背景721嵌入式系统简介822嵌入式系统和LINUX823ARM9硬件平台9231ARM简介9232MINI2440嵌入式开发板9第三章建立嵌入式系统开发环境1021在VMWARE下安装UBUNTU12041122虚拟机的配置12221安装配置TFTP服务器12222配置NFS服务器13223交叉编译器的配置13第四章系统移植1441UBOOT移植1442UBOOT烧写14431UBOOT的功能14432使用DNW烧写UBOOT14433使用HJTAG烧写UBOOT1543LINUX内核移植15431LINUXKERNEL的下载16433LINUX内核的配置和编译1644文件系统的移植1745加载LINUX内核映像1746BOAWEB服务器的移植18461BOAWEB服务器的建立1847LINUX下动态WEB页面的实现19471CGI程序分析19472FORM输入的分析和解码21第五章嵌入式WEB服务器2251概述2252WEB服务器原理2353嵌入式WEB服务器实现原理23531TCP/IP协议2354嵌入式WEB服务器BOA24541BOA概述24542BOA的功能实现24第六章CGI技术2561CGI概述2562CGI工作原理26第七章系统功能的测试2871测试WEB服务器2872动态WEB页面测试29结束语32致谢33参考文献34附录35第一章引言随着计算机技术的发展,嵌入式系统已成为计算机领域的一格重要组成部分。以ARM体系结构设计的微处理器具有高性能、低功耗和低成本的特点,它广泛应用于嵌入式系统设计领域,是目前最广泛的32位微处理器。以前设备控制系统一般是通过通信线路进行的,其通信介质、通信协议、相关软件和硬件都是专用的,而INTERNET技术的发展使嵌入式设备的远程控制和管理方式有了改变。不需要专用的通信线路,并且传输的信息不局限于数据信号,还有声音和图像。最终要的是其通信协议是标准且公开的。随着WEB技术的发展,几乎改变了现在的信息表达形式,很多应用都是基于WEB技术的。由于HTML语言的标准统一性,只要在嵌入式设备中有一个微型服务器,就可以使用任意一种WEB浏览器接收和发送信息。所以如何设计这种特别的WEB服务器,如何在嵌入式设备中安装WEB服务器,就成了嵌入式WEB服务器的发展和研究方向。对于嵌入式WEB服务器的研究和应用,其意义是重大的,它为我们管理、控制和监测各种各样的设备提供了一个很好的途径。这种设备可以是具有有限内存资源的8位或16位系统,已足够提供一个用户界面,而且这种方式是基于INTERNET的。这种设备可以在世界任何一个地方,只要它连入INTERNET就能够控制它。第二章课题背景这章对嵌入式系统作了定义,详细介绍了嵌入式LINUX以及嵌入式LINUX在现代嵌入式系统中的地位,最后介绍了本次课题的硬件平台。21嵌入式系统简介嵌入式系统被定义为以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。在制造工业、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等方面均是嵌入式计算机的应用领域。嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。22嵌入式系统和LINUX随着微处理器的产生,价格低廉、结构小巧的CPU和外设连接提供了稳定可靠的硬件架构,那么限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,陆续出现了一些嵌入式操作系统,比较著名的有VXWORK、PSOS、NUCLEUS和WINDOWSCE。但这些专用操作系统都是商业化产品,其高昂的价格使许多生产低端产品的小公司望而却步;而且源代码封闭性也大大限制了开发者的积极性。另外结合国内实情,当前国家对自主操作系统的大力支持,也为源码开放的LINUX的推广提供的广阔的发展前景。还有,对上层应用开发者而言,嵌入式系统需要的是一套高度简练、界面友善、质量可靠、应用广泛、易开发、多任务,并且价格低廉的操作系统。在不久的将来,从冰箱到收音机都会内置处理器。因为LINUX的开放性,许多人认为LINUX非常适合多数INTERNET设备。他们认为LINUX可以支持不同的设备,支持不同的配置。LINUX对厂商不偏不倚而且成本极低,能够很快成为用于各种设备的操作系统。如今,业界已经达成共识即嵌入式LINUX是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。LINUX为嵌入操作系统提供了一个极有吸引力的选择,它是个和UNIX相似、以核心为基础的、完全内存保护、多任务多进程的操作系统。支持广泛的计算机硬件,包括X86,ALPHA,SPARC,MIPS,PPC,ARM,NEC,MOTOROLA等现有的大部分芯片。程式源码全部公开,任何人可以修改并在GNU通用公共许可证GNUGENERALPUBLICLICENSE下发行,这样,开发人员可以对操作系统进行定制,再也不必担心像MSWINDOWS操作系统中“后门“的威胁。同时由于有GPL的控制,大家开发的东西大都相互兼容,不会走向分裂之路。LINUX用户遇到问题时可以通过INTERNET向网上成千上万的LINUX开发者请教,这使最困难的问题也有办法解决。LINUX带有UNIX用户熟悉的完善的开发工具,几乎所有的UNIX系统的应用软件都已移植到了LINUX上。LINUX还提供了强大的网络功能,有多种可选择窗口管理器(XWINDOWS)。其强大的语言编译器GCC、G等也可以很容易得到。不但成熟完善、而且使用方便7。选择LINUX的原因1可应用于多种硬件平台。LINUX已经被移植到多种硬件平台,这对受开销、时间限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发然后移植到具体的硬件上,加快了软件与硬件的开发过程。2LINUX可以随意地配置不需要任何的许可证或商家的合作关系。3它是免费的,源代码可以得到。这是最吸引人的。毫无疑问,这会节省大量的开发费用。4它本身内置网络支持。5LINUX的高度模块化使添加部件非常容易。6LINUX在台式机上的成功,使大家看到了LINUX在嵌入式系统中的辉煌前景。23ARM9硬件平台231ARM简介广义地讲,凡是带有微处理器的专用软硬件系统都可以称为嵌入式系统。它是嵌入到对象体系中的专用计算机系统,以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。ARM作为嵌入式系统得核心,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字,目前非常流行的ARM内核有ARM7TDM1、STRONGARM、ARM720T、ARM9TDM1、ARM920T、ARM940T、ARM946T、ARM966T、ARM10TDM1等。本文所讨论的目标板的CPU为ARM920T内核的三星S3C2410芯片。下面介绍该微处理器的特点及其应用领域。ARM9系列微处理器在高性能和低功耗特性方面提供最佳的性能。它具有以下特点提供11MIPS/MHZ的5级流水线结构;支持32位ARM指令集和16位THUMB指令集;支持32位高速AMBA总线接口;全性能MMU,支持WINDOWSCE、LINUX、PALMOS等主流嵌入式操作系统;MPU支持实时操作系统;支持数据CACHE和指令CACHE,具有更高的指令和数据处理能力。ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。它包含ARM920T、ARM922T和ARM940T三种类型,以适用于不同的应用场合。S3C2410X是一款由SAMSUNG公司设计的低功耗、高集成度的基于ARM920T核的微处理器。这款芯片集成了以下部件16KB指令CACHE、16KB数据CACHE、MMU、外部存储控制器、LCD控制器(STN和TFT)、NANDFLASH控制器、4个DMA通道、3个URT通道、一个I2C总线控制器、一个I2S总线控制器,以及4个PWN和1个内部定时器、通用I/O口、实时时钟、8通道10位ADC和触摸屏接口、USB主、USB从、SD/MMC卡接口等。现在它广泛应用于PDA、移动通信、路由器、工业控制等领域3。232MINI2440嵌入式开发板MINI2440是一套硬软件集成的、基于ARM的完整开发板,该系统包含丰富的硬件资源、完善而优越的调试手段和详尽的资料9。MINI2440目标处理器采用SAMSUNG公司的S3C2440微处理器,是友善之臂公司出品的一款商业性质的开发板,嵌入式开发的所有过程都可在该环境下完成。系统有以下组成部分1ADTIDE集成开发环境;2各种连接线、电源适配器以及学习光盘等;3教学实验系统配套光盘。MINI2440开发板模型如图1所示图1开发板模型示意图第三章建立嵌入式系统开发环境本章详细介绍了嵌入式系统开发环境的建立,LINUX内核的编译,目标板中UBOOT的烧写等。21在VMWARE下安装UBUNTU1204安装过程很简单,在网关配置中我选的是桥接,安装完后如图所示4安装VMWARETOOLS。进入系统后,点击虚拟机上的安装VMWARETOOLS打开终端(应用程序附件终端)。在命令行输入“LS”后将列出文件夹文件;接着输入“CDVMWARETOOLSDISTRIB”指定到此文件夹,接着输入“LS”列出此文件夹内容,接着输入“SUDO/VMWAREINSTALLPL”,输入用户密码便可开始安装了。安装完成后重启,安装VMTOOL可以实现虚拟机和物理机之间的文件共享。22虚拟机的配置221安装配置TFTP服务器1、安装相关软件包APTGETINSTALLTFTPD(服务端)APTGETINSTALLTFTP(客户端)APTGETINSTALLXINETD2、建立配置文件CD/ETC/XINETDD/VITFTP输入SERVICETFTPSOCKET_TYPEDGRAMPROTOCOLUDPWAITYESUSERROOTSERVER/USR/SBIN/INTFTPDSERVER_ARGSS/TFTPBOOTDISABLENOPER_SOURCE11CPS1002FLAGSIPV4存盘退出3、建立TFTP服务文件目录MKDIR/TFTPBOOT4、重新启动服务/ETC/INITD/XINETDRESTART安装完成测试方法在/TFTPBOOT目录下随便放个文件ABC然后运行TFTP192168123202进入TFTP命令行输入GETABC看看是不是能把文件下下来,如果可以就可以了,也可以PUT文件上去。检查TPTP是否打开CHKCONFIGLIST如果没有打开,则用这个命令也可以打开CHKCONFIGTFTPON或者用PSA|GREPTFTP看是否有TFTPD的服务222配置NFS服务器1NFS安装SUDOAPTGETINSTALLNFSKERNELSERVERNFSCOMMONPORTMAP2NFS配置21配置/ETC/EXPORTS文件SUDOVIM/ETC/EXPORTS在文件最后加入如下内容/ROOTNFSRW,SYNC,NO_ROOT_SQUASH注NFS允许挂载的目录及权限在文件/ETC/EXPORTS中进行了定义。其中/ROOTNFS是要共享的目录,代表允许所有的网络段访问,RW是可读写权限,SYNC是资料同步写入内存和硬盘,NO_ROOT_SQUASH是NFS客户端分享目录使用者的权限,如果客户端使用的是ROOT用户,那么对于该共享目录而言,该客户端就具有ROOT权限。223交叉编译器的配置1、解压缩拷贝光盘目录的ARMLINUXGCC432TGZ,然后解压缩到/OPT/FRIENDLYARM/MINI2440目录下,根据我在UBUNTU下实验。2、设置环境变量在/ETC/PROFILE中添加环境变量注意,需要重新注销或者SOURCE一下配置文件PROFILE,环境变量才能生效。第四章系统移植41UBOOT移植首先下载UBOOT200810,移植比较繁杂,参考MINI2440的UBOOT移植手册。42UBOOT烧写431UBOOT的功能MINI2440使用UBOOT作为BOOTLOADER,通过它可以实现如下功能1、烧写FLASH;2、引导LINUX操作系统及其它程序;3、通过以太网下载LINUX内核或其它程序并引导。432使用DNW烧写UBOOT通过USB的方式,首先需要安装USB驱动433使用HJTAG烧写UBOOT通过并行口的方式烧写,需要安装HJTAG软件43LINUX内核移植LINUX内核的移植可以分为板级移植和片级移植。对于LINUX发行版本中已经支持的CPU,通常只需针对板级硬件进行适当的修改即可,这种移植叫做板级移植;而对于LINUX发行版本中没有支持的CPU,则需要添加相应的CPU的内核移植,这种移植叫做片级移植。片级移植相对板级移植来说要复杂许多,需要对LINUX内核有详尽的了解。本课题中所用的LINUX中已经包含S3C2440ARM920T处理器的移植包,下面将在此基础上介绍LINUX板级移植的基本过程和方法9。图19为本课题所采用的实验环境以及开发流程。安装交叉编译器ARMLINUXGCC;对LINUX内核进行配置(MAKEMENUCONFIG),并选择适合本课题系统得相关配置;编译生成LINUX映像文件ULMAGE;通过UBOOT的TFTP命令将该文件下载到目标板并执行。这将在下面的内容中作介绍。安装LINUX安装ARMLINUXGCC配置MAKEMENUCONGFIG编译运行LINUX下载LINUX映像文件启动UBOOT图19JXARM92410LINUX开发流程431LINUXKERNEL的下载HTTPS/WWWKERNELORG/433LINUX内核的配置和编译5LINUX源代码结构LINUX的源代码组织成如下结构,根目录是/HOME/CVTECH/JX2410/LINUX。内核的文件组织结构为6ARCH/ARM与架构和平台相关的代码都放在ARCH目录下。针对ARM的LINUX,有一个子目录和它对应ARM。7DRIVERS包含所有的设备驱动程序。驱动程序又被分为“BLOCK”、“CHAR”、“NET”等几种类型。8FS这里有支持多种文件系统的源代码,几乎一个目录就是一个文件系统,如MSDOS、VFAT、PROC和EXT2等。9INCLUDE相关的头文件。它们被分成通用和平台专用两部分。目录“ARMARCH”包含了平台相关的头文件。10INIT含一些启动KERNEL所需做的所有初始化动作,里面有一个MAINC,针对KERNEL做初始化动作、设置一些参数等,并对外围设备初始化。11IPC提供进程间通信机制的源代码,如信号量、消息队列和管道等。12KERNEL包含进程调度算法的源代码,以及与内核相关的处理程序,例如系统调用。13MM用来存放内存管理的源代码,包括MMU。14NET支持网络相关的协议源代码。15LIB包含内核要用到的一些常用函数。如字符串操作、格式化输出等。16SCRIPT包含在配置和编译内核时要用到的脚本文件。2LINUX内核源码移植修改参考MINI2440的LINUX移植手册44文件系统的移植NANDFLASH采用YAFFS2的文件系统45加载LINUX内核映像17将MINI2440的串口0与PC的串口连接,MINI2440的网卡和PC的网卡使用直连网线进行连接,或者将MINI2440和PC机使用普通网线接入同一局域网。ARM实验箱的IP为192168145,虚拟机下的LINUX的IP设为1921681180,宿主机IP设为1921681145。18将MINI2440上电,正常情况下将在终端DNW中看到BOOTLOADER菜单界面。在BOOTLOADER中按照如图24的提示进行46BOAWEB服务器的移植461BOA的编译建立BOAWEB服务器包括以下步骤1下载BOA源代码。BOAWEB服务器的源代码可以从HTTP/WWWBOAORG下载,本文中下载文件为BOA09413TARGZ,为当前最新版本。19安装并编译BOA源代码。20通过VMWARETOOLS中的文件共享将WINDOWS下下载的BOA源代码复制到/HOME/CVTECH/JX2410/EXAMPLES/目录下。21安装源代码生成MAKEFILE文件/CONFIGURE22修改MAKEFILE文件,找到CCGCC,将其改成CCARMLINUXGCC,再找到CPPGCCE,将其改成CPPARMLINUXGCCE,并保存退出。23运行MAKE进行编译,在BOA/SRC目录下将生成BOA文件,该文件即为BOAWEB服务器执行文件。将调试信息剥去,得到的最后程序只有约60KB大小。3配置BOAWEB服务器,使其能够支持CGI程序的执行。BOA启动时将加载一个配置文件BOACONF,在BOA程序运行前,必须首先编辑该文件,并将其放置于SRC/DEFINESH文件中SEVERROOT宏定义所定义的缺省目录,或者在启动BOA时使用参数“C”指定BOACONF的加载目录。在BOACONF文件中需要进行一些配置,下面作简要介绍24PORT该参数为BOA服务器运行端口,缺省的端口为80。25SERVERNAME服务器名字。26DOCUMENTROOTHTML文档根目录。建议使用绝对路径表示,如“/MNT/JFFS2/WEB”,如果使用相对路径,则它是相对服务器根目录。27SCRIPTALIAS指定CGI程序所在目录,一般所有的CGI脚本都要放在实际路径里,用户访问执行时输入站点虚拟路径CGI脚本名,本课题中CGI的路径设为SCRIPTALIAS/CGIBIN/MNT/JFFS2/WEB/IBIN/。28CGIPATH/BIN/USR/BIN/USR/LOCAL/BIN,提供CGI程序的PATH环境变量值。用户可以根据自己需要,对BOACONF进行修改,但必须要保证其他的辅助文件和设置必须和BOACONF里的配置相符,不然BOA就不能正常工作。在上面的例子中,我们还需要创建日志文件所在目录/VAR/LOG/BOA,将MIMETYPES文件拷贝到/ETC目录。MIMETYPES文件用来指明不同文件扩展名对应的MIME类型,一般可以直接从LINUX主机上拷贝一个,大CD/HOME/CVTECH/JX2410/EXAMPLES/TARZXVFBOATARGZCDBOA/SRCCC/USR/LOCAL/ARM/2953/BIN/ARMLINUXGCCMAKE部分也都是在主机的/ETC目录下。47LINUX下动态WEB页面的实现本课题中通过CGI程序来获取用户的请求、查询条件,使用HTML方式描述结果并直接回送到客户端的浏览器上。生成动态网页的步骤1用户在浏览器中提出数据或查询条件的请求,并执行“提交”后,便将请求信息发送到网上相应的WEB服务器上;2WEB服务器收到这一请求便激活一个CGI程序程序是驻留在WEB服务器上的一个程序;3CGI程序调用该服务器下的所有程序或数据库,并完成读者需要的任务,同时将处理结果送回CGI网关接口;4网关接口程序又将其结果转换成该服务器能识别的HTML文件格式,并确定CGI返回文档的类型;5WEB服务器将其结果送回浏览器中,浏览器进行数据处理并显示结果。由于C语言在平台无关性上表现不错(几乎在任何的系统平台下都有其相应编译器),而且对大多数程序员而言都算得上很熟悉(不像PERL),因此,C是CGI编程的首选语言之一。CGI程序通常分为以下两部分929根据POST方法或GET方法从提交的表单中接受数据。本文中采用的是GET方法。CGI程序必须检查REQUEST_METHOD环境变量以确定是否采用了POST方法,并决定是否要读取STDIN。30用PRINTF函数来产生HTML源代码,并将经过解码后的数据正确地返回给浏览器。将CGI测试程序CGI_TEST/TARGZ复制到/HOME/CVTECH/JX2410/EXAMPLES/目录下。然后安装源代码471CGI程序分析CGI程序见附录1在CGIC中定义了MAIN函数31用“FORM_METHODGETREQUESTMETHOD”将调用POST/GET方法的信息存储在FORM_METHOD中,调用POST,则为1;调用GET,则为0。32以下程序先定义了若采用GET方式则调用函数GETGETVARS;若采用POST方式CD/HOME/CVTECH/JX2410/EXAMPLESTARZXVFCGI_TESTTARGZCDCGITESTMAKECPCGI_TEST/TFTPBOOT则调用函数GETPOSTVARS来处理表单。33打印HTML表单,最后清空ARM中的CGI程序使用的缓存。2CGIVARSC34该程序中先首先将XX形式的十六进制的数字ASCII码转换成字符,再按URL编码规则解码XX转换成字符。此部分程序将在652中给出详细分析。35以下程序首先读入字符串信息,比较字符串判断采用GET还是POST方式,信息返回到FORM_METHOD。36POST和GET方式处理表单的程序见附录,如果请求方法REQUESTMETHOD的值为GET,CGI程序读入环境变量QUESTRYSTRING;如果请求方法为POST,CGI程序就可确定数据来自标准输入,根据CONTENTLENGTH的值确定从读入的数据流大小。在完成表单处理后调用函数CLEANUP来释放缓存空间。37HTML表单的制作11HTMLLIBC及TEMPLATEC,介要分析如下38IFFORM_METHODPOSTGETVARSGETGETVARSPOSTVARSGETPOSTVARSELSEIFFORM_METHODGETGETVARSGETGETVARSHTMLHEADER“DEMOWEBPAGE“HTMLBODYTEMPLATE_PAGEPOSTVARS,FORM_METHODHTMLFOOTERCLEANUPFORM_METHOD,GETVARS,POSTVARSFFLUSHSTDOUTEXIT0REQUEST_METHODGETENV“REQUEST_METHOD“IFREQUEST_METHODNULLRETURN1IFSTRCMPREQUEST_METHOD,“GET“|STRCMPREQUEST_METHOD,“HEAD“FORM_METHODGETELSEIFSTRCMPREQUEST_METHOD,“POST“FORM_METHODPOSTELSERETURN1RETURNFORM_METHODPRINTF“CONTENTTYPETEXT/HTMLNNS“,TITLE此行通过标准输出将字符串“CONTENTTYPETEXT/HTMLNNS“,TITLE传送给WEB服务器。它是一个MIME头信息,它告诉WEB服务器随后的输出是HTML源代码。请注意在这个头信息中有两个新行符,这是因为WEB服务器需要在实际的文本信息开始之前先看见一个空行。39在HTML中参数ACTION用以指明该CGI程式的位置,这样此表单所填的资料才能正确传给CGI作处理。传送资料给CGI的的方式,可选值为POST,GET,用METHOD来定义,此处定义为POST方式。40的参数设定,TYPE“SUBMIT“设定输入方式为SUBMIT或RESET。VALUE“SUBMIT“或者“RESET“,这个值不是输给CGI的,而是显示在按键上,可以不用,传送键的内定值为SUBMITQUERY,清除键的内定值为RESET。472FORM输入的分析和解码当用户提交一个HTMLFORM时,WEB浏览器首先对FORM中的数据以名字/值对的形式进行编码,并发送给WEB服务器,然后由WEB服务器传递给CGI程序。其格式如下NAME1VALUE1每当找到字符XX用其十六进制ASCII码值表示的特殊字符。根据值XX将其转换成相应的ASCII字符。对FORM变量名和变量值都要进行这种转换。下面是CGI中对FORM数据进行分析并将结果回送给WEB服务器的程序的分析。PRINTF“,“/CGIBIN/CGI_TEST“PRINTF“PRINTF“上述程序首先将XX形式的十六进制的数字ASCII码转换成字符,再按URL编码规则解码XX转换成字符。第五章嵌入式WEB服务器51概述随着计算机技术的发展,嵌入式系统已成为计算机领域的一格重要组成部分。随着网络技术的发展,使得B/S(客户端/服务器)应用方式已成为一种潮流。它的基础是客户端要有一个浏览器程序,服务器端要有一个对应的WEB服务器。一般网站都采用大型的通用WEB服务器,但对于一般的管理信息系统或中小型应用系统,所需的功能比较简单,如仍采用通用WEB服务器,无疑是资源的浪费。解决方法是使用功能相对简单,体CHARHEX2CHARCHARHEXCHARCHAR_VALUECHAR_VALUEHEX0AHEX0CHAR_VALUE16CHAR_VALUEHEX1AHEX1RETURNCHAR_VALUEVOIDUNESCAPE_URLCHARURLINTN,KFORN0,K0URLKN,KIFURLNURLKURLNHEX2CHARK2URLN0积更小、消耗资源更少的简单WEB服务器,于是嵌入式WEB服务器就应运而生了。52WEB服务器原理从功能上来讲,WEB服务器监听用户机的服务请求,根据用户请求的类型提供相应得服务。用户端使用WEB浏览器和WEB服务器进行通信。WEB服务器在接受到用户端的请求后,处理用户请求并返回需要的数据。这些数据通常以格式固定、含有文本和图片的页面出现在用户端浏览器。53嵌入式WEB服务器实现原理嵌入式WEB服务器是指将WEB服务器引入到现场嵌入式设备中,并驻留其中有限的代码空间内。与传统的WEB应用相比,简化了系统结构,并将信息采集和信息发布都集成到现场的嵌入式设备中。在相应得软硬件平台支持下,利用标准的接口形式和通信协议,内嵌于嵌入式设备的WEB服务器可以向任何接入到它所在网络的合法用户提供统一的基于浏览器方式的操作和控制界面,此时浏览器成了设备的前端控制板。当前在嵌入式应用领域,嵌入式系统转变为嵌入式WEBSERVER,大体可分为2种实现方案1(1)基于网关服务器的嵌入式设备INTERNET接入;(2)直接实现TCP/IP的嵌入式设备INTERNET接入。本课题中采用第二种实现方案。531TCP/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。54嵌入式WEB服务器BOA541BOA概述目前有很多功能强大的WEB服务器,主要包括APACHE,HTTPD,THTTPD和BOA5等几种。其中HTTPD最小,只需几千字节的空间,功能简单,但不支持CGI;APACHE,THTTPD和BOA支持CGI。其中BOA是一个单任务的小型HTTP服务器,源代码开放、性能优秀,运行所需空间仅为140KB左右,特别适合应用在嵌入式系统中。虽然本文中所用到的嵌入式LINUX的WEB服务器也可以通过自行裁剪APACHE服务器得到,但是APACHE服务器是采用传统的生成子进程的方式来提供服务的形式,这种形式比较适合服务比较复杂的情况,不适合嵌入式设备低内存和主频的情况。BOA与APACHE等高性能的WEB服务器主要的区别在于它们是单进程服务器,只有在完成一个用户请求后才能响应另一个用户的请求,而无法并发响应,但这在嵌入式设备的应用场合里已经足够了。而且从对CGI支持的性能指标15可知,BOA对CGI的支持效果最佳。除此之外,BOA与其他WEB服务器相比主要有以下几个优点41对CGI程序无需设置REMOTEHOST环境变量,在REMOTEADDR变量中已经提供了IP地址,可以直接使用GETHOSTBYADDR函数或变量,从而使BOA较其他WEB服务器更易于使用;在BOA中对SERVER2SIDE模块可以剪裁,以提高系统运行速度,其内部的“字节流执行引擎”采用了非完全的图灵机方式实现;不存在访问控制特征,采用符号连接方式进行控制,可以对任何可以读取的文件提供服务,因此速度更快。所以,本课题中选择BOA作为嵌入式LINUX系统的WEB服务器542BOA的功能实现嵌入式WEB服务器BOA和普通WEB服务器一样,能够完成接收客户端请求、分析请求、响应请求、向客端返回请求结果等任务。它的工作过程主要包括A完成WEB服务器的初始化工作,如创建环境变量、创建TCP套接字、绑定端口、开始侦听、进入循环结构,以及等待接收客户浏览器的连接请求;B当有客户端连接请求时,WEB服务器负责接收客户端请求,并保存相关请求信息;C在接收到客户端的连接请求之后,分析客户端请求,解析出请求的方法、URL目标、可选的查询信息及表单信息,同时根据请求做出相应的处理;DWEB服务器完成相应处理后,向客户端浏览器发送响应信息,关闭与客户机的TCP连接5。嵌入式WEB服务器BOA根据请求方法的不同,做出不同的响应。如果请求方法为HEAD,则直接向浏览器返回响应首部如果请求方法为GET,则在返回响应首部的同时,将客户端请求的URL目标文件从服务器上读出,并且发送给客户端浏览器如果请求方法为POST,则将客户发送过来的表单信息传送给相应的CGI程序,作为CGI的参数来执行CGI程序,并将执行结果发送给客户端浏览器。BOA的功能实现也是通过建立连接、绑定端口、进行侦听、请求处理等来实现的。本课题中BOA整体工作流程如图2所示NYYN有REQUEST请求否接收REQUEST请求根据执行结果,发送数据到WEB浏览器返回侦听端口请求CGI否创建套接字设置CGI环境变量初始化设置信号量绑定端口分析REQUEST请求执行CGI程序读取指定数据到WEB浏览器图2WEB服务器BOA的执行流程第六章CGI技术61CGI概述现今社会的主要WEB程序的开发语言有ASP、ASPNET、JSP、PHP等,然而此等程序都需要大型的应用平台的支持,这些远远超出了嵌入式系统的特点。现在开发的嵌入式系统以CGI(公用网关接口,COMMONGATEWAYINTERFACE)为主。CGI(通用网关接口)是用于WEB服务器和外部应用程序之间信息交互的标准接口。WEB服务器原本是为静态HTML文档以及其他相关静态文件而设计的。如果一个WEB服务器的功能只限于提供静态页面的花,那么与之通信的WEB浏览器就只能显示在页面请求和显示过程之间文档内容不变化的页面。CGI规范在WEB服务器和浏览器(又称客户机)之间建立了标准的信息交换方式。使用它使得信息在浏览器或服务器与外部程序之间流动,外部程序在处理之后将处理结果送回用户端浏览器。外部程序通常称为CGI程序、CGI脚本、CGI应用程序或简称网关,因为它运用了CGI规范并为实现WEB平台的功能而专门设计。在HTML中,当客户填写了表单,并按下了发送(SUBMIT)按钮后,表单的内容被发送到了服务器端,一般的,这时就需要有一个服务器端脚本来对表单的内容进行一些处理。没有了CGI,WEB的世界就完全失去了它的交互性,所有的信息都变成单向的了,而不能够有任何的反馈。62CGI工作原理系统嵌入式WEB服务器通过CGI程序来获取用户的请求、查询条件,使用HTML方式描述结果并直接回送到客户端的浏览器上,此过程中浏览器将用户输入的数据送到WEB服务器,WEB服务器将数据使用STDIN(标准输入)送到CGI程序。在执行CGI程序后,会访问数据库的记录,最后使用STDOUT输出HTML形式的结果文件,经WEB服务器送回浏览器显示给用户。使用CGI实现客户与服务器的交互分以下几个标准步骤1WEB客户浏览器通过URL与WEB服务器相连;2服务发送HTML和别的组成请求页面的文件给客户,一旦页面内容传完,这个连接自动断开;3在客户方,HTML脚本提示用户做动作或输入,当用户响应后客户请求WEB服务器建立一个新的连接;4一旦连接建立,客户把用户输入的数据传给WEB服务器;5WEB服务器把这些信息和别的进程变量传给由HTML以URL形式提交的CGI程序;6CGI程序根据输入作出相应的操作,产生对客户的响应一般以一个HTML文档的形式,并将其传给WEB服务器;7WEB服务器把应答数据传给客户,并关闭连接;在客户方,用HTML标记的方式来触发处理过程,该标记和其它标记的解释方式一样。在服务器下,LINUX环境变量、命令执行参数和标准输入输出文件都可用于WEB服务器与CGI程序之间的通讯。CGI工作过程图3所示运行结果POST用STDIN输入数据GET用QUERYSTRING输入数据用STDOUT输出数据WEB浏览器WEB服务器CGI脚本启动CGI图3CGI工作原理其中CGI与表单之间的信息交互方法有两种模式“GET”和“POST”。选择哪一种模式取决于表单FORM的“METHOD”字段的设置,如果METHOD设定为GET,CGI程序从环境变量QUER_STRING中获取数据为了解释数据和执行需要的动作,CGI程序必须要分析(处理)此字符串;如果METHOD设定为POST,数据会以STDIN方式送入CGI接口。服务器在数据的最后没有使用EOF字符标记,因此程序为了正确地读取STDIN,必须使用CONTENT_LENGTH值。在本课题中CGI程序采用的是POST方法。如果想从服务器获得数据并且不改变服务器上的数据时,应该选用GET方法;也有例外,当传输的数据很长时,选用POST方法较好;使用GET方式编写CGI程序会更加简单,但是POST方式则更先进;当发送的数据将改变WEB服务器端的数据时,或者想给CGI程序传输大量数据(一般地,超过1024字节,这是URL的极限长度)时,应该选用POST方法14。第七章系统功能的测试在移植完BOA服务器后就是测试它能否正常工作,静态HTML页面能否正常访问,还将测试动态WEB页面能否正常访问。本课题中将采用NFS方式来进行测试工作。71测试WEB服务器BOA测试开发环境如图25所示串口线主机WINDOWS环境虚拟机下LINUX环境MINI2440IP192168145/MNT/NFSMOUNT宿主机IP1921681180NFSSERVERTFTPSERVER/TFTPBOOTIP1921681145目标板图25BOA测试开发环境可以将嵌入式目标系统上的/ETC目录复制到主机的NFS共享目录下,然后将NFS共享目录下的ETC重新MOUNT为目标系统上的/ETC目录。这样就可以在主机上对ETC目录下的各种配置文件进行修改而立刻在目标系统上生效。先前设定JXARM92410的IP地址为192168145,且在JXARM92410的JFFS2文件系统中已经预先烧写好了配置好的BOACONF文件,位于/MNT/JFFS2/ETC/目录。启动JXARM92410LINUX,然后按如下步骤进行42将BOA的执行文件复制到TFTPBOOT目录下43将主机下的TFTPBOOT目录挂载到目标板的NFS目录下44启动BOA服务器根据上文中BOACONF的配置,此时在目标板的MNT/JFFS2/WEB目录下包含测试主页面INDEXHTML、存放各种图片的目录IMAGES以及CGI脚本的存放目录CGIBIN。启动后测试BOA服务器,在网页浏览器中访问如下网址HTTP/192168145/如果网络连接正常,且BOA启动正常的话,将可以看到/MNT/JFFS2/WEB/INDEXHTML网页,如图26所示,表示静态HTML页面测试通过。可以修改该网页,并替换成所需要的网页,然后刷新浏览器显示。MOUNT1921681180/BOACONF/MNT/JFFS2/ETC/CP/HOME/CVTECH/JX2410/EXAMPLES/BOA/SRC/BOA/TFTPBOOTRFCD/HOME/CVTECH/JX2410/EXAMPLES/BOALSMOUNT1921681180/TFTPBOOT/MNT/NFS/BOAC/MNT/JFFS2/ETC/CHARGETGETVARSCHARGETPOSTVARSINTCLEANUPINTFORM_METHOD,CHARGETVARS,CHARPOSTVARSENDIF/_CGIVARS_H/HTMLLIBH/IFNDEF_HTMLLIB_HDEFINE_HTMLLIB_HVOIDHTMLHEADERCHARTITLEVOIDHTMLBODYVOIDHTMLFOOTERVOIDADDTITLEELEMENTCHARTITLEENDIF/_HTMLLIB_H/TEMPLATEH/INTTEMPLATE_PAGECHARPOSTVARS,INTFORM_METHOD/CGIC/INCLUDEINCLUDEINCLUDE“CGIVARSH“INCLUDE“HTMLLIBH“INCLUDE“TEMPLATEH“INTMAINCHARPOSTVARSNULL/POSTREQUESTDATAREPOSITORY/CHARGETVARSNU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 灌肠术课件教学课件
- 加油站的可行性研究报告
- 岩茶品种知识培训内容课件
- 岩矿鉴定基础知识培训课件
- 二零二五年度瓷砖出口采购合同
- 二零二五年度高级法律顾问全面服务长期聘用合同
- 二零二五年度互联网公司兼职职员服务合同模板
- 二零二五年度大型建筑设施定期检查与维修服务合同
- 2025版建筑工程质量检测资料承包合同规范文本
- 二零二五年度企业临时应急资金借款合同模板
- 粮食仓储(粮库)安全生产标准化管理体系全套资料汇编(2019-2020新标准实施模板)
- 喜茶运营管理手册和员工操作管理手册
- 比亚迪汉DM-i说明书
- 心肾综合征及其临床处理
- 普通高中课程方案
- 2022年山东高考生物试卷真题及答案详解(精校版)
- GB/T 38936-2020高温渗碳轴承钢
- 高考地理一轮复习课件 【知识精讲+高效课堂】 农业区位因素及其变化
- 教师专业发展与名师成长(学校师范专业公共课)
- 互通立交设计课件
- 生物竞赛辅导 动物行为学第七章 行为发育(38)课件
评论
0/150
提交评论