嵌入式BOA服务器文档
ARM嵌入式Web服务器Boa的软、硬件设计 毕业设计

摘要论文主要介绍了基于ARM9的嵌入式Web服务器Boa的软、硬件设计及其实现,其中硬件部分的核心是三星的S3C2410X为处理器。
最后成果形式为可以远程访问的WebServer嵌入式服务器。
Boa是一款单任务的HTTP服务器。
与其他传统的Web服务器不同的是当有连接请求到来时,它并不为每个连接单独创建进程, 也不通过复制自身进程来处理多链接。
而是通过建立HTTP请求列表来处理多路HTTP连接请求。
同时它只为CGI程序创建新的进程,这样就在最大程度上节省了系统资源,这对嵌入式系统来说至关重要。
同时它还具有自动生成目录、自动解压文件等功能。
因此, Boa在嵌入式系统中具有很高的应用价值。
关键词:ARM;Linux;嵌入式Web服务器;CGIThis paper has mainly developed the software hardware design and realization of the embedded Web server Boa based on ARM. And the core of the hardware part is S3C2410X microprocessor produced by Samsung . The final achievement is the embedded webserver which can remote visit. Boa is a single-tasking HTTP server. That means that unlike traditional webservers, it does not fork for each incoming connection, nor does it fork many copies of itself to handle multiple connections. It internally multiplexes all of the ongoing HTTP connections. And forks only for CGI programs, this is very important to embedded system. At the same time, it also has the function of automatic directory generation、automatic file gunzipping and so on. So Boa is of highly value in the embedded system application.Keywords: ARM;Linux;Embedded Web server;CGI摘要 (1)Abstract (2)目录 (3)第一章引言 (5)第二章课题背景 (6)2.1 嵌入式系统简介 (6)2.2 嵌入式系统和Linux (6)2.3 ARM9硬件平台 (7)2.3.1 ARM简介 (7)2.3.2 JXARM9-2410 ARM嵌入式教学实验系统 (8)第三章嵌入式Web服务器 (9)3.1 概述 (9)3.2 Web服务器原理 (9)3.3 嵌入式Web服务器实现原理 (9)3.3.1 TCP/IP协议 (9)3.4 嵌入式Web服务器Boa (10)3.4.1 Boa概述 (10)3.4.2 Boa的功能实现 (11)第四章CGI技术 (12)4.1 CGI概述 (12)4.2 CGI工作原理 (12)第五章建立嵌入式系统开发环境 (14)5.1 在Vmware下安装Redhat 9.0 (14)5.2 编译配置主机开发环境 (18)5.2.1 配置以太网 (18)5.2.2 安装配置tftp服务器 (19)5.2.3 配置防火墙 (21)5.2.4 配置NFS服务器 (22)5.3 JXARM9-2410中U-boot烧写 (22)5.3.1 u-boot的功能 (22)5.3.2 使用ADT IDE烧写u-boot (23)第六章系统功能的实现 (25)6.1 GCC简介 (25)6.1.1 GCC概述 (25)6.1.2 GCC基本用法 (25)6.2 Linux内核移植 (26)6.2.1 Linux内核源代码的安装 (26)6.2.2 Linux交叉编译环境的建立和使用 (27)6.2.3 Linux内核的配置和编译 (27)6.3 加载Linux内核映像 (30)6.4 Boa Web服务器的移植 (31)6.4.1 Boa Web服务器的建立 (31)6.5 Linux下动态Web页面的实现 (32)6.5.1 CGI程序分析 (32)6.5.2 Form输入的分析和解码 (34)第七章系统功能的测试 (36)7.1 测试Web服务器 (36)7.2 动态Web页面测试 (37)结束语 (40)致谢 (41)参考文献 (42)附录 (43)第一章引言随着计算机技术的发展,嵌入式系统已成为计算机领域的一格重要组成部分。
嵌入式web server boa在S3C2410上的编译移植步骤

5. ./configure
二、编译前,修改文件
1.修改Makefile文件,找到CC=gcc和CPP=gcc -E,分别将其改为交叉编译器安装的路径:
CC= arm-softfloat-linux-gnu-gcc
CPP= arm-softfloat-linux-gnu-g++
嵌入式web server boa在S3C2410上的编译移植步骤
开发平台:ubuntu 8.04
目标平台:S3c2410
开发工具:arm交叉工具链版本3.4.5
boa版本:boa-0.94.13.tar.gz
一、下载源码,生成makefile
1.下载源码:
2.拷贝到/opt目录下
3.解压tar zxvf boa-0.94.13.tar.tar
(6)KeepAliveMax 1000
KeepAliveTImeout 10
(7)MimeTypes /etc/mime.types
(8)ScriptAlias /cgi-bin/ /var/www/cgi-bin/
三、编译并移植
1.编译boa
# make
# arm-softfloat-linux-gnu-strip boa
2,将mime.types文件复制目标板根文件系统/etc目录下
3。在开发板上
cd /etc
mkdir boa
把开发机上的(配置文件)boa.conf(编译结果)boa defines.h这3个文件拷贝到开发板/etc/boa/下
4.在开发板上
cd /var
mkdir www (这个文件夹内可以放网页)
}*/
基于Boa嵌入式Web服务器的应用研究

多媒体技术数码世界 P.30基于Boa 嵌入式Web服务器的应用研究黄雅菁 上海市贸易学校计算机教研部摘要:嵌入式Web服务器为嵌入式人机界面应用提供了有力的保障。
本文首先分析目前常用的几种嵌入式Web服务器优缺点,然后通过实例详细介绍了基于Boa Web服务器的车辆检测系统,客户端可以通过浏览器对车辆检测系统各类参数进行实时的查询和配置。
最后,进一步的提出了基于Boa Web服务器的改进方法。
关键词:嵌入式Web服务器 Boa 车辆检测系统1嵌入式Web服务器概述嵌入式系统以其可裁剪、可靠性和高性价比赢得了市场青睐,可接入Internet的嵌入式设备使得未来的生活更加自动化,智能化和人性化。
在嵌入式设备的管理与交互中,客户端可以通过Web浏览器对嵌入式设备进行管理和监控。
嵌入式Web服务器(EWS , Embedded Web Server)是专门针对嵌入式设备设计,目的是在于扩展式设备功能,为远程监控提供有力支持,使传统的测试和控制设备转变为具备了以TCP/IP为底层通信协议,Web技术为核心的基于互联网的网络测试和控制设备。
2现有的嵌入式WEB 服务器目前,常用的Web服务器,有GoAhead、thttdpd和Boa。
GoAhead Web服务器是开源的,体积小,性能高,支持需要在基于浏览器管理模式的设备上传递动态信息。
同时,GoAhead Web 服务器支持多种操作系统和开发平台,具有很强的可移植性。
缺点是对ASP的支持意味着要依靠微软平台,在安全方面的没有过多的考虑。
Thttpd服务器代码少,占用内存少,缺点是只能运行在类Linux操作系统上,对所有文件都是一次读取完毕,同时缓存下来,因此在运行过程中占用资源多。
Boa是单任务的Web服务器,通过建立 HTTP 请求列表来处理多路 HTTP 连接请求,只为 CGI 程序创建新的进程,占用资源少。
同时它还具有自动生成目录、自动解压文件等功能,具有很高的 HTTP 请求处理速度和效率。
BOA服务器的配置

#避免使用mime.types文件,此时需要用AddType在本文件里指明
MimeTypes /etc/mime.types
#文件扩展名没有或未知的话,使用的缺省MIME类型
DefaultType text/plain
5.#将文件扩展名和MIME类型关联起来,和mime.types文件作用一样。如果用mime.types
/
, 或者
最新发行版本: 0.94.13
下载 boa-0.94.13.tar.gz,注意:从boa上下载的是boa-0.94.13.tar.tar,解压方式一样
2、ScriptAlias的修改 修改 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
为 ScriptAlias /cgi-bin/ /var/www/cgi-bin/
3、ServerName的设置修改 ServerName
.here
第二步 Boa的配置 Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改。
1、Group的修改 修改 Group nogroup
为 Group 0
由于在/etc/group文件中没有nogroup组,所以设成0。另外在/etc/passwd中有nobody用户,所以User nobody不用修改。
b、 修改 CPP = gcc - E
为 CPP = /usr/local/arm/2.95.3/bin/arm-linux-gcc -E
4、编译 # make
# /usr/local/arm/2.95.3/bin/arm-linux-strip boa
基于ARM9的Web服务器Boa的软、硬件设计

基于ARM9的Web服务器Boa的软、硬件设计作者:金勇来源:《电子世界》2013年第13期【摘要】文章介绍了基于ARM9的嵌入式Web服务器Boa的软、硬件设计及其实现,硬件部分的核心是三星的S3C2410X处理器。
最后成果形式为可以远程访问的WebServer嵌入式服务器。
Boa是一款单任务的HTTP服务器。
与其他传统的Web服务器不同的是当有连接请求到来时,它并不为每个连接单独创建进程,也不通过复制自身进程来处理多链接。
而是通过建立HTTP请求列表来处理多路HTTP连接请求。
同时它只为CGI程序创建新的进程,这样就在最大程度上节省了系统资源,这对嵌入式系统来说至关重要。
同时它还具有自动生成目录、自动解压文件等功能。
因此,Boa在嵌入式系统中具有很高的应用价值。
【关键词】ARM;Linux;嵌入式Web服务器;CGI1.ARM简介广义地讲,凡是带有微处理器的专用软硬件系统都可以称为嵌入式系统。
它是嵌入到对象体系中的专用计算机系统,以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
目前非常流行的ARM 内核有ARM7TDM1、StrongARM、ARM720T、ARM9TDM1、ARM920T、ARM940T、ARM946T、ARM966T、ARM10TDM1等。
本文所讨论的目标板的CPU为ARM920T内核的三星S3C2410芯片。
ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。
它包含ARM920T、ARM922T和ARM940T三种类型,广泛应用于PDA、移动通信、路由器、工业控制等领域。
2.嵌入式Web服务器实现原理嵌入式Web服务器是指将Web服务器引入到现场嵌入式设备中,并驻留其中有限的代码空间内。
与传统的Web应用相比,简化了系统结构,并将信息采集和信息发布都集成到现场的嵌入式设备中。
在嵌入式linux下搭建Boa Webserver

在嵌入式linux下搭建Boa Webserver1、嵌入式Web的应用。
在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的C/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web 浏览器就可以对嵌入式设备进行管理和监控,非常方便实用。
2、嵌入式服务器的选择。
由于嵌入式设备资源一般都比较有限,并且也不需要能同时处理很多用户的请求,因此不会使用Linux下最常用的如Apache等服务器,而需要使用一些专门为嵌入式设备设计的Web服务器,这些Web服务器在存贮空间和运行时所占有的内存空间上都会非常适合于嵌入式应用场合。
常见的嵌入式Web服务器主要有:lighttpd、thttpd、shttpd和BOA等。
3、Boa是一个非常小巧的web服务器,其可执行代码只有约60Kb,它是一个单任务的服务器,只能依次完成用户的请求,而不会fork出新的进程处理并发的连接请求。
但Boa 支持CGI,能够为CGI程序fork出一个进程来执行,Boa设计目标是速度与安全。
硬件环境:SBC-S2416单板机软件环境:1、PC端:win7下VirtualBox虚拟机+xubuntu系统。
具备基本的GCC编译环境,能够执行configure产生Makefile;系统中已搭建好交叉编译环境。
相比于普通的PC机,嵌入式的硬件资源相当的有限,不可能进行本地的开发。
因而,嵌入式的软件开发和调试过程通常是在PC机上实现的。
这样就形成了一套在PC机上交叉编译,然后生成目标机平台的格式,最后在目标机上执行的开发流程,也就是所谓的交叉编译环境。
2、移植嵌入式Linux系统到开发板上。
Boa搭建过程:1、下载boa-0.94.13.tar,执行tar解压命令。
BO服务器安装文档
1.启动安装程序:
2.查看安装的先决条件:
3.安装.net framework 后再重新安装:
4.条件都成功后,点击下一步:
5.进入下一步:
6.选择接受后进入下一步:
7.填写密钥后进入下一步:
8.选择安装语言:
9.默认选择“完整”:
10.根据需要选择安装路径:
11.更改默认选择,选择“配置现有数据库”:
12.选择资料库所在的数据库类型:
13.更改默认选项,选择“无审核数据库”:
14.无需更改,进入下一步:
15.默认选项,进入下一步:
16.默认节点和端口号信息,进入下一步:
17.默认CMS端口号,进入下一步:
18.设置BI登录密码:
19.填写对应数据库的信息:
20.默认选择,若有冲突再更改:
21.默认选择,进入下一步:
22.设置subversion密码:1qaz2wsx
23.默认选择,进入下一步:
24.选择“不配置”,进入下一步:
25.进入下一步:
26.安装完成:。
Boa应用-web网页配置A40i-飞凌嵌入式
Boa应用-web网页配置A40i-飞凌嵌入式一、简要说明本文主要讲解A40i Boa应用,适用于飞凌 A40i 系列FETA40i-C 核心板Linux3.10 操作系统,其他平台也可以参考,但是不同平台之间会存在差异,需客户自行修改以适应自己的使用。
编写本文章的主要目的是协助客户加速产品的研发速度,由于小编水平有限,在服务过程中所提供的任何资料和信息,都仅供参考,客户有权不使用或自行参考修改,本文章参考资料和信息的完整性、可靠性等问题请自行验证。
硬件平台简介:FETA40i-C核心板基于全志工控行业平台级处理器四核Cortex-A7 A40i设计,主频1.2GHz,集成MAli400MP2 GPU,内存1GB/2GB DDR3L,存储8GB eMMC。
支持绝大部分当前流行的视频及图片格式解码,具有稳定可靠的工业级产品性能和高性价比低功耗等优势,搭载Linux和Android操作系统,适用于基于视觉交互的工业控制产品,目标应用包含,嵌入式设备、智能终端、工业控制、数据采集、机器视觉、工业物联网、移动互联设备、数字标牌等。
<第二章 A40i系列Boa应用Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。
作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。
但Boa支持CGI,能够为CGI程序fork出一个进程来执行,Boa的设计目标是速度和安全。
1、Boa配置文件Boa配置文件在/etc/boa/boa.conf常用配置说明:(可根据项目需要,将以下配置添加到配置文件里)Group nogroupUser nobody这两个配置是配置boa的运行的属主和属组,如果cgi要配置网卡地址,就必须修改成User rootCGIPath /bin:/usr/bin:/usr/local/bin:/sbinCgi程序运行的一个程序搜索路径;比如运行ifconfig eth0 192.169.0.232就必须配置/sbin路径;ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ /usr/lib/cgi-bin/ 是cgi程序放到boa中的绝对地址,/cgi-bin/ 是客户在网页中提交的cgi地址;例如:/usr/lib/cgi-bin/中放置一个app.cgi;网页访问时候使用/cgi-bin/app.cgi?type=conf&random=0.1111DocumentRoot /var/www这个是虚拟目录在开发板中的真实目录/var/log/boa/access_log日志需要的文件夹和名字VerboseCGILogs调试日志开关,正式运行时候关闭。
嵌入式web服务器BOA与CGI
: :web BOA CGI zz2009-11-05 19:19/u1/33226/showart_485155.htmlWEBlighttpdshttpdthttpdboamathopdminihttpdappwebgoahead========================================================================WEB BOA 2007-2-26 16:20:00Internet WebB/S CGI Web WebCGI Web1 Web Linux Apache WebWebWeb Boa thttpd /software/thttpd/Apache WebBoaBoa Web 60KB Web fork Boa CGI CGI fork Boa Boa ApacheBoa Boa 0.94.13 src# tar xzf boa-0.94.13.tar.gz# cd boa-0.94.13/srcMakefile# ./configureMakefile CC=gcc CC = arm-linux-gcc CPP = gcc –ECPP = arm-linux-gcc –Emake boa 60KB# make# arm-linux-strip boaBoa CGI Boa /etc boa Boa boa.conf Boa boa.conf # 80Port 80# bind IP INADDR_ANY IP#Listen 192.68.0.5# nobody /etc/passwd#nobodyUser nobody# nogroup /etc/group# nogroupGroup nogroup# email#ServerAdmin root@localhost# /#/dev/null /var/log/boaErrorLog /var/log/boa/error_log# /#/dev/null /var/log/boa#AccessLog /var/log/boa/access_log# UTC#UseLocaltime# CGI#VerboseCGILogs#ServerName # Web##VirtualHost# HTML /DocumentRoot /var/www#UserDir public_html#HTMLDirectoryIndex index.html# HTML boa# HTML #DirectoryIndex| | |ilikuw w .d o c u -t r a c k .c mCct obyw w .d o c u -t r a c k .c o#DirectoryMaker /usr/lib/boa/boa_indexer# DirectoryIndex DirectoryMaker Boa# Boa# DirectoryCache /var/spool/boa/dircache# HTTP 0 HTTPKeepAliveMax 1000#HTTPKeepAliveTimeout 10# mime.types /# mime.types AddTypeMimeTypes /etc/mime.types# MIMEDefaultType text/plain# CGI PATHCGIPath /bin:/usr/bin:/usr/local/bin# MIME mime.types mime.types# mime.types#AddType application/x-httpd-cgi cgi##Redirect /bar http://elsewhere/feh/bar#Alias /doc /usr/doc# CGI CGI# + +CGIScriptAlias /cgi-bin/ /var/www/cgi-bin/boa.conf boa.conf Boa /var/log/boaHTML /var/www mime.types /etcCGI /var/www/cgi-bin/ mime.types MIMELinux /etc======================================================================================host test=======================================1. boa-0.94.13/src./configuremake2. etc/ boa boa.conf . boa.confGroup nogroup Group 03. /var/log/ boa boa4./var/www DocumentRoot /var/wwwcgi ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ cgi /usr/lib/cgi-bin/http://201.201.201.249/cgi-bin/cgi-test.cgiCGIPath /bin:/usr/bin:/usr/local/binroot ifconfig ip /sbin=====================================================================cgi=====================================================================//pass.c#include <stdio.h>#include <stdlib.h>#include <string.h>char* getcgidata(FILE* fp, char* requestmethod);int main(){char *input;char *req_method;char name[64];char pass[64];int i = 0;int j = 0;-type: text/plain; charset=iso-8859-1\n\n");printf("Content-type: text/html\n\n");printf("The following is query reuslt:<br><br>");req_method = getenv("REQUEST_METHOD");input = getcgidata(stdin, req_method);// input// Username="admin"&Password="aaaaa"// "Username=" "&Password="// "admin" "aaaaa"// 9 UserName=// "UserName=" "&"for ( i = 9; i < (int)strlen(input); i++ ){if ( input[i] == '&' ){name[j] = '\0';break;}name[j++] = input[i];}// 9 + "&Password="10 + Username//for ( i = 19 + strlen(name), j = 0; i < (int)strlen(input); i++ ){pass[j++] = input[i];}pass[j] = '\0';printf("Your Username is %s<br>Your Password is %s<br> \n", name, pass);return 0;}char* getcgidata(FILE* fp, char* requestmethod){char* input;int len;int size = 1024;likuw w .d o c u -t r a c k .c mCct obyw w .d o c u -t r a c k .c oint i = 0;ifelse if (!strcmp(requestmethod, "POST")){len = atoi(getenv("CONTENT_LENGTH"));input = (char*)malloc(sizeof(char)*(size + 1));if (len == 0){input[0] = '\0';return input;}while(1){input[i] = (char)fgetc(fp);if (i == size){input[i+1] = '\0';return input;}--len;if (feof(fp) || (!(len))){i++;input[i] = '\0';return input;}i++;}}return NULL;}/** gcc -o pass.cgi pass.c*///pass.html<html><head><title> </title></head><body><form name="form1" action="/cgi-bin/pass.cgi" method="POST"><table align="center"><tr><td align="center" colspan="2"></td></tr><tr><td align="right"> </td><td><input type="text" name="Username"></td></tr><tr><td align="right"> </td><td><input type="password" name="Password"></td></tr><tr><td><input type="submit" value=" "></td><td><input type="reset" value=" "></td></tr></table></form></body></html>wte1235thisjok drxdai yuzgy22arda1980yangtao139869blue1327|( )likuw w .d o c u -t r a c k .c mCct obyw w .d o c u -t r a c k .c o| | |©2012 Baidulikuw w .d o c u -t r a c k .c mCct obyw w .d o c u -t r a c k .c o。
嵌入式WEB服务器BOA的应用研究
而 不 会 创 建 (o k m 新 的 进 程 来 处 理 并 发 连 接 请 求 , fr ) 但
B OA 支 持 C , 且 能 为 CG GI并 I程 序 创 建 出 一 个 新 的 进 程 来 执 行 。B OA 服 务 器 的设 计 目标 是 速 度 快 和 安 全 性 好 , 在 其 站 点 公 布 的性 能 测 试 中 , OA 的性 能 要 好 于 Ap c e B a h 服 务 器 的性 能 。 嵌入式 WE B服 务 器 BOA 和 普 通 WE B服 务 器 一 样 ,
⑦ 去 除 其 中的 调 试 信 息 , 以减 小 文 件 的大 小 。
# a m —i x s rp s lt 3 r l nu - ti qie
4 基 于 O 的数 据 库 访 问技 术 [ GI 4
C ( mmo twa ne fc , 共 网 关 接 口) GICo n Gae y I tra e 公 定
① 从 www. qi . r s l e o g下 载 sl e2 8 1 . a. z源 t qi 一 . . 7 tr g t 码 , 解压 。 并
② 解压 。
# tr~ z fb a 0 9 . 3 t r g a x v o ~ . 4 1 . a . z
③ 进 入 源代 码 目录 。
IEl_ 一w 、 : 嵌服 i务 入器 式 B
图 1 嵌 入 式 WE B服务 器 的工 作 过 程
图 2为 硬 件 系 统 结 构 框 图 。嵌 入 式 WE B服 务 器 采 用
¥ C2 1 3 4 0作 为 整 个 系 统 的 处 理 器 。¥ C2 1 3 4 0是 S ms n a ug 公 司 的 一 款 基 于 ARM9 0 内核 的 1 / 2位 R S 2T 63 I C嵌 入 式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于BOA的嵌入式WEB SERVER的设计随着网络技术的不断发展,网络现在已无处不在。
Linux最大的好处在于其良好的网络功能,因此在该系统中,我们通过设计WEB 服务器,使用户能通过浏览器访问设备上的Web服务器来远程控制现场设备。
嵌入式Linux下,系统资源是非常有限的,因此我们选择Web服务器时,要考虑到其资源有限的特点;Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。
作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。
但Boa支持CGI,能够为CGI程序fork出一个进程来执行,Boa的设计目标是速度和安全。
现在,多数嵌入式Linux的代码中已经包含boa的源代码,在嵌入式Linux下实现Boa 只需要对Boa做一些简单的配置和修改。
这主要通过对boa.conf、boa.c、mime.types等文件进行修改来实现。
服务器中主要包括boa和CGI两部分,其中Boa管理着返回客户端的WEB 页面,而CGI控制着客户端和服务器端的信息交换,所以我们可以通过编写相应的CGI程序来实现所需要的功能。
Boa服务器的实现主要分为两步,boa服务器的移植和CGI程序的设计。
1 、boa 服务器移植Boa服务器的移植主要分为以下步骤进行:(1)首先下载boa源代码,网上有很多关于boa的源码下载网站,官方网址为:/;(2)根据目标平台修改boa的配置文件boa.conf,以及相关的源代码文件boa.c,log.c。
(3)执行configure生成Makefile,并修改Makefile中CC和CPP等项,改成与目标平台对应的编译工具;(4)交叉编译源代码,生成可执行文件boa;(5)拷贝配置文件boa.conf和可执行程序boa到文件系统中。
此时就可以在目标板中运行boa程序了。
下面具体介绍一下如何在ARM平台上移植boa服务器:本系统中采用的boa源码是boa-0.94.13.tar.gz, 将下载的源码拷贝到工作目录解压,# tar xzf boa-0.94.13.tar.gz这里注意下系统中需要安装bison,flex等工具,如果在U-BOOT移植中已经在开发主机中安装过这些工具,则可以跳过这一步骤。
如果没有,在UBUNTU系统中使用如下命令就可以自动安装:#sudo apt-get install bison flex如果不安装这些工具,在执行make生成可执行文件时会出现如下错误make: yacc:comman not foundmake: *** [y.tab.c] error 127make: lex:comman not foundmake: *** [lex.yy.c] error 127解压完源代码后,我们进入boa目录,boa的所有源代码及编译文件都放在都放在/src下面,进入该目录#cd /source/boa-0.94.13/src相关文件的修改:此时,我们要做的就是对该目录下一些源代码做相应的修改,首先修改compat.h文件, 打开文件找到下面的语句:#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff将其修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff否则会出现错误:util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o]修改log.c源文件,将以下语句注释掉:if (dup2(error_log, STDERR_FILENO) == -1) {DIE("unable to dup2 the error log");}否则会出现错误:log.c:73 unable to dup2 the error log:bad file deorboa.c文件的修改:注释掉下面两句话:if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {DIE(”initgroups”);}否则会出现错误:boa.c:211 - getpwuid: No such file or directory注释掉下面语句:if (setuid(0) != -1) {DIE(”icky Linux kernel bug!”);}否则会出现问题:boa.c:228 - icky Linux kernel bug!: No such file or directory生成可执行文件BOA:首先进入src目录,并执行configure文件,生成Makefile文件#cd /source/boa-0.94.13/src#./configure生成完Makefile后,接下来要做的就是对其做相应的修改,因为我们对应的目标平台是ARM,所以我们要查看我们用到的交叉编译器设置是否正确,本实验中所要修改的具体参数为:修改CC =gcc 为CC =arm-softfloat-linux-gnu-gcc修改CPP =gcc -E 为CC =arm-softfloat-linux-gnu-gcc -E在确认以上修改正确后,我们在/src目录下就可以使用make命令来生成我们所需要的可执行文件boa了。
# make此时会在当前目录下生成一个名为boa的可执行文件,可以通过ls命令查看。
#ls -l boa-rwxr-xr-x 1 root root 187213 2009-07-11 13:44 boa可以看到生成的可执行文件有180K,对于嵌入式系统来说,我们要尽可能的缩下其大小,因此,我们可以通过瘦身命令strip来删除其中的多余信息,达到缩下体积的目的。
#arm-softfloat-linux-gnu-strip boa# ls -l boa-rwxr-xr-x 1 root root 61052 2009-07-11 13:49 boa可以看到,boa在瘦身前后的大小差距很大,这对嵌入式系统来说,节省了很大的空间。
Boa的配置在生成好boa以后,还要对boa的配置文件boa.conf做修改,在boa-0.94.13目录下已有一个示例boa.conf,可以在其基础上进行修改。
修改如下:#vi boa.conf(1)Group的修改修改Group nogroup为Group 0(2)user的修改修改User nobody为User 0(3)Alias的修改修改Alias /cgi-bin/ /usr/lib/cgi-bin/为Alias /cgi-bin/ /www/cgi-bin/(5)DoucmentRoot的修改修改DoucmentRoot /var/www为DoucmentRoot /www(6)ServerName的设置修改#ServerName .here为ServerName .here否则会出现错误“gethostbyname::No such file or directory”(7)AccessLog修改修改AccessLog /var/log/boa/access_log为#AccessLog /var/log/boa/access_log否则会出现错误提示:“unable to dup2 the error log: Bad file deor”配置好boa.conf以后,我们将生成的boa以及修改好的boa.conf文件拷贝到文件系统中相应的目录中:首先在目标板上创建目录/etc/boa并且把boa 和boa.conf拷贝到这个目录下mkdir /etc/boa创建HTML文档的主目录/wwwmkdir /www创建CGI脚本所在录/www/cgi-binmkdir /www/cgi-bin以下步骤在ubuntu下进行:将boa.conf拷贝到开发板根文件系统的/etc/boa下#cp boa.conf /source/rootfs/etc/boa将boa拷贝到开发板根文件系统的/etc/boa下#cp src/boa /source/rootfs/etc/boa将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下,mime.types的主要功能是控制从网络上发给宿主机端的媒体文件的类型,并且告诉宿主机怎么去处理这些数据。
#cp /etc/mime.types /source/rootfs_hw/etc这时,我们可以将一个测试网页拷贝到/www目录下,并在开发板上启动boa服务器/etc/boa/boa然后在宿主机下,打开浏览器输入开发板的IP地址,就可以看到存放在开发板中的测试主页了,但此时我们点击页面上的按钮时不会执行任何相应,因为现在只是实现了简单的连接,网页并没有相应的CGI程序。
在boa 服务器的设计中,最为关键的就是CGI程序的设计,通过CGI程序,就可以实现我们点击页面时所需要的功能。
2 、CGI程序设计该系统所要实现的功能是让客户端使用浏览器向服务器发送HTTP请求,服务器响应客户端的请求后,并引导到指定的脚本程序,对命令进行解析,将信息交给后台——CGI去处理。
CGI解析信息后,向远程设备发出控制信息。
设备响应后,返回给CGI控制信息,CGI再将信息解析成变量输出到Web Server上,最后客户端得到WebServer发回的页面消息(HTML),就能得到现场设备的运行状态,实现对现场设备的远程监控。
该系统中设计的BOA服务器的的主要功能如下图所示:图1 系统功能实现流程图CGI的程序编写包括两个部分:HTML代码和C代码;CGI程序与Boa Web服务器之间通过环境变量、命令行参数和标准输入等方式进行通信。
本设计中采用的表单编码信息通过环境变量QUERY_STRING传递。
在编写CGI程序时,需要注意:◆REQUEST_METHOD前面介绍过,请求方法有两种:GET和POST。
在实验中,我选择GET方法,如在showsetip()中的代码:<meta http-equiv=pragma content=no-cache><meta http-equiv=expire content=now><form method=get action=/cgi-bin/config.cgi>◆环境变量在选用不同的方法时,所对应的环境变量也不同。