嵌入式Web服务器Boa移植.ppt
嵌入式boa服务器移植说明
嵌入式boa服务器的移植——cpw806开发板:gec2410开发环境:Vmware+redflag6.0交叉编译器:arm-linux-gcc-4.3.2软件版本:linux2.6.31(内核),boa-0.94.13.tar.gz一:准备boa服务器源代码下载地址:/projects/boa/。
二:移植boa服务器1:编译boa服务器①解压#tar–zxvf boa-0.94.13.tar.gz②进入boa-0.94.13/src目录,#./configure③#修改交叉编译器路径#vi MakefileCC=gccCPP=gcc-E该为:CC=arm-linux-gccCPP=arm-linux-gcc-E④#make⑤去除调试信息#arm-linux-strip boa经4,5步之后,便在src目录下生成boa可执行文件。
编译过程中出现如下错误util.c:100:1:pasting“t”and“->”does not give a valid preprocessing token make:[util.o]Error1解决办法修改compat.h中的#define TIMEZONE_OFFSET(foo)foo##->tm_gmtoff为:#define TIMEZONE_OFFSET(foo)foo->tm_gmtoff有人说改用2.95.3版本的编译器也可以避免这个错误,本人没有试验过。
至此编译完成,此时便可生成可执行程序boa。
2:配置boa.conf文件有关boa.conf的说明文档很多,本人不再赘述,下面为有必要修改和注意的部分。
1修改User nobody为User0;2修改Group nogroup为Group0②设定日志目录:boa日志有两部分,Errorlog和AccessLog一般情况下为/var/log/boa/error_log和/var/log/boa/access_log两个文件。
嵌入式boa服务器搭建和移植
嵌入式boa服务器搭建和移植1.先下载源码/ ==> boa-0.94.13.tar.g2.tar -xvf boa-0.94.13.tar.g3./configure4.修改MakefileCC =or32-linux-gccCPP = or32-linux-gcc–E5.修改boa.c,注释下面几行if (setuid(0) != -1) {DIE(“icky Linux kernel bug!”);}改为/*if (setuid(0) != -1) {DIE(“icky Linux kernel bug!”);}*/6.修改文件compat.h#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff7.make 编译,这时候就会生成一个boa的可执行文件boa的配置文件是boa.conf,大概的配置是这样的:MimeTypes /etc/mime.types //指明mime.types文件位置DefaultType text/plain //文件扩展名没有或未知的话,使用的缺省MIME类型CGIPath /bin:/usr/bin:/usr/local/bin //提供CGI程序的PATH环境变量值Alias /doc /usr/doc //为路径加上别名ScriptAlias /cgi-bin/ /var/www/cgi-bin/ //输入站点和CGI脚本位置对于调试阶段,可以把主机的目录挂载到目标板上面,这样就方便调试。
假设主机的NFS共享目录是/NFS,在NFS下面建立一个www的文件夹,然后在www的文件夹下面建立images,cig-bin目录,还有一个index.html,可以随便找一个主页就可以了。
在主机上mkdir /NFS/wwwmkdir /NFS/www/imagesmkdir /NFS/www/cgi-bincp <dir>/index.html /NFS/www/然后在板子上面建立/var/www的目录mkdir /var/wwwmount -t nfs -o nolock <主机IP>:/NFS/www /var/www //挂载目标www板子上建立日志存放目录,在板子上:mkdir /var/logmkdir /var/log/boa对于boa配置文件的移植,可以把主机上的boa.conf拷贝到主机的NFS共享目录/NFS/www 下面。
boa移植boa交叉编译
boa移植boa交叉编译BOA 服务器是⼀个⼩巧⾼效的web服务器,是⼀个运⾏于unix或linux下的,⽀持CGI的、适合于嵌⼊式系统的单任务的http服务器,源代码开放、性能⾼配置boa-0.94.13 # ./configure修改MakefileCC = arm-linux-gccCPP = arm-linux-gcc -E编译boa-0.94.13 # make出现如下错误出现错误:yacc -d boa_grammar.ymake: yacc: Command not foundmake: *** [y.tab.c] Error 127解决办法:# sudo apt-get install bison出现错误:lex boa_lexer.lmake: lex: Command not foundmake: *** [lex.yy.c] Error 127解决办法:# sudo apt-get install flex出现错误:arm-none-eabi-gcc -g -O2 -pipe -Wall -I. -c -o alias.o alias.cIn file included from alias.c:26:0:boa.h:41:19: fatal error: netdb.h: No such file or directorycompilation terminated.<builtin>: recipe for target 'alias.o' failedmake: *** [alias.o] Error 1解决办法://将交叉编译⼯具链换成gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)出现错误:arm-linux-gcc -g -O2 -pipe -Wall -I. -c -o util.o util.cutil.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing tokenmake: *** [util.o] Error 1解决办法:# vi compat.h //修改120⾏#ifdef HAVE_TM_GMTOFF#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff#else制作cgi页⾯交叉编译出⼀个cig脚本,供boa使⽤。
web服务器Boa移植手册
Boa服务器的移植可分成两部分,一个是在x86平台上移植,即在虚拟机的linux下,另一个是 在arm平台上移植,即在开发板上的linux下,本手册的前四步,都是在虚拟机上做移植,第五步 是移植到发开板上。
一、编译 boa 程序
1、下载boa-0.94.13.tar.gz。 2、解压 3、#./configure 4、#make 编译会出错: util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1 解决方法,修改compat.h中的 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 为: #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
3
MimeTypes /etc/mime.types 将网页文件放在/var/www 目录下,cgi 脚本放在/var/www/cgi-bin 目录下。在开发板上运行 boa, 在主机 IE 上输入开发板 IP,可看到网页。
六、常见错误
这些错误内容可查看/var/log/boa/error_log 文件 1、gethostbyname:: No such file or directory 解决办法: 修改 boa.conf 去掉 ServerName .here 前的注释符号(#)。 2、util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 解决办法: 修改 src/compat.h 找到 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 修改成 #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff 3、boa.c:211 - getpwuid: No such file or directory 解决办法: 修改 src/boa.c 注释掉下面这段程序: if (passwdbuf == NULL) { DIE(”getpwuid”); } if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”); } 即修改为: #if 0 if (passwdbuf == NULL) { DIE(”getpwuid”); } if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”); } #endif 4、boa.c:228 - icky Linux kernel bug!: No such file or directory 解决办法: 修改 src/boa.c 注释掉下面语句: if (setuid(0) != -1) { DIE(”icky Linux kernel bug!”);
嵌入式web服务器Boa的移植实验指导
然后运行 make 进行编译,这时出现如下错误: “ util.c: 100: 1: pasting “t” and “->” does not give valid preprocessing token make ”的错误 提示,。 解决办法:
若出现:
说明权限不够,给 helloworld.cgi 加上执行权。结果如下,说明基于 CGI 的 C 语言程序成功 执行。
10.从CG目录 # tar -zxvf cgic205.tar.gz # cd cgic205
7.cp mime.types 文件到开发板/etc 目录,添加用户与组如下: vi passwd,添加 root 用户,vi group 添加 root 组
(或者 vi passwd,添加 nouser 用户,vi group 添加 nogroup 组) 8.运行 boa:
现在通过其他机器就可以访问了。http://192.168.1.5 就可以访问到你放置的那个 index 页面了。 若出现如下画面:
实验八:嵌入式 web 服务器 Boa 的移植与运用
一、实验目的 学会移植 boa,利用 boa 构建 WEB 服务并支持交互。
二、实验内容 1.下载 boa 源代码并逐步生成下载用文档 2. 下载并建立 boa 运行环境 3. 运行、测试
三、实验设备及工具 软件:PC 机操作系统 Windows XP 环境、VMWARE6.0、linux 企业版 4、Source.Insight V3.5、 XManage、交叉编译软件。 四、实验步骤: 1. 从/下载Boa源码,将其解压并进入源码目录的src子目录
11.修改 Makefile 文件 a.找到 CC=gcc,将其改成 CC=arm-linux-gcc, b.找到 AR=ar,将其改成 AR=arm-linux-ar, c.找到 RANLIB=ranlib,将其改成 RANLIB=arm-linux-ranlib。 e.找到 gcc cgictest.o -o cgictest.cgi ${LIBS},
BOA服务器移植
嵌入式Linux中的Web服务器应用Boa是一个非常小巧的Web服务器,其可执行代码只有60K左右。
它是一个单任务的Web服务器,只能依次完成用户的请求,而不会fork出新的进程处理并发连接请求。
但boa 支持cgi,能够为cgi程序fork出一个进程来执行。
Boa的设计目标是速度和安全,在其站点公布的性能测试中,boa的性能要好于apache服务器。
随着网络技术的迅猛发展,在嵌入式设备的管理和交互中,基于Web方式的应用成为目前的主流,用户可以直接通过远程登录的方式对设备进行管理和维护,大大方便了使用性。
下面就为大家讲解一下boa服务器在嵌入式Linux系统中的移植过程。
一、BOA服务器移植工具链:gcc version 4.3.2 (crosstool-NG-1.8.1-none)平台:处理器:s3c2410 内核:linux-2.6.351.解压源码tar xvf boa-0.94.13.tar.tarcd boa-0.94.132.进入src/./configure 生成Makefile修改Makefile修改CC =gcc 为CC =arm-none-linux-gnueabi-gcc修改CPP =gcc -E 为CPP =arm-none-linux-gnueabi-gcc -E3.make编译编译一个linux下的c系统,包含词法和语法分析模块,Linux上用bison和flex。
yacc是一个文法分析器的生成器,bison即是yacc的GNU版本.Lex和YACC是用于构造词法分析机和语法解释器的工具,利用Lex和Y ACC你可以轻松的构造一个语法解释器。
Apt-get install bison flex执行make然后给boa瘦身Arm-none-linux-gnueabi-strip boa二、Boa服务器配置1、创建目录mkdir /source/rootfs/etc/boa2、将boa源码目录下的boa.conf拷贝到/source/rootfs/etc/boa目录下cp boa.conf /source/rootfs/etc/boa3、修改配置文件boa.confvim /source/rootfs/etc/boa(1)Group的修改修改Group nogroup为Group 0(2)user的修改修改User nobody为User 0(3)ScriptAlias的修改修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/为ScriptAlias /cgi-bin/ /www/cgi-bin/(5)DocumentRoot的修改修改DocumentRoot /var/www为DocumentRoot /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(8)以下配置和boa.conf的配置有关,都是在ARM根文件系统中创建以下步骤在开发板上进行:创建HTML文档的主目录/wwwmkdir /www创建CGI脚本所在录/www/cgi-binmkdir /www/cgi-bin当不能使用cgi 时将#AddType application/x-httpd-cgi cgi改为AddType application/x-httpd-cgi cgiboa器测试将boa拷贝到开发板根文件系统的/etc/boa下#cp src/boa /source/rootfs/etc/boa将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下#cp /etc/mime.types /source/rootfs/etc将你的主页index.html拷贝到www目录下运行boa,然后在主机游览器输入开发板网址[root@farsight boa]# ./boa[30/10/2011:19:10:36 +0000] [root@farsight boa]# boa: server version Boa/0.94.13[30/10/2011:19:10:36 +0000] boa: server built 10 30 2011 at 19:10:36[30/10/2011:19:10:36 +0000] boa: starting server pid=968, port 80附1):boa配置文件参数说明boa的配置文件是/etc/boa/boa.conf。
KC08161103-d01-嵌入式BOA服务器工作原理(精)
BOA服务器特点
Boa是一款单任务的HTTP服务器,与其 他传统的Web服务器不同的是当有连接请求到 来时.它并不为每个连接单独创建进程,也不 通过复制自身进程来处理多链接,而是通过建 立HTTP请求列表来处理多路HTTP连接请求, 同时它只为CGI程序创建新的进程,这样就在 最大程度上节省了系统资源,这对嵌入式系统 来说至关重要. 同时它还具有自动生成目录、自动解压 文件等功能,因此,Boa具有很高的HTTP请 求处理速度和效率,在嵌入式系统中具有很高 的应用价值.
4
BOA服务器工作原理
ห้องสมุดไป่ตู้
5
谢谢关注!
6
嵌入式技术应用
1
嵌入式网关之远程控制设计
嵌入式BOA 服务器工作原理
1.BOA WEB服务器特点 2.工作原理分析
2
BOA服务器简介
1. BOA是一款非常小巧的Web服务器,源代码开放、 性能优秀、支持CGI通用网关接口技术,特别 适合应用在嵌入式系统中。
2. BOA服务器主要功能是在互联嵌入式设备之间 进行信息交互,达到通过网络对嵌入式设备进 行监控,并将反馈信息自动上传给主控设备的 目的。它是基于HTTP超文本传输协议的,Web 网页是Web服务最基本的传输单元。 3. BOA服务的工作基于客户机/服务器计算模型, 由Web浏览器(客户机)和Web服务器(服务器)构 成,也即的B/S结构。
嵌入式的WEB服务器BOA移植
基于嵌入式的WEB服务器2009嵌入式作业(4)计应1班王延龙嵌入式的WEB服务器boa移植开发板:PXA270-RP (Linux 2.6.9)宿主机: Centos 6.0 (linux 2.6.32)交叉编译器:arm-linux-gcc 3.4.61、下载Boa源码下载地址: /,或者最新发行版本: 0.94.13下载 boa-0.94.13.tar.gz,注意:从boa上下载的是boa-0.94.13.tar.tar,解压方式一样解压:# tar xzf boa-0.94.13.tar.gz2、生成Makefile文件直接运行src/configure文件,在运行之前,查看一下是否具有可执行权限3、修改Makefile文件修改 CC = gcc为 CC = arm-linux-gcc(也可以使用绝对路径,网上说得用2.95.3编译,高一点的编译器会报错,这一点,我没有去验证,我用的就是2.95.3)修改 CPP = gcc - E为 CPP = arm-linux-gcc -E4、编译# make 这一步编译时用编译工具用2.95.3以上的版本会出错:util.c: 100: 1: pasting “t” and “->” does not give valid preprocessing toke n make: [util.o] Error1解决方法:方法1>. 修改compat.h中的#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff为:#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff第二步:Boa的配置在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。
在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改1、Group的修改修改 Group nogroup为 Group 02、ScriptAlias的修改修改 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/为 ScriptAlias /cgi-bin/ /var/www/cgi-bin/3、ServerName的设置修改 ServerName .here为 ServerName 192.168.0.50注意:该项默认为未打开,执行Boa会异常退出,所以必须打开,把前边#号去掉,其它默认设置即可。
嵌入式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移植到mini2440开发板详细过程
嵌入式web服务器boa移植到mini2440开发板详细过程1、概述为了和开发板上用的httpd服务,我选用的服务器是boa,boa已经没有更新了,但是现在的应用仍然很大,当然更先进的AppWeb当然是更好的选择,不过学习应先从简单的入手。
本教程使用环境是Red Hat Enterprise Linux 6,交叉编译工具是arm-linux-gcc4.3.2,开发板是mini2440,开发板内核是2.6.32.2、到/下载源码,boa最终版是0.94.133、解压文件1)解压[root@localhostopen_source]# lsboa-0.94.13.tar.gz[root@localhostopen_source]# tar -xvfboa-0.94.13.tar.gz -C ./[root@localhostopen_source]# lsboa-0.94.13 boa-0.94.13.tar.gz2)为了和X86版本区别把解压出来的文件夹boa-0.94.13重新命名为boa-0.94.13_arm[root@localhostopen_source]# mv boa-0.94.13 boa-0.94.13_arm4. 编译前修改工作(主要是因为boa太久没有更新,目前相对说比较老,要修改下才能通过编译)1)修改vicompat.h文件[root@localhostopen_source]# lsboa-0.94.13_arm boa-0.94.13.tar.gz[root@localhostopen_source]# cd boa-0.94.13_arm/src/[root@localhostsrc]# vicompat.h找到#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff即将120行和126行的foo##->tm_gmtoff改为foo->tm_gmtoff否则会出现错误:util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 错误12)修改src/log.c注释掉if (dup2(error_log, STDERR_FILENO) == -1) {DIE("unable to dup2 the error log");}为:/*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 descriptor3)修改src/boa.c注释掉下面两句话:if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”);}为#if 0if (passwdbuf == NULL) {DIE(”getpwuid”);}if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”);}#endif否则会出现错误:boa.c:211 - getpwuid: No such file or directory。
嵌入式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嵌 入 式
嵌入式Web服务器BOA实现原理
嵌入式Web服务器BOA实现原理
.嵌入式W eb服务器BOA实现原理
BOA是一款非常小巧的Web服务器,源代码开放、性能优秀、支持CGI通用网关接口技术,特别适合应用在嵌入式系统中。
BOA服务器主要功能是在互联嵌入式设备之间进行信息交互,达到通过网络对嵌入式设备进行监控,并将反馈信息自动上传给主控设备的目的。
它是基于HTTP超文本传输协议的,Web 网页是Web服务最基本的传输单元。
嵌入式Web服务的工作基于客户机/服务器计算模型,由Web浏览器(客户机)和Web服务器(服务器)构成,也即著名的B/S结构。
运行于客户端的浏览器首先要与嵌入式Web 服务器BOA端建立连接,打开一个套接字虚拟文件,此文件建立标志着SOCKET连接建立成功然后客户端浏览器通过套接字SOCKET以GET或者POST参数传递方式向Web服务器提交请求,Web浏览器提交请求后,通过HTTP协议传送给Web服务器。
Web服务器接到请求后,根据请求的不同进行事务处理,返回HTML文件或者通过CGI调用外部应用程序,返回处理结果。
服务器通过CGI与外部应用程序和脚本之间进行交互,根据客户端浏览器在请求时所采用的方法,服务器会搜集客户所提供的信息,并将该部分信息发送给指定的CGI扩展程序,CGI扩展程序进行信息处理并将结果返回给服务器,然后服务器对信息进行分析,并将结果发送回客户端在浏览器上显示出来。
boa服务器的移植
boa服务器的移植boa Web服务器是一个单任务http服务器,源代码开放、性能高。
下载地址:/Cgic库文件:cgic205.tar.gz 。
下载地址:/cgic/交叉编译器版本:arm-none-linux-gnueabi-gcc一、编译配置boa服务器1 、[root@localhost /]#mkdir web//在根目录下创建web目录2 、[root@localhost /]# cd /web/3 、[root@localhost web]# rz4 、[root@localhost web]# tar –zxvf boa-0.94.13.tar.gz//将源码解压到/web目录下5 、[root@localhost web]# cd boa-0.94.13/6 、[root@localhost boa-0.94.13]# cd src/7 、[root@localhost src]# ls8 、[root@localhost src]# ./configure//运行./configure使之生成Makefile文件9 、[root@localhost src]# vi Makefile修改内容如下:把CC=gcc 和CPP=gcc -E改写成CC=arm-none-linux-gnueabi-gccCPP=arm-none-linux-gnueabi-g++ -E10 、[root@localhost src]# vi compat.h在一般模式下输入:set nu显示行编号,再用120进到120行,修改内容如下:120 #define TIMEZONE_OFFSET(foo)foo##->tm_gmtoff改为define TIMEZONE_OFFSET(foo) foo->tm_gmtoff 把120行foo后两个#号去掉11 、[root@localhost src]# make//编译12 、[root@localhost src]# arm-linux-strip boa //优化boa可执行文件(此步非必须)13 、[root@localhost web]# cd boa-0.94.13/14 、[root@localhost boa-0.94.13]# vi boa.conf //修改boa的配置文件在一般模式下输入:set nu显示行编号,再用111进到111行,修改内容如下:把111 DocumentRoot /var/www改为111 DocumentRoot /var/www//指明html文件所放的路径把193 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/改为193 ScriptAlias /cgi-bin/ /var/www/cgi-bin///指明cgi脚本的虚拟路径所对应的实际路径15、将/src目录下新生成的boa文件下载到目标板的/bin目录下,将boa.conf文件下载到目标板的/etc/boa/目录下。
实验七网络服务器 Boa 实验
实验七网络服务器 Boa 实验一、实验目的学会嵌入式Web 服务器Boa 的移植;学会使用Boa 服务器。
二、实验设备硬件:EduKit-IV 嵌入式教学实验平台、Mini2410 核心子板、PC 机;软件:Windows 2000/NT/XP、Ubuntu 8.04、其他嵌入式软件包。
三、实验内容下载Boa 服务器程序的源码,完成Boa 程序的移植;修改Boa 的配置,使其能够支持CGI 程序的执行;运行和测.Boa 服务器。
实验步骤:下面介绍如何进行BOA 实验(工作目录$WORKDIR 为:/usr/local/src/EduKit-IV/,$SIMPLEDIR 为:$WORKDIR/Mini2410/simple):1)设置环境变量(工作目录$WORKDIR 为:/usr/local/src/EduKit-IV/,$SIMPLEDIR 为:$WORKDIR/Mini2410/simple):$ source /usr/local/src/EduKit-IV/Mini2410/set_env_linux.sh$ source /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/path.sh2)进入到Madplay 播放器实验目录,并解压相应工具包及库:$ cd $SIMPLEDIR/11.1-boa$ tar zxvf boa-0.94.13.tar.gz3)配置boa 生成Makefile:$ cd boa-0.94.13/src$ ./configure --host=arm-linux --target=arm-linux4)修改源码文件:修改$SIMPLEDIR/11.1-boa/boa-0.94.13/src/Makefile:修改:CC = gccCPP = gcc -ECC = arm-linux-gccCPP = arm-linux-gcc -E修改$SIMPLEDIR/11.1-boa/boa-0.94.13/src/compat.h:修改:#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff为:#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff修改$SIMPLEDIR/11.1-boa/boa-0.94.13/src/boa.c:修改:if (setuid(0) != -1) {DIE("icky Linux kernel bug!");}为:// if (setuid(0) != -1) {//// }DIE("icky Linux kernel bug!");5)修改完源码文件后输入命令开始编译源码:$ make$ arm-linux-strip boa6)修改boa 配置文件$SIMPLEDIR/11.1-boa/boa-0.94.13/boa.conf:修改:User nobodyGroup nogroup为:User rootGroup root修改:#ServerName .hereServerName 修改:DocumentRoot为:DocumentRoot /www修改:ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/为:ScriptAlias /cgi-bin/ /www/cgi-bin/7)准备BOA 实验必备源码并拷贝到$NFSDIR 目录(实验中将通过ftp 服务加载到实验平台运行的 linux 上)。
(完整版)嵌入式Web服务器Boa的移植及其应用毕业设计
嵌入式Web 服务器Boa 的移植及其应用中文摘要计算机技术发展到今天,嵌入式系统的应用越来越广泛嵌入式计算机在应用数量上远远超过了各种通用计算机,一台通用计算机的外部设备中就包含了5-10个嵌入式微处理器。
而随着网络技术日新月异的发展,各种网络器件成为嵌入式系统新的应用。
微处理器产生后,价格低廉、结构小巧的CPU和外设连接提供了稳定可靠的硬件架构。
20世纪90年代,ARM 32位嵌入式RISC处理器扩展到世界范围,占据了低功耗、低成本和高性能的嵌入式系统应用领域的领先地位。
Linux因其可应用于多种硬件平台;是免费软件,源代码可以得到;微内核,本身内置网络支持和高度模块化等优点,非常适合做嵌入式开发的操作系统。
本论文主要研究了基于ARM的嵌入式Linux开发。
这个研究开发是在实践的基础上完成的,设计了以三星ARM920T CPU为核心的嵌入式硬件系统,并在此基础上嵌入linux系统,在linux系统上可以开发各种应用关键词:嵌入式、ARM9、BOA、RISCEmbedded Web server Boa transplantand applicationABSTRACTWith the rapid development of computer technology, embedded system is moreand more widely used. By now, embedded computer system is much more thancommon computer in quantity, there are about 5-10 microprocessor in the peripheralequipment of a computer. At the mean time, lots of network equipments become thenew application environment of embedded system since the progressivelydevelopment of network technology. The cheap and powerful microprocessors andvarious kinds of peripheral equipments spread to the range of the world, andoccupied in the field of application of low consumption, low cost and and application performance, Linux isrunning on many kinds of design in kernel.Therefore Linux is very suitable to be the operate system of embedded system.In this thesis, the embedded Linux system based on ARMdeveloped.The embedded in linux system can be developed.Keywords: Embedded、ARM9、BOA、RISC毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff 防止在make 时出现如下错误提示: util.c:100:1: pasting "t" and "->" does not give a valid preprocessing token。
该文件目前在虚拟机的/opt/boa-0.94.13。
下面修改boa.conf文件:
1、修改用户与用户组信息
第48行:User nobody
第49行:Group nogroup
改为:第48行: User 0
第49行:Group 0
在根文件系统中的/etc/passwd 文件中没有nobody 用户,所以设成
Boa编译
10、编译boa #make 至此,在src 目录中将得到交叉编译后的boa 程序。
修改BOA配置信息
BOA的配置信息都保存在文件boa.conf中,故该文件是 BOA的配置文件,该文件是最终要放在实验箱的 /gec/web目录下,BOA默认在该路径下读取相关的所有 配置信息。
第74行:Accesslog /var/log/boa/access_log
改为:#Accesslog /var/log/boa/access_log
3、第94行,打开ServerName 的设置: 将#ServerName .here 前面的#号去 掉,该项默认为未打开,执行Boa 会异常退出,提示 “gethostbyname::No such file or directory”,所以必 须打开。
CGI应用程序的工作原理
1、CGI 应用程序读取从Web 服务器传递 来的各种信息,并对客户端的请求进行 解释和处理,如:使用SQL 语句来检索 或者更新数据库。
2、CGI 应用程序将处理结果按照CGI 规 范返回给Web 服务器,Web 服务器会对 CGI 应用程序的处理结果进行解析,并 在此基础上生成HTTP 响应信息返回给客 户端。
任务一、嵌入式Web服务器 BOA编译与移植
BOA介绍
Boa是一个单任务HTTP服务器,与其他Web 服务器(IIS、APACHE、WEBLOGIC、 WEBSPHERE、TOMCAT、JBOSS等)相比, 不同之处是当有连接请求到来时,它既不是为 每个连接都单独创建进程,也不是采用复制自 身进程处理多链接,而是通过建立HTTP请求 列表来处理多路HTTP连接完成的功能包括接受客户端请求、分析请求、响 应请求、向客户端返回请求处理的结果等。 BOA的工作流程如下: 1、修正BOA服务器的根目录。 2、读配置文件(boa.conf)。 3、写日志文件。 4、初始化Web服务器,包括创建环境变量、创建TCP套接字、绑定端口、 开始侦听、进入循环结构,以及等待和接收客户的连接请求。 5、当有客户端连接请求到达时,Web服务器负责接收客户端请求,并保存 相关请求信息。 6、收到客户端的连接请求之后, Web服务器分析客户端请求,并保存相关 请求信息。 7、 Web服务器处理完客户端的请求后,向客户端发送响应信息,最后关闭 与客户机的TCP连接。
Boa编译
9、修改boa.c文件 注释掉下面句话(第210行至第215行):
否则会出现错误: getpwuid: No such file or directory 注释掉下面语句:
否则会出现错误: - icky Linux kernel bug!: No such file or directory
同时,它只为CGI程序创建新的进程,在最大 程度上节省了系统资源,这对资源受限的嵌入 式系统来说至关重要。它还具有自动生成目录、 自动解压文件等功能,因此,BOA具有很高的 THHP请求处理速度和效率,应用在嵌入式系 统中具有很高的价值。
BOA服务器原理
1、服务器软件(BOA)始终在HTTP 端口守候客户端的连接请求 ,当客户端向服务器发起一个连接请求后,客户端和服务器之间 经过“三步握手”建立起连接。
嵌入式Web服务器软件构成与工作原理图
Boa WebServer的下载
下载bao0.94.13.tar.gz
Boa编译
1、把boa-0.94.13.tar.gz放到虚拟机/opt 2、#tar xvzf boa-0.94.13.tar.gz 3、#cd boa-0.94.13 4、#cd src 5、利用configure 工具配置生成Makefile 文件
2、在接收到客户端的HTTP 请求消息后,服务器对消息进行解析 ,包括:读取请求URL、映射到对应的物理文件、区分客户端请 求的资源是静态页面还是CGI 应用程序等。
3、如果客户请求的是静态文件,那么服务器读取相应的磁盘文 件,并将其作为HTTP 响应消息中的实体返回给客户端,如果客 户端请求的是CGI 应用程序,那么服务器将创建相应的CGI 应用 程序进程,并将各种所需信息(客户端请求信息、服务器端相关 信息等)按CGI 规范传递给CGI 应用程序进程,此后由CGI 应用 程序接管控制。
#./configure 6、修改生成的Makefile 文件的第31行、第32行(设置交叉编
译器),将
修改为:
Boa编译
7、修改defines.h 文件的第30行 将#define SERVER_ROOT “/etc/boa” 修改为:#define SERVER_ROOT “/gec/web”
0。
在根文件系统中的/etc/group 文件中没有nogroup 组,所以设成0。
修改BOA配置信息
2、相关日志文件存放位置项,保留将保存日志文件, 根据需要可以选择是否注释掉
第62行:Errorlog /var/log/boa/error_log 改为:#Errorlog /var/log/boa/error_log