《基于ARMLinux的Web服务器的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于ARMLinux的Web服务器的设计与实现.doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于 ARM-Linux 的Web 效劳器的设计与实现摘 要:随着嵌入式技术的开展与后PC时代的到来,嵌入式系统被越来越广泛地应用到各个领域中。同时,信息技术的迅速开展也使得嵌入式设备与Internet的结合成为必然趋势。本文在ARM平台上裁剪、配置与移植了Linux内核与根文件系统,并通过对web技术的深入研究最终设计并实现了一个轻量级的嵌入式web效劳器。关键词:嵌入式系统;web效劳器;HTTP;CGI1 引言随着信息技术与网络的高度兴旺,当前人们面对的各类信息资源极为丰富,只有借助各种计算机,才能对这些信息进展处理。同时,随着后PC时代的到来,计算机的概念不再局限于以前的PC,而是包括
2、形态各异、性能千差万别的各类嵌入式系统。从人们日常生活中手机、PDA到家中的空调、冰箱,再到国防、通信、工业控制等都有嵌入式的影子。在这个信息时代,只有Internet与嵌入式设备结合起来才能代表嵌入式技术的未来开展方向,而嵌入式Web效劳器那么是这个方向上的重要应用1。本文通过在在32位的ARM开发板上移植LINUX操作系统搭建起开发环境,并实现了基于ARM-LINUX的轻量WEB效劳器。2 开发环境的建立2.1硬件平台的建立本系统选用的是开发版核心是Samsung公司的S3C2410处理器,它基于ARM公司的ARM920T处理器核,采用0.18um制造工艺的32位微控制器2。它集成了以下部
3、件:独立的16KB指令Cache与16KB数据Cache,MMU,支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的Timer,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS接口,IIS-BUS接口,2个USB主机,1个USB设备,SD主机与MMC接口,2路SPI。S3C2410处理器最高可运行在203MHz。2.2软件环境的建立在进展嵌入式系统的开发时,我们的目标平台只有有限的存储空间与运算能力,因此,在ARM平台上对程序进展本机编译就不太可能了。通过穿插编译工具,我们就可以在pc平台上编译出针对ARM目标平台的可执行程序
4、3。本文中使用的是arm-linux嵌入式架构,因此我们使用arm-linux系列工具链。我们可以下载安装集成穿插工具链cross-3.3.2,在此不详述安装过程,安装好后下文将默认在/usr/local/arm/bin的路径下寻找可执行文件。接下来是arm-linux系统的建立,以开发板上的boot loader为根底。1Linux内核移植将Linux内核源码放到工作目录下,并解压,然后修改内核源码根目录下的Makefile文件,给出编译工具链的路径,如下所示:CROSS_COMPILE=/usr/local/arm/bin/arm-linux-gcc然后修改arch/arm/plat-s3
5、c24xx/common-smdk.c文件,修改Nand Flash的分区信息与Nand Flash的硬件信息,可根据开发板的配置修改;接着用make menu config命令对内核进展根本配置,最后用makez Image命令生成内核映像。2配置根文件系统首先需要下载busy box工具与cramfs工具进展配置、编译与安装,Busy box的编译过程与内核的编译过程很接近都是先make menu config进展配置,然后在make进展编译。最后一步执行makeall install命令时会在busybox目录下生成_install文件夹,在这个文件夹下创立系统文件目录,必须有的目录是:
6、/dev、/bin、/usr、/sbin、/lib、/etc、/proc、/sys,接着添加设备文件、库文件等,最后用mkcramfs_installrootfs命令打包。3 web效劳器具体实现在嵌入式web效劳器中,我们要实现的具体功能主要是静态网页以及能与用户通过浏览器进展交互的动态网页,客户端的动态请求是通过效劳器端的CGI程序来实现的,因此效劳器必须要与CGI程序通信。下面本文分析设计过程的几个要点:3.1建立socket连接Web效劳器与客户端的连接的建立是通过申请套接字(Socket)实现的。具体流程,用到的系统调用有:Socket():返回一个类似于文件描述符的套接字句柄;bi
7、nd():将套接字地址包括本地主机地址与本地端口地址与所创立的套接字句柄绑定起来;listen():对申请的socket进展监听,以随时接收客户端发来的请求;accept():如有连接到达那么接收连接,返回一个新的套接字句柄;read():从accept()返回的套接字句柄中读取客户端传来的数据。3.2并发请求的处理为了处理并发请求,我们应当创立新的进程来处理与客户端的连接,在linux中使用进程号PID来识别不同的进程。系统调用fork()用来在已存在的进程中创立一个新进程,新进程称为子进程,原进程那么称为父进程。它的返回值用来判断是父进程还是子进程,如果子进程中返回0,父进程中返回子进程I
8、D,出错返回-1,具体过程如图2所示。3.3HTTP报文解析HTTP协议标准里规定了一些根本的规那么,用CR表示回车,LF表示换行,SP表示空格,HT表示制表符。HTTP消息包括客户机向效劳器的请求消息与效劳器向客户机的响应消息两种。这两种类型的消息都由一个开场行start-line,零个或更多个头域message-header,一个指示头域完毕的空行也就是以一个CRLF为前缀的什么也没有的行,最后一个可有可无的消息实体message-body组成5。请求消息开场行格式如下:MethodSPRequest-URISPHTTP-VersionCRLF其中Method表示请求方法;Request-
9、URI是一个统一资源标识符,标识请求的资源在效劳器上的位置;HTTP-Version表示请求的HTTP协议版本。请求方法描述了对指定资源执行的动作,常用的方法有有两种:GET方法表示请求获取Request-URI所标识的资源,POST方法告诉效劳器将附在请求实体中的信息发送到Request-URI。响应消息的开场行格式如下:HTTP-Version SPStatus-Code SPReason-PhraseCRLF其中,HTTP-Version表示效劳器HTTP协议的版本;Status-Code表示效劳器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。相应状态代码有三位数
10、字组成,第一个数字定义了响应的类别,且有五种可能取值,后两位数字不同的组合代表不同的状态:表1HTTP响应状态码取值描述1表示请求已接收,继续处理2成功接收,比方200表示处理成功。3重定向,要完成请求必须进展更进一步的操作4客户端错误,比方404表示访问的指定资源不存在5效劳器端错误HTTP的头域包括通用头,请求头,响应头与实体头四个局部。每个头域由一个域名,冒号与域值三局部组成。头域中记载了报文的属性,利用这些信息可以实现客户端与WEB效劳器之间的请求或应答,它包括报文的数据类型、压缩方法、语言、长度、压缩方法、最后一次修改时间、数据有效期等信息。3.4与CGI程序通信公共网管接口CGI是
11、web效劳器与效劳器方web程序通信的标准。按照CGI标准编写的效劳器端的外部扩展应用程序我们称为CGI程序可以处理客户端WWW浏览器输入的协同工作数据,完成客户端与效劳器的交互操作。效劳器与CGI通信的途径有三个:命令行变元、环境变量、标准输入输出流。1命令行变元命令行变元是通过执行程序的命令行传输给程序的参数。2环境变量环境变量时执行程序外部的变量,用于定义程序的执行环境,效劳器在承受客户端发来的请求时应将根本的环境变量的值设置好以供CGI程序访问。常用的环境变量有以下几种:REQUEST_METHOD表示HTTP请求方法,QUERY_STRING表示CGI程序URL中之后的数据,当使用G
12、ET方法时,客户端传输的数据可以通过读取该变量而获得;CONTENT_LENGTH表示客户端传输数据的字节数。我们可以调用setenv()来实现环境变量的设置,如下所示setenv(constchar*name,constchar*value,intoverwrite);参数name为环境变量名称字符串,参数value那么为变量内容,参数overwrite用来决定是否要改变已存在的环境变量,如果overwrite不为0,而该环境变量原已有内容,那么原内容会被改为参数value所指的变量内容;如果overwrite为0,且该环境变量已有内容,那么参数value会被忽略。3标准输入输出流标准输入时
13、字符方式程序受到的键盘收入,但效劳器也可以将键盘输入以外的输入,如FORM表单中的数据作为标准输入重定向到程序中,CGI程序同样可以对其进展处理。同样的,效劳器可以将CGI程序的输出重定向到客户端浏览器,就像效劳器自身控制台显示的标准输出一样,如下所示:dup2(intfd,STDOUT_FILENO)STDOUT_FILENO表示标准输出,这样我们就将标准输出重定向到了指定的描述符上,这里我们可以指定为连接的socket描述符。4 实验结果将本文的程序在硬件平台上运行起来后,我们可以在远端使用普通PC机上的浏览器来访问ARM板上的效劳器。在此我们将ARM板的IP地址设为192.168.78.
14、132,那么我们在浏览器的地址栏输入就可以访问效劳器了。5 完毕语在硬件平台上实现了本文的web效劳器后,就可以在任意PC机上通过浏览器请求效劳器端的静态页面或CGI程序的执行,只要在效劳器端添加需要的CGI程序,就能在远程客户端实现对嵌入式设备的控制。随着网络技术的不断开展,这种通过互联网远程控制设备的方式将得到越来越广泛的应用。更多计算机职称论文就在中国专业职称论文网!参考文献1张纪坤,张小全嵌入式Linux系统开发详解M北京:人民邮电出版社,20062周立功等ARM微控制器根底与实践M北京航空航天大学出版社,2003.7.3孙琼.嵌入式Linux应用程序开发详解M.人民邮电出版时,2006.7.4SteveLitt.Socket ProgrammingM.20015RFC2616.Hypertext Transfer Protocol-HTTP/1.1Swork Working Group,1999第 5 页