嵌入式WEB服务器boa的实现课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

湖北汽车工业学院
Hubei Automotive Industrise Institute
课程设计说明书
课程名称
设计题目
班号专业学号
学生姓名
指导教师(签字)
起至日期年月日——年月日
目录
一目的与要求 (1)
1.1课程设计的目的 (1)
1.2课程设计的要求 (1)
二课程设计的内容 (1)
2.1课程设计的内容 (1)
2.2原理和说明 (2)
2.2.1 boa简介 (3)
2.2.2 cgi简介 (4)
2.3 课程设计的功能分析 (4)
三总体设计方案 (5)
3.1系统运行环境 (5)
3.2选用工具 (5)
3.3工作原理图 (5)
3.4具体设计过程 (5)
四调试与测试 (10)
五课设总结与体会 (11)
六参考文献 (12)
一目的与要求
1.1课程设计的目的
开设本课程设计的目的是,通过本课程设计,提高学生的分析问题、解决问题的能力,巩固嵌入式系统的基本理论知识,进一步了解和掌握课程中所讲授的概念,方法。

同时通过本课程设计,全面综合应用所学过的基础知识,建立一个完整的嵌入式系统的开发过程的概念,并掌握其中的主要原理和方法。

(1)提高分析问题、解决问题的能力,进一步巩固嵌入式系统中的基本原理与方法。

(2)熟悉Linux数据库编程,可以进行嵌入式web服务器的建立与程序设计。

1.2课程设计的要求
本次课设的要求如下:
1、理解Linux下的网络编程的实际意义。

2、独立进行方案的制定,系统结构设计要合理。

3、在程序开发时,则必须清楚主要实现函数的目的和作用,需要在程序书写时说明做适当的注释。

要理解每个函数的具体意义和适用范围,在写课设报告时,必须要将主要函数的功能和参数做详细的说明。

4、通过网络来检测该系统的稳定性和正确性。

二课程设计的内容
2.1 整个系统要完成的基本内容大致如下:
1、熟悉开发环境的网络特性,熟悉Linux下的网络编程;
2、通过CGI实现一个嵌入式web服务器;
3、阅读WEB服务器HTTP协议的基本内容,学会几个重要的网络函数的使用
方法;
4、在PC计算机上使用浏览器测试嵌入式WEB服务器的功能;
5、服务器可支持动态配置,可解释静态网页和动态网页;
在实现整个系统的时候,必须有1、2、3、4及5中的这些基本内容,可以根据兴趣所在增加其他的内容。

2.2课程设计的原理和说明
随着Internet技术的兴起,在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,非常方便实用。

首先需要在嵌入式设备上成功移植支持脚本或CGI功能的Web服务器,然后才能进行应用程序的开发。

由于嵌入式设备资源一般都比较有限,并且也不需要能同时处理很多用户的请求,因此不会使用Linux下最常用的如Apache 等服务器,而需要使用一些专门为嵌入式设备设计的Web服务器,这些Web服务器在存贮空间和运行时所占有的内存空间上都会非常适合于嵌入式应用场合。

嵌入式WEB服务器常见的有lighttpd、shttpd、thttpd、boa、mathopd、minihttpd、appweb和goahead。

典型的嵌入式Web服务器有Boa ()和thttpd (/software/thttpd/)等,它们和Apache等高性能的Web 服务器主要的区别在于它们一般是单进程服务器,只有在完成一个用户请求后才能响应另一个用户的请求,而无法并发响应,但这在嵌入式设备的应用场合里已经足够了。

嵌入式web服务器移植配置好后,接着进行GCI程序设计。

CGI(Common Gateway Interface)是外部应用扩展应用程序与WWW服务器交互的一个标准接口。

按照CGI标准编写的外部扩展应用程序可以处理客户端浏览器输入的数据,从而完成客户端与服务器的交互操作。

而CGI规范就定义了Web服务器如何向扩展应用程序发送消息,在收到扩展应用程序的信息后又如何进行处理等内容。

通过CGI可以提供许多静态的HTML网页无法实现的功能,比如搜索引擎、基于Web 的数据库访问等等。

HTTP协议是WWW的基础,它基于客户/服务器模型,一个服务器可以为分布在网络中处的客户提供服务;它是建立在TCP/IP协议之上的“无连接”协议,每次连接只处理一个请求。

在服务器上,运行产着一个守护进程对端口进行监听,等待来自客户的请求。

当一个请求到来时,将创建一个子进程为用户的连接服务。

根据请求的不同,服务器返回HTML文件或者通过CGI调用外部应用程序,返回处理结果。

服务器通过CGI与外部程序和脚本之间进行交互,根据客户端在进行请求时所采取的方法,服务器会收集客户所提供的信息,并将该部分信息发送给指定的CGI扩展程序。

CGI扩展程序进行信息处理并将结果返回服务器,然后服务器对信息进行分析,并将结果发送回客户端。

外部CGI程序与WWW服务器进行通信、传递有关参数和处理结果是通过环境变量、命令行参数和标准输入来进行的。

服务器提供了客户端(浏览器)与CGI 扩展程序之间的信息交换的通道。

CGI的标准输入是服务器的标准输出,而CGI 的标准输出是服务器的标准输入。

客户的请求通过服务器的标准输出传送给CGI 的标准输入,CGI对信息进行处理后,将结果发送到它的标准输入,然后由服务器将处理结果发送给客户端。

2.2.1 boa简介
Boa 的功能实现:嵌入式 Web 服务器 Boa 和普通 Web 服务器一样, 能够完成接收客户端请求、分析请求、响应请求、向客户端返回请求结果等任务。

它的工作过程主要包括:
(1) 完成 Web 服务器的初始化工作, 如创建环境变量、创建 TCP 套接字、绑定端口、开始侦听、进入循环结构, 以及等待接收客户浏览器的连接请求;
(2) 当有客户端连接请求时,Web 服务器负责接收客户端请求, 并保存相关请求信息;
(3) 在接收到客户端的连接请求之后,分析客户端请求, 解析出请求的方法、URL 目标、可选的查询信息及表单信息, 同时根据请求做出相应的处理;
(4)Web 服务器完成相应处理后, 向客户端浏览器发送响应信息, 关闭与客户机的TCP 连接。

嵌入式 Web 服务器 Boa 根据请求方法的不同,做出不同的响应。

如果请求方法为HEAD,则直接向浏览器返回响应首部;如果请求方法为 GET,则在返回响应首部的同时,将客户端请求的 URL 目标文件从服务器上读出,并且发送给客户端浏览器;如果请求方法为 POST,则将客户发送过来的表单信息传送给相应的 CGI 程序,作为 CGI 的参数来执行 CGI 程序,并将执行结果发送给客户端浏览器。

Boa 的功能实现也是通过建立连接、绑定端口、进行侦听、请求处理等来实现的。

2.2.2 cgi简介
概念:CGI(Common Gateway Interface)通用网关接口是HTTP服务器与你的或其它机器上的程序进行交互的一种工具,其程序须运行在网络服务器上。

功能:绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。

CGI程序使网页具有交互功能,其工作原理图如下
2.3课程设计所设计的的功能
经过近两个星期的课程设计,通过查找有关资料,进行课设的基本要求和需求分析另外还有程序编写调试,所实现的基本功能如下:
1、可以通过PC机使用浏览器测试嵌入式WEB服务器的功能;
2、服务器可支持动态配置,可解释静态网页和动态网页;
三课程设计的总体方案
3.1系统运行环境
Linux vi 编辑环境 UP-TECHPXA270-S嵌入式实验平台
3.2选用工具
PC机windows平台+虚拟机+REDHAT LINUX 9.0+boa+ARM-LINUX开发环境
3.3 工作原理图
试验的工作原理图如下:
3.4 试验的具体过程
首先在redhat9.0 linux上进行web服务器的开发,当编译运行成功后将其全部的配置文件和程序移到开发板上并对配置文件做相应的修改进行交叉编译,具体实现过程如下:
第一步在RedHat9.0 linux上配置和使用BOA服务器
1、解压Boa源码
解压:# tar zxvf boa-0.94.13.tar.gz
2、编译
# ./configure
# make
3、配置
# mkdir /etc/boa
# cp / boa-0.94.13/boa.conf /etc/boa/
修改boa.conf:
(1)Group的修改:修改 Group nogroup 为Group 0
由于在/etc/group文件中没有nogroup组,所以设成0。

另外在/etc/passwd 中有nobody用户,所以User nobody不用修改。

(2)scriptAlias的修改:修改 scriptAlias /cgi-bin//usr/lib/cgi-bin/
为 scriptAlias /cgi-bin/ /var/www/cgi-bin/
(3)ServerName的设置:修改 #ServerName .here/为ServerName .here/
注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory”,所以必须打
开。

其它默认设置即可。

# mkdir /var/log (注:redhat上已经存在,此步骤省略)
# mkdir /var/log/boa(创建日志文件目录)
# mkdir /var/www (创建HTML文档的主目录)(注:redhat上已经存在,此步骤省略)
可以将主机 /usr/share/doc/HTML/目录下的index.html文件和img目录复制到/var/www目录下;
(注:将主机/etc目录下的mime.types文件放置到制作的根文件夹的/etc下;redhat上已经存在,此步骤省略)
最后将boa-0.94.13下的boa可执行文件拷贝到/usr/local/bin下面。

(4)执行
运行boa命令
#boa
在浏览器中输入本机的ip地址。

这时浏览器中就会出现/usr/share/doc/HTML/index.html的内容了。

第二步,当在redhat9.0上配置好web服务器boa后就可以编写相应的代码进行服务器建立的程序设计了。

(1)主页html源代码如下:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html;charset=gb2312">
<meta name="Form" content="Feng">
<meta name="Input" content="Feng">
<title>输入</title>
</head>
<body text="#000000" bgcolor="#FFFFFF"
link="0000EF"vvlink="#51188E" alink="#EF0000">
<h1>输入两个数</h1>
<form action="/cgi-bin/multi" method="get">
<p>
<input type="text" name="m" size="5">
*
<input type="text" name="n" size="5">
</p>
<input type="submit" value="计算">
</form>
</body>
</html>
(2)本次利用c语言代码,编译生成cgi文件c语言源代码如下:#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char *date;
long m,n;
printf("Content-Type:text/html;charset=gb2312\n\n");
printf("Hello World!");
/*printf("<TITEL>乘法结果</TETEL>");
printf("<H3>乘法结果</H3>");
date = getenv("QUERY_STRING");
if (date == NULL)
{
printf("<P>未输入参数或参数输入错误或数据传输出错!");
} else if(sscanf(date,"%c%c",&m,&n) != 2)
{
printf("<P>输入参数错误或参数输入不全(输入参数必需为数字类型)");
} else
{
printf("The %ld 乘以 %ld 的值为: %ld", m,n,m * n);
}*/
return 0;
}
第三步,将目标文件夹挂载到开发板上。

设置开发板的地址
Ifconfig eth0 192.168.1.5
挂载
Mnt –t nfs –o nolock 192.168.1.105:/mnt /mnt/nfs(这是已经把做好的全部的相关文件放在redhat9.0 的/mnt中)
通过ping redhat9.0挂载目录的地址(ping 192.168.1.234)若ping通则挂载成功。

第四步,进行交叉编译
以上通过编译生成的文件都是在redhat9.0环境下运行的,若要使之能够在开发板上运行则必须通过arm-linux-gcc编译才可以,同时web服务器boa的配置文件也必须做出相应的改变,具体操作过程如下:
(1)将boa-0.94-13.tar.gz解压,并将解压的文件夹移到/mnt目录下(2)进入src目录运行 configure 命令$ ./configure生成makefile文件,再将
CC=gcc改成CC=arm-linux-gcc
CPP=gcc-E改成CPP=arm-linux-gcc-E
(3)在mnt下建立文件夹boa 将boa.conf放在该文件夹下,对boa.conf 做出修改的说明如下:
Mnt/nfs/var/log/boa/error_log:表示将错误信息记录到指定文件中
Mnt/nfs/dev/null:表示远程请求信息记录到指定文件中
Mnt/nfs/var/www:表示html文件存放的目录
Mnt/nfs/var/www/cgi-bin:表示CGI程序存放执行的地址
(4)这是就可以进行交叉编译了
Arm-linux-gcc hello.c –o hello.cgi
(4)这时若已经将各种相关的网络配置好后,可以在试验中配置好的局域网中任意一台主机中输入地址192.168.1.5访问试验中设置的主页,
输入数据后就可返回一个网页。

四测试与调试
在ie浏览器上输入地址http://192.168.1.5显示一下页面
输入1和2将会显示一下页面
五课设总结与体会
通过本次课设我学到了很多嵌入式web服务器的相关知识。

在看到这些课设题目的时候我几乎毫无头绪,不过通过几天时间在网上查阅资料,是我对嵌入式web服务器的设计有了一个大体的思路,对其中涉及到的知识也进行了学习和模仿。

在之后的课程的设计制作过程中,仍然遇到了各种各样的问题,如试验环境的配置,交叉编译后无法再开发板上运行,调试思路正确但是没有能够进行找到合适的方法进行进一步的实验,设计中对于程序的编写以及目录结构的认知上存在偏差,在配置boa.conf文件中对许多相关设置信息的了解不够充分等等。

其主要原因还是基础功不扎实,把握系统的能力不足,这为我们以后的学习和工作提了一个醒。

在问题的解决过程中,也提高了我的动手动脑能力,学到了许多在书本上学不到的知识,而且深刻的体会到了网络在学习中的作用。

在具体的设计当中解决了诸如 boa 服务器的搭建和C 程序的修改等。

两周的课程设计结束了,我学会了很多东西。

使我理解了Linux下的网络编程的实际意义;学会了独立进行方案的制定,进行系统结构设计;明白了在程序开发时,实现函数的目的和作用,以及每个函数的具体意义和适用范围;掌握了通过网络来检测该系统的稳定性和正确性的方法。

不仅如此,通过理论和实践的结合我学到了很多有价值的东西,使我明白了有些事情只有真正自己亲手做了才明白它的困难,也只有亲自动手才能学到更多的经验。

课程设计也让我明白了:理论知识固然重要,但当遇到实际问题时,只有认真思考,利用身边的一切可利用的资源如网络、老师等边学变做,才是解决问题的关键,才会进一步提高自己的理论知识和动手能力。

六参考文现
1./
2./
3.石秀明,魏洪兴主编.嵌入式系统原理与应用——基于xscale与linux.北京航空航天大学
出版社,2007.。

相关文档
最新文档