2410下boa web服务器移植
基于linux2.6及S3C2410上的BOA的移植

关键词:BA: G ; O C I 移植: 3 2 1 Sc 4 O
中图分类号 : 文献标识码:A 文章编号 :1 7 — 7 2 (0 73 0 3 — 2 6 1 4 9 一 2 0 )— 0 6 0
Ab t c: o t n n e b d e e s r e n t e b a d o ¥ c 4 0 a d 1 n x 2。 e n l S e c n r n a w b sr t P r i g a m e d d w b e v r o h o r f 3 2 1 n i u 6 k r e o w a u e a
mi me. p ty es
BA o就是—个非常小巧的快速和安全的单任务嵌入式 Wb e
服务器 ,可执行代码只有 约 6 K 。只能依 次完成用户的请 0B
求, 但 B A 。 O 支持 C I G ,能够为 C I G 程序 f r o k出一个进程来执
行。 1 8 OA 的工 作 原理
ba O 9 / r/ o - .4s c  ̄录,运行 .cn iu e生成Mk f l文件 。 /ofgr, a e ie () 1修改 b a O 9 /a e ie文件 o- .4 M k f 1 修改编译器 :
C C=/ s/ o a / r / i/ r— u- c u r lc la m b n a m l n x g c i
根文件系统为 b sb x . . ; u yo 1 I3 文件系统 y f s af ; 英培特公司 s c4 0 3 2 1 开发板及附属器件。 BA O 介绍 :
I — —
I — —
c ib n g— i
h m t1
Iid x hm ( — e .t l默认静态页面) n 注 :m f l y ie
移植web服务器boa出现的问题

移植web服务器boa出现的问题通过两天的努力终于可以通过pc机网页浏览板子上的资源了。
现在将遇到的问题归纳如下:1、修改src/boa.c注释掉下面语句:if (setuid(0) !=-1){DIE(”icky Linux kernel bug!”);}即修改为:#if 0if(setuid(0) != -1){DIE(”icky Linux kernel bug!”);}#endif否则运行boa时会提示boa.c:226 - icky Linux kernel bug!: No suchfile or directory错误2. make在当前目录下生成一个boa的可执行程序,./boa运行即可,ps能看到boa的进程即说明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_gmtoff3.访问端口号设置大概25左右:Port 80,可以设定我们访问网页时的端口号默认为80—访问时无需指定假如改变了此端口号为8080,必须以下列格式访问: http://192.168.1.3:8080只能在超级终端输入boa一次,如果启动两次,就会出现端口被占用的情况。
友善之臂移植的文件系统中已经在系统启动时已经启动该服务,所以不用再启动一次(具体可查看你的系统启动信息)。
所以如果你用移植好的文件系统,默认情况已经启动,不用再boa。
4、编译capture和cgitest时,修改makefile,在cflags后面加上-static,目的是为了静态编译capture和cgitest,我想应该是我的板上没有它动态运行时的库文件,或者指定的库文件路径不对(还没检查),不过这样编译生成的文件就很大。
嵌入式WEB服务器在ARM-Linux上的移植全过程-::电子爱好者天地::.-西...

嵌入式WEB服务器在ARM-Linux上的移植全过程-::电子爱好者天地::.-西...因为要用,所以查了一些资料,再结合自己的实际情况,在ARM板子上做了一个WEB服务器,服务器可以通过CGI进行动态交互.现记录于此.主机:redhat企业版4目标板:EBD9260-S(内核版本2.6.19)主机IP:192.168.0.12目标板IP:192.168.0.11交叉编译环境已经设置好.由于ARM资源的限制,不可能将一些大型的服务器移植上去,对脚本的支持也不大可能,开源的boa就是这么一个服务器:可以传送静态网页和通过纯CGI的方式进行交互.步骤:1.从上下载boa的源码,目前版本是boa-0.94.132.tar -xzvf boa-0.94.13cd boa-0.94.13/src./configure,生成Makefile3.vi Makefile,修改:CC=armv5l-linux-gccCPP=armv5l-linux-gcc -E保存退出4.make,出现错误:util.c:100:1:pasting "t" and "->" does not give a valid preprocessing token5.修改compat.h中:#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff#define TIMEZONE_OFFSET(foo) foo##->tm_zone为:#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff#define TIMEZONE_OFFSET(foo) (foo)->tm_zone 6.还有一个错误需要修改:将boa.c中的if(setuid(0)!=-1){DIE("icky Linux Kernel bug!");}将这三行注掉,不然编译不会出错,但是启动不起来7.重新make,生成可执行文件boa8.剥去调试信息:armv5l-linux-strip boa9. 修改boa-0.94.13目录中的boa.conf:port 80user 0group 0Errorloog /var/log/boa/error_logAccesslog /var/log/boa/access_logserver Name Document Root /var/wwwDirectaryIndex index.htmlKeepAliveMax 1000KeepAliveTimeOut 10Mimetypes /etc/mime.typesDefaultType text.plainCGIPATH /bin:/usr/bin:/usr/local/binAlias /doc /usr/docScriptAlias /cgi-bin/ /var/www/cgi/bin/10:在目标板上:mkdir /var/wwwmkdir /var/www/cgi-binmkdir /var/log/boamkdir /etc/boa通过ftp或者nfs的方式将主机下的/etc/mime_types.h传到目标板/etc下将刚才修改的boa.conf传到/etc/boa下将生成的boa可执行文件传到/usr/bin下制作index.html,将其传到目标板/var/www/下11.在目标板上启动boa,在主机上的浏览器中输入:http://92.168.0.11就可以看到index.html的内容了,如果看到,则说明boa移植成功了12.测试cgi.编写hello.cgi:#include <stdio.h>int main(void){printf("Conten-type:text/html\n\n");printf("<html>\n");printf("<head><title>CGI OUTPUT</title></head>\n");printf("<body\n>");printf("<h1>Hello,xibiren!</h1>\n");printf("</body>\n");printf("</html>\n");exit(0);}然后armv5l-linux-gcc -o hello.cgi hello.c生成hello.cgi,将其传输到目标板上/var/www/cgi-bin/目录下13.在主机浏览器中输入http://192/168.0.11/cgi-bin/hello.cgi如果能看到:Hello,xibiren!的测试界面,则说明cgi测试通过.//****----------------//要想进一步用好boa的cgi功能,还必须移植CGIC库.下次再写了.//****----------------//按照上面的步骤执行之后,需要重新制作文件系统,才能在下此开机之后能够使用.//****-----------------//。
嵌入式WebServer GOAHEAD移植实验

实验十五嵌入式WebServer GoAhead 移植实验一,实验目的完成这个实验后,您将具有以下能力:⏹ 了解GoAhead webserver 的移植方法。
⏹ 学习如何使用GoAhead web 服务器。
二,基础知识进行本实验前,您应具有:⏹ C 语言基础⏹ Linux 环境下vi 编译器的使用⏹ Makefile 的编写和使用⏹ Linux 下的程序编译与交叉编译过程三,实验环境准备为了完成本实验,以下硬件条件是必需的:⏹ UP-NETARM2410-S 嵌入式实验平台⏹ PC 机Pentium500 以上,硬盘40G 以上,内存128M 以上为了完成本实验,以下软件条件是必需的:⏹ PC 机操作系统RedHat Linux 9.0⏹ ARM-LINUX 开发环境⏹ webs218.tar.gz 压缩包四,情景描述下载webs218.tar.gz 压缩包并且解压,之后对LINUX 目录下的main.c 程序和Makefile 进行改造,并且通过交叉编译器进行编译。
将生成的webs 程序在开发板上执行并测试。
五,实验基本原理1,GoAhead Webserver 介绍GoAhead Webserver是为了嵌入式设备的需要而设计的。
该Webserver软件很有特色且开源,它具有各种各样的特性,包括支持活动服务页,嵌入Java描述语言,in-process CGI 形式,SSL,文摘访问认证,用户管理和标准CGI等等,这些全部在一个60K大小的存储脚本中。
这对于那些需要在基于浏览管理模式的设备上传递动态信息的系统管理开发人员来说,是非常有用和高效的。
GoAhead Webserver支持多种开发平台和操作系统,包括Windows NT/98/95、Windows CE、Embedded Linux、Linux、VxWorks、QNX、Lynx等等,因此具有很强大的移植特性。
GoAhead 网络服务器的发展同时也促进了嵌入式网络服务器的源代码的进化。
嵌入式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两个文件。
嵌入式Web服务器Boa移植.ppt

修改成#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”,所以必 须打开。
基于linux2_6及S3C2410上的BOA的移植

boa: server version Boa/0.94.13
[01/Jan/1970:00:00:09 +0000]
boa:server built Feb28 2007 at 20:48:20
[01/Jan/1970:00:00:09 +0000]
boa: starting server pid=700, port 80
中图分类号:
文献标识码:A
文章编号:1671-4792-(2007)3-0036-02
Abstract: Porting an embedded web server on the board of S3c2410 and linux 2.6 kernel So we can run a web
server which can support the CGI and dynamic html pages. Users can control and manger the embedded equipments
的
(3)把 /root/rootfs/mnt/etc/fstab 拷贝到 /root/
rootfs_hjp/etc/下
的
在/root/rootfs_hjp/etc/init.d/rcS 文件中加入如下
移 植
内容:
/bin/mount -a
// 加载 fstab 文件内的内容
测试 boa 的运行:
[01/Jan/1970:00:00:09 +0000]
测试静态页面:
在 pc 机的浏览器内输入开发板内核的 ip 地址就能看到
默认的 index.html 网页(/root/myfilet/myboa/server/
html/index.html)。
嵌入式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 下面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011.1移植过程参考网上文章,遇到诸多问题,最后在如下转载的帖中看到相同的,参考修改后移植成功。
没有挂在NFS做为文件系统,所以其中的NFS中的文件操作是在对应的文件系统中,过程类似boa成功移植到S3C2410开发板上一:下载源码:/[root@localhost ~]# cd /usr/src[root@localhost src]# tar zxvf boa-0.94.13.tar.tar[root@localhost src]# cd boa-0.94.13[root@localhost boa-0.94.13]# cd src[root@localhost src]# ./configure二:编译前修改的文件:1. 修改Makefile文件,找到CC=gcc和CPP=gcc -E,分别将其改为交叉编译器安装的路径: CC=/usr/local/arm/2.95.3/bin/arm-linux-gccCPP=/usr/local/arm/2.95.3/bin/arm-linux-gcc –E保存退出。
2. 修改编译方式:LDFLAGS = -g –static注: 使用静态编译可以让目标文件自动的包含所需要的库文件,而动态编译需要手工拷贝库文件。
3.修改/src/defines.h文件:#define SERVER_ROOT "/etc/boa"4 修改boa-0.94/src/ util.c文件修改char *get_commonlog_time(void)函数。
time_offset = 0;5. 修改src/config.c:加Current_uid=16. 修改compat.h:把第120 行的#defineTIMEZONE_OFFSET(foo)foo##->tm_gmtoff修改为:#defineTIMEZONE_OFFSET(foo)foo->tm_gmtoff其中3,4,5,6项我用的版本不用修改不会出错7.修改/src/boa.c,注释掉下面两行:/* if (setuid(0) != -1) {DIE("icky Linux kernel bug!");} *//*if (passwdbuf == NULL) {DIE("getpwuid");}*/8 gethostbyname:: Resource temporarily unavailable这个问题我也遇到过,我只是把src文件夹下的config.c里的if(!server_name){..........}(大概在266行到286行之间)注释掉,就能运行在板子上运行boa,到现在为止没有遇到过是么问题。
但不知道以后会不会有问题。
解决:config.c/*if (!server_name) {struct hostent *he;char temp_name[100];if (gethostname(temp_name, 100) == -1) {perror("gethostname:");exit(1);}he = gethostbyname(temp_name);if (he == NULL) {perror("gethostbyname:");exit(1);}server_name = strdup(he->h_name);if (server_name == NULL) {perror("strdup:");exit(1);}}*/9. /src/log.c中的修改:注释掉:/* if (dup2(error_log, STDERR_FILENO) == -1) {DIE("unable to dup2 the error log");} */10. 在boa.conf中的修改:(1)ServerName的设置修改#ServerName .here为ServerName .here注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory”,所以必须打开。
其它默认设置即可。
注意:以下是为改为下面这样的:(2)User与Group的修改:User 0Group 0(3)ErrorLog /var/log/boa/error_logAccessLog /var/log/boa/access_log(4)DocumentRoot /var/www(5)DirectoryIndex index.html(6)KeepAliveMax 1000KeepAliveTimeout 10(7)MimeTypes /etc/mime.types(8)ScriptAlias /cgi-bin/ /var/www/cgi-bin/如上各项改成列出的,其它的可以不用改,如果出问题可以尝试屏蔽然后调试。
11. 此外,还需要将mime.types文件复制目标板根文件系统/etc目录下,通常可以从linux 主机的/etc目录下直接复制即可,我重烧了几次的,要是不想重烧,可以拷到共享目录/home下,不过要重新将/home mount到/etc上。
三:运行make进行编译,得到可执行的程序boa[root@localhost boa-0.94.13]# cd /arms3c2410/boa/boa-0.94.13/src[root@localhost src]# make cleanrm -f y.tab.o lex.yy.o alias.o boa.o buffer.o cgi.o cgi_header.o config.o escape.o get.o hash.o ip.o log.o mmap_cache.o pipe.o queue.o read.o request.o response.o select.o signals.o util.o sublog.o timestamp.o boa core lex.yy.c y.tab.c y.tab.h *~ boa_indexer index_dir.o[root@localhost src]# make去掉调试信息: #/usr/local/arm/2.95.3/bin/arm-linux-strip boa四:配置文件的修改:1. 我用的是NFS共享文件方式,在将PC机新建一个目录:/nfs,用webmin将/nfs和/home 设置为与目标板可以共享的目录。
2. 在/nfs下新建log和www目录:[root@localhost ~] # mkdir /nfs/log[root@localhost ~] # mkdir /nfs/www[root@localhost ~] # mkdir /nfs/log/boa[root@localhost ~] # mkdir /nfs/www/cgi-bin将/usr/share/doc/HTML目录下的img目录和index.html文件拷到/nsf/www下[root@localhost ~] # chmod 777 /nfs/log/*[root@localhost ~] # chmod 777 /nfs/www/*3. 在/home下新建目录boa[root@localhost ~] # mkdir /home/boa将编译得出的可执行文件/boa-0.94.13/src中的boa文件,/boa-0.94.13/src中的defines.h文件,/boa-0.94.13中的boa.conf文件拷到/home/boa下[root@localhost ~] # chmod 777 /home/*4. 将/nfs和/home/boa分别mount到目标板上的/var和/etc/boa上:[root@(none) /]# ifconfig eth0 10.10.205.245[root@(none) /]# mount -o nolock -t nfs 10.10.205.242:/home/boa /etc/boanfs warning: mount version older than kernel[root@(none) var]# mount -o nolock -t nfs 10.10.205.242:/nfs /varnfs warning: mount version older than kernel五:运行:[root@(none) boa]# ./boa[01/Jan/1970:00:03:19 +0000] caught SIGSEGV, dumping core in /tmpAborted解决:这个问题一直困扰了我N长,今天才解决,原以为问题出在开发板上,原来一直在刚开始的/usr/src/boa-0.94.13/src的Makefile上面:将CC=/usr/local/arm/2.95.3/bin/arm-linux-gccCPP=/usr/local/arm/2.95.3/bin/arm-linux-gcc –E改为:CC = /usr/local/arm/3.4.1/bin/arm-linux-gccCPP = /usr/local/arm/3.4.1/bin/arm-linux-g++也遇到这个问题,搞了一天没搞定,郁闷,查资料看到的出现内存错误的有下列几种1.文件系统中的库不全,有人用开发板自带的库就可以,后来调整自己文件系统的库2.函数指针错误,修改源码过程造成3.交叉编译器问题,就如这个。
重新编译:[root@localhost src]# make clean[root@localhost src]# makebison -y -d boa_grammar.y/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I. -c -o y.tab.o y.tab.cy.tab.c: In function `yyparse':y.tab.c:1295: warning: implicit declaration of function `yylex'flex boa_lexer.l/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I. -c -o lex.yy.o lex.yy.c。