单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,9,章 嵌入式,Web,环境的设置,本章重点,通用网关接口(,CGI,)技术的工作原理,thttpd,服务器。,Boa,服务器。,本章内容,9.1 Linux,环境下,Web,服务器,9.2 Linux,环境下基于,thttpd,动态服务器的实现过程,9.3 Linux,环境下基于,Boa,的动态服务器实现,9.4,用,DMF,实现搭建动态,Web,服务器,9.1 Linux,环境下,Web,服务器,嵌入式系统已经大量应用于各种场合,网络技术的发展使嵌入式系统的网络功能日益完善。在测控领域里,常常需要远程查询被测控对象的实时状态,或进行某种控制操作,采用服务器浏览器进行工作的嵌入式系统,可以仅通过浏览器就完成所有的测控任务而不依赖于其他客户端程序,具有简单网络服务器功能的嵌入式系统可以方便地提供这种功能。,9.1 Linux,环境下,Web,服务器,将嵌入式系统接入网络,一般是为了提供一种系统与外界交互的途径,由于网络的可扩展性,嵌入式系统一旦连接到网络中,其所能提供的信息和获得的信息都将成倍增加。为了更方便地通过网络向外提供信息,必须为系统构建,Web,服务器。,Linux,环境下的嵌入式主流,Web,服务器,包括,Apache,、,httpd,、,thttpd,和,Boa,等几种。,httpd,是最简单的一种,Web,服务器,它的功能最弱,不支持认证,不支持,CGI,。如果,Web,服务器仅需提供一些静态页面,例如简单的在线帮助、系统介绍等,完全可以用静态服务器,httpd,来实现。,thttpd,和,Boa,都支持认证、,CGI,等,功能都比较全。若需提高系统的安全性,或需要与用户进行交互,例如数据查询、实时状态查询等,则必须使用动态,Web,技术,可以选择这两种服务器之一来实现。其中,Boa,开放源代码、性能高,运行所需空间仅为,140KB,左右,对,CGI,的支持效果最佳。因此,在很多情况下选择,Boa,作为,ARM-Linux,系统的,Web,服务器。,9.1 Linux,环境下,Web,服务器,9.1.1 CGI,通用网关接口技术,CGI,(,Common Gate Interface,)通用网关接口,是一个连接外部应用程序到服务器的标准。一个简单的静态,HTML,文档是没有交互后台程序,而,CGI,程序则可以实时执行并输出动态信息。,CGI,是实现,Web,页面技术的关键所在,其定义是,Web,服务器与外部应用程序之间通信的标准接口。与专用编程接口相比具有以下优点:,独立于服务器体系结构和编程语言。编程者可以自由选择适合于特定编程任务的语言。,提供完整的进程隔离机制。,CGI,程序独立于,Web,服务器,运行在自己的进程地址空间,只与服务器交换接口信息,从而保证了服务器免受出错,CGI,进程的影响和用户的有意试探,提高了安全性和稳定性。,9.1 Linux,环境下,Web,服务器,CGI,主要功能是在,Web,环境下,将,WWW,与,Web,数据库集成在一起,顺利地实现了动态,Web,页面查询。从用户端浏览器传递一些指令或参数给,Web,服务器,,CGI,脚本通过标准输入,STDIN,获得输入信息,最后使用,STDOUT,输出,HTML,形式的结果文件,经,Web,服务器送回浏览器显示给用户。由于用户能传递不同的参数给,CGI,脚本,所以,CGI,技术使得浏览器和服务器之间具有很强交互性。,9.1 Linux,环境下,Web,服务器,9.1.2,eb,动态服务的流程,目前实现动态,Web,页面有多种技术可供选择,,CGI,、,ASP,、,PHP,等技术在高端平台上都能很好地实现用户所需的功能。但在嵌入式,Linux,环境下实现动态网页,目前只能采用,CGI,。,使用,CGI,需要一个输入界面,一般就是一个包含了表单的页面,FORM,。,FORM,在,CGI,中是最常被使用的输入界面,它由一组标签所组成,目前的标准中,,FORM,的标签可分为三大类:,INPUT,、,SELECT,以及,TEXTAREA,。在设置了一系列有关的标签后,每个,FORM,通常需要一个,SUBMIT,按钮用来发送表单内容。,当用户在客户端按下,FORM,上的,SUBMIT,按钮,浏览器,(Browser),将客户端输入的参数传回服务器,服务器启动指定的程序并将封装的参数传入,后台程序依照传入的参数完成指定的工作。如果此时有需要传回结果的话,则程序会把结果传回给服务器并发送到浏览器。,9.2,基于,thttpd,动态服务器的实现过程,.,下载服务器软件,下载地址:,http:/ home#tar zxvf thttpd-2.25b.tar.gz,rootlocalhost home#cd thttpd-2.25b,rootlocalhost thttpd-2.25b#./configure,rootlocalhost thttpd-2.25b#vim Makefile,修改内容,:,(1),主要把,”,CC=gcc,”,修改为,”,CC=arm-linux-gcc,”,在此交叉编译器的版本为,2.95.3,。,9.2,基于,thttpd,动态服务器的实现过程,(2),把,”,LDFLAGS=,”,设置为,”,LDFLAGS=-static,”,,表示指定静态链接二进制文件,假如你的开发板上的文件系统是,jffs2,文件系统,那建议此项不要设置了。因为,设置了此项后,编译出来的可执行文件比较大。当把可执行文件从宿主机拷贝到开发板时,可能会提示,”,cp:Write Error:No space left on device,”,。因为采用的是,jffs2,文件系统,是日志文件系统,拷贝文件不能超过文件系统的容量,使用,df-h,可以查看容量的大小。,rootlocalhost thttpd-2.25b#make,rootlocalhost thttpd-2.25b#du thttpd,104thttpd,9.2,基于,thttpd,动态服务器的实现过程,.,修改配置文件权限,rootlocalhost thttpd-2.25b#chmod+777 contrib/redhat-rpm/thttpd.conf,.,设置配置文件,thttpd.conf,参数,rootlocalhost thttpd-2.25b#vim contrib/redhat-rpm/thttpd.conf,内容如下,:,dir=/etc/thttpd/html#,指明,webserver,存放网页的根目录路径,chroot,user=root#default=nobody#,以,root,身份运行,thttpd,logfile=/etc/thttpd/log/thttpd.log#,日志文件路径,pidfile=/etc/thttpd/run/thttpd.pid#pid,文件路径,9.2,基于,thttpd,动态服务器的实现过程,.,在开发板端启动,eb,服务,在开发板上操作如下,:,#mount 192.168.2.181:/home/mnt,#cd/mnt/thttpd-2.25b,/mnt/thttpd-2.25b#cp thttpd/bin/,/mnt/thttpd-2.25b#cp contrib/redhat-rpm/thttpd.conf/etc/,/mnt/thttpd-2.25b#mkdir-p/etc/thttpd/html,/mnt/thttpd-2.25b#mkdir/etc/thttpd/log,/mnt/thttpd-2.25b#mkdir/etc/thttpd/run,/mnt/thttpd-2.25b#cp./index_1.html/etc/thttpd/html/,/mnt/thttpd-2.25b#cp./index_2.html/etc/thttpd/html/,/mnt/thttpd-2.25b#thttpd-C/etc/thttpd.conf,此时,服务已经启动,可以在其他,PC,机上,打开浏览器,并输入,http:/192.168.2.120,会弹出如下图所示,:,9.2,基于,thttpd,动态服务器的实现过程,在上图中,点击,index_1.html,和,index_2.html,分别显示如下,:,9.2,基于,thttpd,动态服务器的实现过程,假如要支持,CGI,那么,thttp.conf,的配置文件修改如下,:,dir=/etc/thttpd/html#,指明,webserver,存放网页的根目录路径,#chroot#,屏蔽,chroot,是为了运行动态编译的,CGI,user=root#default=nobody#,以,root,身份运行,thttpd,logfile=/etc/thttpd/log/thttpd.log#,日志文件路径,pidfile=/etc/thttpd/run/thttpd.pid#pid,文件路径,cgipat=/cgi-bin/*,声明,CGI,程序的目录,是以,dir,为根目录的路径,9.3 Linux,环境下基于,Boa,的动态服务器实现,9.3.1,安装与配置,boa,用,Boa,来实现动态,Web,服务器的方法较为复杂,主要通过,boa.conf,和,mime.types,进行,具体过程如下:,.,下载服务器软件,下载地址:,http:/www.boa.org/boa-0.94.13.tar.gz,.,安装,Boa,(1)#tar xvzf boa-0.94.13.tar.gz,(2)#cd boa-0.94.13/src,(3)#./configure,9.3 Linux,环境下基于,Boa,的动态服务器实现,.,生成,Makefile,文件,(1)#vim Makefile,修改,Makefile,文件,找到,CC=gcc,,将其改成,CC=arm-linux-gcc(,注,:,此为交叉编译器,2.95.3),,再找到,CPP=gcc-E,,将其改成,CPP=arm-linux-gcc-E,,并保存退出。,(2)#make,编译生成可执行文件,.,此时的,boa,大小为,240K,左右,(3)#arm-linux-strip boa,去除调试信息,减小体积,此时的,boa,大小为,60K,左右,.,修改配置文件,boa.conf,rootlocalhost boa-0.94.13#vim boa.conf,配置内容如下:,(1)#,监听的端口号,缺省都是,80,,一般无需修改,Port 80,9.3 Linux,环境下基于,Boa,的动态服务器实现,(2)#bind,调用的,IP,地址,一般注释掉,表明绑定到,INADDR_ANY,,通配于服务器的所有,IP,地址,(3)#Listen 192.68.0.5,(4)#,作为哪个用户运行,即他拥有该用户的权限,一般都是,nobody,,需要,/etc/passwd,中有,nobody,用户,User nobody,(5)#,作为哪个用户组运行,即他拥有该用户组的权限,一般都是,nogroup,,需要在,/etc/group,文件中有,nogroup,组,Group nogroup,(6)#,当服务器发生问题时发送报警的,email,地址,目前未用,注释掉,#ServerAdmin rootlocalhost,9.3 Linux,环境下基于,Boa,的动态服务器实现,(7)#,错误日志文件。如果没有以,/,开始,则表示从服务器的根路径开始。如果不必错误日志,则用,#/dev/null,。在下面设置时,注意一定要建立,/var/log/boa,目录,ErrorLog/var/log/boa/error_log,#,访问日志文件。如果没有以,/,开始,则表示从服务器的根路径开始。如果不必错误日志,则用,#/dev/null,