嵌入式Web服务器Boa移植.ppt
- 格式:ppt
- 大小:364.00 KB
- 文档页数:33
嵌入式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服务器搭建和移植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 服务器是⼀个⼩巧⾼效的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使⽤。
嵌入式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。
基于嵌入式的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 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开发板详细过程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。