7月13日
2010年07月13日
1. 引言
1.1 项目绪论
随着计算机技术的发展,嵌入式系统已成为计算机领域的一个重要组成部分。以A R M 体系结构设计的微处理具有高性能、低功耗和低成本的特点,它广泛应用于嵌入式系统设计领域,是目前最广泛的3 2位微处理器。而网络技术的发展,使得B/S(客户端/服务器)应用方式已成为一种潮流。它的基础是客户端要有一个浏览器程序,服务器端要有一个对应的W e b服务器。
一般网站都采用大型的通用W e b服务器,但对于一般的管理信息系统或中小型应用系统,所需的功能比较简单,如仍采用通用W e b服务器,无疑是资源的浪费。解决方法是使用功能相对简单、体积更小、消耗资源更少的简单W eb服务器,于是嵌入式Web服务器就应运而生了。 本阶段在系统需求分析的基础上,主要实现并完成软硬件结构设计,linux内核编译移植,Linux-GCC交叉编译环境的编译和移植,GDB交叉调试环境的编译和移植,bootloader(Vivi)编译和移植,minicom设置并和PC机建立网络,Boa嵌入式服务器的编译和移植,发布网页并在客户端接收。在以下的文档中,将对各个部分进行详细介绍并描述实现细节。
1.2 项目总体结构 2. 嵌入式网络服务器及其使用 6.1 web服务器的体系结构
嵌入式WEB服务器是基于TCP/IP口协议栈实现的,需要实现TCP,UDP、HTTP等协议。客户机在网络中任一点接入都可以浏览WEB页面并对系统进行管理和控制。服务器端对客户的请求进行解析,生成相应的静态页面或动态页面返还给客户端。如果需要进一步控制,服务器端将调用相关的应用程序进行必要的处理。
6.2 Boa的设计 Boa是一个单任务的http服务器,源码开放,性能高。Boa最重要的设计目标是速度和安全性。Boa与传统的Web服务器不同,不对每个进入服务器的链接开辟进程,更不为处理多路复用而开辟进程。Boa对所有活动的HTTP链接在内部进行处理,而只为每个CGI链接启动新的进程。测试表明Boa服务器的速度比常规的Web服务器要快,比Apache服务器快两倍以上,所以Boa应用于嵌入式系统是很有优势和发展前景的。如图为Boa的基本运行流程图Boa的开发和测试目前主要基于GNU/LINUX/i386。它的源码跟其他嵌入式Web服务器的代码相比更简明,因此它很容易被移植到具有UNIX风格的平台上。Boa源码开发,性能优秀,特别适合应用于嵌入式系统中。
Boa的源程序是从boa.c中的main()主函数开始执行。在该源程序中,先是对该Web服务器进行配置:为了在用户访问Web服务器能确定根目录的位置,首先需要指定服务器的根目录路径服务器,fixup_server_root()函数就是用来设置该服务器的根目录;接着read_config_files()函数对其他服务器所需的参数进行配置,比如服务器端口server_port,服务器名server_name,文件根目录document_root等,其他大部分参数要专门从boa.conf文件中读取;接下来是为CGI脚本设置环境变量。这些配置都完成并正确之后,就为boa建立套接字(socket),使用TCP/IP协议,创建了一个特别适合嵌入式系统的Web服务器。如图为本ARM嵌入式系统上Boa Web服务器的移植流程。 建立Boa Web服务器包括如下步骤: 1)下载boa源代码。Boa Web服务器的源代码可以从http://www.boa.org下载最新的版本,本实验现在文件为:boa-0.94.14rc21.tar.gz。
2)安装并编译boa源代码。 将源代码复制到根目录下,然后安装源代码:
cd/
Gunzip/boa.tar.gz Mdir examples此时根目录下会生成boa.tar;再将boa.tar文件mount到新建目录eamples中; Mount -o loop boa.tar.examples/ cd examples cd boa/src 开始编译:
CC=/opt/host/armv41/bin/armv41-unknown-linux-gcc make
在boa/src目录下将生成boa文件,该文件即为boa web服务器执行文件。 3)配置boa web服务器
boa启动时将加载一个配置文件boa.conf,在boa程序运行前,必须首先编辑该文件,并将其放置于src/defines.h文件中server_root宏定义的缺省目录,或者在启动Boa时使用参数"-c"指定boa.conf的加载目录。 在boa.conf文件中需要进行一些配置,下面做简要介绍: port:该参数为boa服务器运行端口,缺省的端口为80.
4)在完成Web服务器的编写后,通过JTAG仿真器和烧写工具SJF2410完成烧写任务,将Linux影像文件和根文件等烧写到Flash中。设宿主机的地址为192.168.0.111,当打开一个浏览器并键入http://192.168.0.111时,目标板上的Web服务器收到浏览器的请求后,将目录下的文件传送给浏览器并在浏览器中显示出来,即可访问到做的网页index.html了,同时在目标板上的服务器会显示响应的打印信息。 接下来就是开发应用软件,通过编写CGI(Common Gateway)外部扩展程序,实现动态web技术。用C语言编写的CGI程序编译成二进制文件,放到/cgi-bin/目录下,CGI程序才能被正确地执行。
3. CGI的设计
CGI全称是"公共网关接口"(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行"交谈"的一种工具,其程序须运行在网络服务器上。在物理上,CGI是一段程序,它运行在Server上,提供同客户端 Html页面的接口。这样说大概还不好理解。那么我们看一个实际例子: 现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如名字之类的东西。接着用户按一下"留言"(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到"留言结束"的字样。整个过程结束。 7.1 CGI的工作流程 CGI工作的主要流程是:1.一个用户请求激活一个CGI应用程序;2.CGI应用程序将交互主页里用户输入信息提取出来;3.将用户输入的信息传给服务器主机应用程序(如数据库查询〕;4.将服务器处理结果通过HTML文件返回给用户;5.CGI进程结束。 7.2 HTML语言与HTML表单 HTML(超文本标记语言)是用来创建与平台无关的超文本文档的简单标记语言,踟[MI,能够用来标记超文本消息、邮件、文档、超媒体、菜单选项、数据库查询结果以及有内嵌图形的简单结构文档。HTML为文档编码,包括要显示的文本、文本如何格式化的信息、要显示的图片名字(不是图片自身)、以及其他重要信息。连接到一个网页时,Web浏览器(如IE)就在内存中按照HTML的结构"构造"该网页,然后在屏幕上显示组装好的网页。 通常浏览器只能通过HTML请求从服务器获取静态网页进行浏览,如果用户需要通过浏览器提交一些数据给服务器进行处理并返回结果以达到交互的效果则要用到HTML表单。HTML表单是用户通过浏览器提交数据为主要输入手段,它由普通文字、标记和一些称为"控件"的特殊元素(如复选框、单选按钮、菜单等)以及控件上的标签组成。用户通过填写或选择控件内容来输入数据,最后提交给服务器进行处理。 下面是一个表单的示例:
FORM的一些参数解释如下:
1. action指定了调用的CGI脚本
2. methed定义了表单被提交的方法。methed有两种,GET和POST。GET是CGI默认的传输方法,用户输入的数据会附在URL之后传给Web服务器。POST方法传递数据时,服务器端CGI处理程序会从SID躺中接收传输入数据。
3. reset的外观和submit相似,不过一旦用户按下它,这个form中的所有输入值都会被清除,或者是回到初始值。 7.3 CGI的工作机制
上一节讲到浏览器提交数据需要震到HTML表单。那么服务器端是如何对这些数据进行识别和处理呢,这就需要用到CGI,通过CGI可以宪成浏览器与WEB服务器之间的信息交互。 CGI(common gateway interface)WEB 服务器和运行在服务器端的外部程序之间的一个接口规范,按照这个规范编写并运行的外部程序就叫做CGI程序,其目的是实现Web服务器与客户端浏览器之间的动态交互。CGI程序通过由Web服务器来调用实现和WEB浏览器之间的交互,如下图所示,Web服务器将WEB浏览器发送来的信息,传送给CGI程序,由CGI程序进行处理,CGI程序在处理完后将响应结果再回送给Web服务器,然后弭由Web服务器发送到Web浏览器。如果需要调用其他外部应用如数据库服务等,均由CGl程序去与外部应用进行交互. 浏览器与Web服务器的具体交互过程如下: (1)客户机使用TCP/IP协议,与服务器建立连接,发送URL请求;
(2>Web服务器到相应的目录中调用CGI程序,使用客户机传递的参数作为CGI程序的参数,而CGI程序调用相应的外部程序完成操作;
(3)CGI程序以能被识别的格式返回处理结果给HTTP服务器;
(4>Web服务器将数据返回客户机处理,显示CGI执行结果。
CGI程序与Web服务器进行通信、传递有关参数和处理结果是通过命令行参数、标准输出、环境变量来实现的。如下图所示,CGI的标准输入(STDIN)是服务器的标准输出(STDOUT),而CGI的标准输出则是服务器的标准输入。客户的请求信息通过服务器的标准输出传送绘CGI的标准输入,CGI对信息进行处理后,将结果发送到它的标准输出,也就是服务器的标准输入,然后由服务器将处理结果发送给客户端。CGI程序可以通过环境变量获取Web服务器传递过来的用户数据,常见的环境变量有:
1. SERVER-NAME:运行CGI序为机器名或IP地址。
2. SERVER-INTERFACE:WWW服务器的类型,如:CERN型或NCSA型。
3. SERVER-PROTOCOL:通信协议,应当是HTTP/1.0。
4. SERVER-PORT:TCP端口,一般说来web端口是80。
5. HTTP-ACCEPT:HTTP定义的浏览器能够接受的数据类型。
6. HTTP-REFERER: 发送表单的文件URL。(并非所有的浏览器都传送这一变量)
7. HTTP-USER-AGENT:发送表单的浏览器的有关信息。
8. GETWAY-INTERFACE:CGI程序的版本,在UNIX下为 CGI/1.1。
9. PATH-TRANSLATED: PATH-INFO中包含的实际路径名。
10. PATH-INFO:浏览器用GET方式发送数据时的附加路径。
11. SCRIPT-NAME: CGI程序的路径名。
12. QUERY-STRING:表单输入的数据,URL中间号后的内容。
13. REMOTE-HOST:发送程序的主机名,不能确定该值。
14. REMOTE-ADDR:发送程序的机器的IP地址。
15. REMOTE-USER:发送程序的人名。
16. CONTENT-TYPE:POST发送,一般为applioation/xwww-form-urlencoded。
17. CONTENT-LENGTH:POST方法输入的数据的字节数。 7.4 CGI程序的设计 CGI的输出包括多个头部信息和一个数据体,两者之间用一个空行隔开。其中必须包含一个头部信息,如果带有数据体,则要求有Content-type,即MIME类型。MIME为Multipurpose Internet Mial Extension protocol的缩写,即多用途网际邮件扩充协议,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。当它被HTTP协议支持之后,它的意义就更为重要了。它使得HTTP不仅能传输普通的文本,而且能传输声音、视频等数据。MIME类型由两部分组成,前面是数据的大类别,后面定义具体的种类。常见的MIME类型如下表所示: CGI程序一般由以下三部分构成:
(1)数据解码部分:通过表单输入、由浏览器传送给服务器的数据都是经过URL编码的,必须进行解码。如果不需要处理表单输入,则该部分省略。
(2)数据头部分:必须包含这一部分作为第一个输出行,该行后必须有一空格行。该行可以是下列三种之一:
ü 数据类型,如:Content-type:text/html
ü 地址类型(Location),如:location://www.kernel.org
ü 状态类型(Status),如:status:200 OK
(3)CGI程序主体部分。 对通过表单输入的数据进行处理,并输出到标准输出。
综上所述,CGI程序的功能是获取Web服务器传送的数据,解码处理后,根据用户的要求进行其它的操作。一般是生成动态Web页面或者调用其它的应用服务。
从原理上说,CGI程序设计可以采用任何读写标准输入,输出的语言,比如C/C++、Perl、Java等。但在嵌入式系统中,C语言是一个首选的工具语言。
嵌入式WEB服务器的体系结构
嵌入式WEB服务器应根据需要选择合适的硬件平台。硬件平台选择的标准主要有:①有网络接口,支持TCP/IP协议栈。②便于实现控制。③升级和维护方便。 在8位/16位单片机上也可以实现嵌入式WEB服务器,优点是成本低廉,但需要添加网络接口电路,而且对嵌入式操作系统的支持有限,不便予系统功能的扩充。32位微处理器目前技术已经成熟,能支持更多的嵌入式实时操作系统应用程序开发也非常方便。可根据需要选择合适嵌入式硬件平台。
4. 结语
嵌入式系统是信息产业走向2 1世纪知识经济时代的最重要的经济增长点之一,这是一个不可垄断的工业,对中国的信息产业来说充满了机遇和挑战。以信息家电为中心和嵌入式Internet为潮流的嵌入式系统正得到蓬勃的发展。本论文就是在这个潮流下,研究了嵌入式Linux系统,包括硬件部分、嵌入式操作系统Linux的启动和嵌入式W e b服务器的实现。硬件部分采用高效,低功耗的A R M 处理器,它的开发研究也是目前一个非常活跃的研究领域。ARM 和Linux的结合注定了我们的嵌入式系统是很有优势的。
基于arm/Linux平台构建了嵌入式Web服务器,经测试运行情况良好,系统可以提供基本的Web服务,实现用户对嵌入式服务器信息的浏览,实现服务器与登陆用户进行动态交互,为具体的网络信息采集与控制方面的应用奠定了基础。
参考资料: 编译过程:
编译boa,修改boa\src下面的Makefile,cc=arm-linux-gcc,cpp交叉编译环境,boa.conf文件设置配置文件的目录和位置信息
自己编写cgi程序,供boa调用
写boa配置文件,目录必不可少
cgi-bin下放cgi程序
html放html页面
log可为空,但目录必须存在
mime.types 类型
文件准备好,打包my_boa,下载到板子,还要下载
libnss_compat.so.2
libnsl.so.1
/usr/local/arm/4.0.0 /arm lib到板子文件系统lib里面
然后拷贝boa,boa_indexer ,cgi程序到相应位置。
2010年07月13日
1. 引言
1.1 项目绪论
随着计算机技术的发展,嵌入式系统已成为计算机领域的一个重要组成部分。以A R M 体系结构设计的微处理具有高性能、低功耗和低成本的特点,它广泛应用于嵌入式系统设计领域,是目前最广泛的3 2位微处理器。而网络技术的发展,使得B/S(客户端/服务器)应用方式已成为一种潮流。它的基础是客户端要有一个浏览器程序,服务器端要有一个对应的W e b服务器。
一般网站都采用大型的通用W e b服务器,但对于一般的管理信息系统或中小型应用系统,所需的功能比较简单,如仍采用通用W e b服务器,无疑是资源的浪费。解决方法是使用功能相对简单、体积更小、消耗资源更少的简单W eb服务器,于是嵌入式Web服务器就应运而生了。 本阶段在系统需求分析的基础上,主要实现并完成软硬件结构设计,linux内核编译移植,Linux-GCC交叉编译环境的编译和移植,GDB交叉调试环境的编译和移植,bootloader(Vivi)编译和移植,minicom设置并和PC机建立网络,Boa嵌入式服务器的编译和移植,发布网页并在客户端接收。在以下的文档中,将对各个部分进行详细介绍并描述实现细节。
1.2 项目总体结构 2. 嵌入式网络服务器及其使用 6.1 web服务器的体系结构
嵌入式WEB服务器是基于TCP/IP口协议栈实现的,需要实现TCP,UDP、HTTP等协议。客户机在网络中任一点接入都可以浏览WEB页面并对系统进行管理和控制。服务器端对客户的请求进行解析,生成相应的静态页面或动态页面返还给客户端。如果需要进一步控制,服务器端将调用相关的应用程序进行必要的处理。
6.2 Boa的设计 Boa是一个单任务的http服务器,源码开放,性能高。Boa最重要的设计目标是速度和安全性。Boa与传统的Web服务器不同,不对每个进入服务器的链接开辟进程,更不为处理多路复用而开辟进程。Boa对所有活动的HTTP链接在内部进行处理,而只为每个CGI链接启动新的进程。测试表明Boa服务器的速度比常规的Web服务器要快,比Apache服务器快两倍以上,所以Boa应用于嵌入式系统是很有优势和发展前景的。如图为Boa的基本运行流程图Boa的开发和测试目前主要基于GNU/LINUX/i386。它的源码跟其他嵌入式Web服务器的代码相比更简明,因此它很容易被移植到具有UNIX风格的平台上。Boa源码开发,性能优秀,特别适合应用于嵌入式系统中。
Boa的源程序是从boa.c中的main()主函数开始执行。在该源程序中,先是对该Web服务器进行配置:为了在用户访问Web服务器能确定根目录的位置,首先需要指定服务器的根目录路径服务器,fixup_server_root()函数就是用来设置该服务器的根目录;接着read_config_files()函数对其他服务器所需的参数进行配置,比如服务器端口server_port,服务器名server_name,文件根目录document_root等,其他大部分参数要专门从boa.conf文件中读取;接下来是为CGI脚本设置环境变量。这些配置都完成并正确之后,就为boa建立套接字(socket),使用TCP/IP协议,创建了一个特别适合嵌入式系统的Web服务器。如图为本ARM嵌入式系统上Boa Web服务器的移植流程。 建立Boa Web服务器包括如下步骤: 1)下载boa源代码。Boa Web服务器的源代码可以从http://www.boa.org下载最新的版本,本实验现在文件为:boa-0.94.14rc21.tar.gz。
2)安装并编译boa源代码。 将源代码复制到根目录下,然后安装源代码:
cd/
Gunzip/boa.tar.gz Mdir examples此时根目录下会生成boa.tar;再将boa.tar文件mount到新建目录eamples中; Mount -o loop boa.tar.examples/ cd examples cd boa/src 开始编译:
CC=/opt/host/armv41/bin/armv41-unknown-linux-gcc make
在boa/src目录下将生成boa文件,该文件即为boa web服务器执行文件。 3)配置boa web服务器
boa启动时将加载一个配置文件boa.conf,在boa程序运行前,必须首先编辑该文件,并将其放置于src/defines.h文件中server_root宏定义的缺省目录,或者在启动Boa时使用参数"-c"指定boa.conf的加载目录。 在boa.conf文件中需要进行一些配置,下面做简要介绍: port:该参数为boa服务器运行端口,缺省的端口为80.
4)在完成Web服务器的编写后,通过JTAG仿真器和烧写工具SJF2410完成烧写任务,将Linux影像文件和根文件等烧写到Flash中。设宿主机的地址为192.168.0.111,当打开一个浏览器并键入http://192.168.0.111时,目标板上的Web服务器收到浏览器的请求后,将目录下的文件传送给浏览器并在浏览器中显示出来,即可访问到做的网页index.html了,同时在目标板上的服务器会显示响应的打印信息。 接下来就是开发应用软件,通过编写CGI(Common Gateway)外部扩展程序,实现动态web技术。用C语言编写的CGI程序编译成二进制文件,放到/cgi-bin/目录下,CGI程序才能被正确地执行。
3. CGI的设计
CGI全称是"公共网关接口"(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行"交谈"的一种工具,其程序须运行在网络服务器上。在物理上,CGI是一段程序,它运行在Server上,提供同客户端 Html页面的接口。这样说大概还不好理解。那么我们看一个实际例子: 现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如名字之类的东西。接着用户按一下"留言"(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到"留言结束"的字样。整个过程结束。 7.1 CGI的工作流程 CGI工作的主要流程是:1.一个用户请求激活一个CGI应用程序;2.CGI应用程序将交互主页里用户输入信息提取出来;3.将用户输入的信息传给服务器主机应用程序(如数据库查询〕;4.将服务器处理结果通过HTML文件返回给用户;5.CGI进程结束。 7.2 HTML语言与HTML表单 HTML(超文本标记语言)是用来创建与平台无关的超文本文档的简单标记语言,踟[MI,能够用来标记超文本消息、邮件、文档、超媒体、菜单选项、数据库查询结果以及有内嵌图形的简单结构文档。HTML为文档编码,包括要显示的文本、文本如何格式化的信息、要显示的图片名字(不是图片自身)、以及其他重要信息。连接到一个网页时,Web浏览器(如IE)就在内存中按照HTML的结构"构造"该网页,然后在屏幕上显示组装好的网页。 通常浏览器只能通过HTML请求从服务器获取静态网页进行浏览,如果用户需要通过浏览器提交一些数据给服务器进行处理并返回结果以达到交互的效果则要用到HTML表单。HTML表单是用户通过浏览器提交数据为主要输入手段,它由普通文字、标记和一些称为"控件"的特殊元素(如复选框、单选按钮、菜单等)以及控件上的标签组成。用户通过填写或选择控件内容来输入数据,最后提交给服务器进行处理。 下面是一个表单的示例:
FORM的一些参数解释如下:
1. action指定了调用的CGI脚本
2. methed定义了表单被提交的方法。methed有两种,GET和POST。GET是CGI默认的传输方法,用户输入的数据会附在URL之后传给Web服务器。POST方法传递数据时,服务器端CGI处理程序会从SID躺中接收传输入数据。
3. reset的外观和submit相似,不过一旦用户按下它,这个form中的所有输入值都会被清除,或者是回到初始值。 7.3 CGI的工作机制
上一节讲到浏览器提交数据需要震到HTML表单。那么服务器端是如何对这些数据进行识别和处理呢,这就需要用到CGI,通过CGI可以宪成浏览器与WEB服务器之间的信息交互。 CGI(common gateway interface)WEB 服务器和运行在服务器端的外部程序之间的一个接口规范,按照这个规范编写并运行的外部程序就叫做CGI程序,其目的是实现Web服务器与客户端浏览器之间的动态交互。CGI程序通过由Web服务器来调用实现和WEB浏览器之间的交互,如下图所示,Web服务器将WEB浏览器发送来的信息,传送给CGI程序,由CGI程序进行处理,CGI程序在处理完后将响应结果再回送给Web服务器,然后弭由Web服务器发送到Web浏览器。如果需要调用其他外部应用如数据库服务等,均由CGl程序去与外部应用进行交互. 浏览器与Web服务器的具体交互过程如下: (1)客户机使用TCP/IP协议,与服务器建立连接,发送URL请求;
(2>Web服务器到相应的目录中调用CGI程序,使用客户机传递的参数作为CGI程序的参数,而CGI程序调用相应的外部程序完成操作;
(3)CGI程序以能被识别的格式返回处理结果给HTTP服务器;
(4>Web服务器将数据返回客户机处理,显示CGI执行结果。
CGI程序与Web服务器进行通信、传递有关参数和处理结果是通过命令行参数、标准输出、环境变量来实现的。如下图所示,CGI的标准输入(STDIN)是服务器的标准输出(STDOUT),而CGI的标准输出则是服务器的标准输入。客户的请求信息通过服务器的标准输出传送绘CGI的标准输入,CGI对信息进行处理后,将结果发送到它的标准输出,也就是服务器的标准输入,然后由服务器将处理结果发送给客户端。CGI程序可以通过环境变量获取Web服务器传递过来的用户数据,常见的环境变量有:
1. SERVER-NAME:运行CGI序为机器名或IP地址。
2. SERVER-INTERFACE:WWW服务器的类型,如:CERN型或NCSA型。
3. SERVER-PROTOCOL:通信协议,应当是HTTP/1.0。
4. SERVER-PORT:TCP端口,一般说来web端口是80。
5. HTTP-ACCEPT:HTTP定义的浏览器能够接受的数据类型。
6. HTTP-REFERER: 发送表单的文件URL。(并非所有的浏览器都传送这一变量)
7. HTTP-USER-AGENT:发送表单的浏览器的有关信息。
8. GETWAY-INTERFACE:CGI程序的版本,在UNIX下为 CGI/1.1。
9. PATH-TRANSLATED: PATH-INFO中包含的实际路径名。
10. PATH-INFO:浏览器用GET方式发送数据时的附加路径。
11. SCRIPT-NAME: CGI程序的路径名。
12. QUERY-STRING:表单输入的数据,URL中间号后的内容。
13. REMOTE-HOST:发送程序的主机名,不能确定该值。
14. REMOTE-ADDR:发送程序的机器的IP地址。
15. REMOTE-USER:发送程序的人名。
16. CONTENT-TYPE:POST发送,一般为applioation/xwww-form-urlencoded。
17. CONTENT-LENGTH:POST方法输入的数据的字节数。 7.4 CGI程序的设计 CGI的输出包括多个头部信息和一个数据体,两者之间用一个空行隔开。其中必须包含一个头部信息,如果带有数据体,则要求有Content-type,即MIME类型。MIME为Multipurpose Internet Mial Extension protocol的缩写,即多用途网际邮件扩充协议,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。当它被HTTP协议支持之后,它的意义就更为重要了。它使得HTTP不仅能传输普通的文本,而且能传输声音、视频等数据。MIME类型由两部分组成,前面是数据的大类别,后面定义具体的种类。常见的MIME类型如下表所示: CGI程序一般由以下三部分构成:
(1)数据解码部分:通过表单输入、由浏览器传送给服务器的数据都是经过URL编码的,必须进行解码。如果不需要处理表单输入,则该部分省略。
(2)数据头部分:必须包含这一部分作为第一个输出行,该行后必须有一空格行。该行可以是下列三种之一:
ü 数据类型,如:Content-type:text/html
ü 地址类型(Location),如:location://www.kernel.org
ü 状态类型(Status),如:status:200 OK
(3)CGI程序主体部分。 对通过表单输入的数据进行处理,并输出到标准输出。
综上所述,CGI程序的功能是获取Web服务器传送的数据,解码处理后,根据用户的要求进行其它的操作。一般是生成动态Web页面或者调用其它的应用服务。
从原理上说,CGI程序设计可以采用任何读写标准输入,输出的语言,比如C/C++、Perl、Java等。但在嵌入式系统中,C语言是一个首选的工具语言。
嵌入式WEB服务器的体系结构
嵌入式WEB服务器应根据需要选择合适的硬件平台。硬件平台选择的标准主要有:①有网络接口,支持TCP/IP协议栈。②便于实现控制。③升级和维护方便。 在8位/16位单片机上也可以实现嵌入式WEB服务器,优点是成本低廉,但需要添加网络接口电路,而且对嵌入式操作系统的支持有限,不便予系统功能的扩充。32位微处理器目前技术已经成熟,能支持更多的嵌入式实时操作系统应用程序开发也非常方便。可根据需要选择合适嵌入式硬件平台。
4. 结语
嵌入式系统是信息产业走向2 1世纪知识经济时代的最重要的经济增长点之一,这是一个不可垄断的工业,对中国的信息产业来说充满了机遇和挑战。以信息家电为中心和嵌入式Internet为潮流的嵌入式系统正得到蓬勃的发展。本论文就是在这个潮流下,研究了嵌入式Linux系统,包括硬件部分、嵌入式操作系统Linux的启动和嵌入式W e b服务器的实现。硬件部分采用高效,低功耗的A R M 处理器,它的开发研究也是目前一个非常活跃的研究领域。ARM 和Linux的结合注定了我们的嵌入式系统是很有优势的。
基于arm/Linux平台构建了嵌入式Web服务器,经测试运行情况良好,系统可以提供基本的Web服务,实现用户对嵌入式服务器信息的浏览,实现服务器与登陆用户进行动态交互,为具体的网络信息采集与控制方面的应用奠定了基础。
参考资料: 编译过程:
编译boa,修改boa\src下面的Makefile,cc=arm-linux-gcc,cpp交叉编译环境,boa.conf文件设置配置文件的目录和位置信息
自己编写cgi程序,供boa调用
写boa配置文件,目录必不可少
cgi-bin下放cgi程序
html放html页面
log可为空,但目录必须存在
mime.types 类型
文件准备好,打包my_boa,下载到板子,还要下载
libnss_compat.so.2
libnsl.so.1
/usr/local/arm/4.0.0 /arm lib到板子文件系统lib里面
然后拷贝boa,boa_indexer ,cgi程序到相应位置。