信盈达嵌入式web服务器boa移植到mini2440开发板详细过程陈工1/7嵌入式web服务器boa移植到mini2440开发板详细过程1、概述为了和开发板上用的httpd服务,我选用的服务器是boa,boa已经没有更新了,但是现在的应用仍然很大,当然更先进的AppWeb当然是更好的选择,不过学习应先从简单的入手。本教程使用环境是RedHatEnterpriseLinux6,交叉编译工具是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.13boa-0.94.13.tar.gz2)为了和X86版本区别把解压出来的文件夹boa-0.94.13重新命名为boa-0.94.13_arm[root@localhostopen_source]#mvboa-0.94.13boa-0.94.13_arm4.编译前修改工作(主要是因为boa太久没有更新,目前相对说比较老,要修改下才能通过编译)1)修改vicompat.h文件[root@localhostopen_source]#lsboa-0.94.13_armboa-0.94.13.tar.gz[root@localhostopen_source]#cdboa-0.94.13_arm/src/[root@localhostsrc]#vicompat.h找到#defineTIMEZONE_OFFSET(foo)foo##-tm_gmtoff修改成#defineTIMEZONE_OFFSET(foo)(foo)-tm_gmtoff即将120行和126行的foo##-tm_gmtoff改为foo-tm_gmtoff否则会出现错误:util.c:100:1:error:pastingtand-doesnotgiveavalidpreprocessingtokenmake:***[util.o]错误12)修改src/log.c注释掉if(dup2(error_log,STDERR_FILENO)==-1){DIE(unabletodup2theerrorlog);}信盈达嵌入式web服务器boa移植到mini2440开发板详细过程陈工2/7为:/*if(dup2(error_log,STDERR_FILENO)==-1){DIE(unabletodup2theerrorlog);}*/否则会出现错误:log.c:73unabletodup2theerrorlog:badfiledescriptor3)修改src/boa.c注释掉下面两句话:if(passwdbuf==NULL){DIE(”getpwuid”);}if(initgroups(passwdbuf-pw_name,passwdbuf-pw_gid)==-1){DIE(”initgroups”);}为#if0if(passwdbuf==NULL){DIE(”getpwuid”);}if(initgroups(passwdbuf-pw_name,passwdbuf-pw_gid)==-1){DIE(”initgroups”);}#endif否则会出现错误:boa.c:211-getpwuid:Nosuchfileordirectory。注释掉下面语句:if(setuid(0)!=-1){DIE(”ickyLinuxkernelbug!”);}信盈达嵌入式web服务器boa移植到mini2440开发板详细过程陈工3/7为#if0if(setuid(0)!=-1){DIE(”ickyLinuxkernelbug!”);}#endif否则会出现问题:boa.c:228-ickyLinuxkernelbug!:Nosuchfileordirectory5、配置boa服务器,编辑boa-0.94.13目录下的boa.conf文件,按如下配置:修改:Usernobody(48行)为:User0#用户修改:Groupnogroup(49行)为:Group0#用户组修改Group的参数为0是因为系统中没有nogroup组,如果你没有nobody用户,那么Usernobody也要做相应修改(修改成自己的用户名亦可)。其它采用默认设置。如有必要,可以参看附录中的参数说明。ServerNamechenzhifa#(94行)服务器名字,这里默认是注释掉的,一定要去掉注释DocumentRoot/var/(111行)为HTML文件目录ScriptAlias/cgi-bin//var/(193行)CGI程序目录注意ScriptAlias项ScriptAlias/cgi-bin//var/是错的,要改为ScriptAlias/cgi-bin//var/就相差一个/,否则测试cgi程序时,在浏览器地址栏中输入192.168.1.99/cgi-bin/cgi-hello.cgi会出现以下错误:TherequestedURL/cgi-bin/cgi-hell.cgiwasnotfoundonthisserver.6.生成Makefile文件,并修改其中的交叉编译器[root@localhostboa-0.94.13_arm]#cdsrc/[root@localhostsrc]#./configure[root@localhostsrc]#viMakefile修改编译器:第31行,32行31CC=gcc32CPP=gcc–E为,保存并退出。7.编译:信盈达嵌入式web服务器boa移植到mini2440开发板详细过程陈工4/7[root@localhostsrc]#make8.复制编译得到的可执行文件到根文件系统:[root@localhostsrc]#cpboa/opt/s3c2440/root_nfs/bin/9.修改boa服务器程序权限(给最大权限):[root@localhostboa-0.94.13_arm]#chmod777/opt/s3c2440/root_nfs/var/在根文件系统中创建服务器目录(和boa中的相同)[root@localhostsrc]#mkdir/opt/s3c2440/root_nfs/var[root@localhostsrc]#mkdir/opt/s3c2440/root_nfs/var/[root@localhostsrc]#mkdir/opt/s3c2440/root_nfs/var/复制配置文件到根文件系统中/etc/boa/目录中,注意boa目录要自动先创建[root@localhostsrc]#cd../[root@localhostboa-0.94.13_arm]#mkdir/opt/s3c2440/root_nfs/etc/boa[root@localhostboa-0.94.13_arm]#cpboa.conf/opt/s3c2440/root_nfs/etc/boa/12.复制mime.types文件到根文件系统的中etc文件夹中。(mime.types为x86主机/etc/目录下的文件,里面内容是Linux下文件类型对应的处理程序)[root@localhostboa-0.94.13_arm]#cp/etc/mime.types/opt/s3c2440/root_nfs/etc/13.创建boa日志存放目录和日志文件,需要手动创建(路径要和boa中的配置相同)[root@localhostboa-0.94.13_arm]#mkdir/opt/s3c2440/root_nfs/var/log[root@localhostboa-0.94.13_arm]#mkdir/opt/s3c2440/root_nfs/var/log/boa[root@localhostboa-0.94.13_arm]#touch/opt/s3c2440/root_nfs/var/log/boa/access_log14.编译测试程序,cgi-hello.c(本人要当前目录中建了一个test文件夹,其中存放了测试的cgi-hello.c文件)[root@localhostboa-0.94.13_arm]#arm-linux-gcc-otest/cgi-hello.cgitest/cgi-hello.ctest/cgi-hello.c:Infunction'main':test/cgi-hello.c:5:warning:returntypeof'main'isnot'int'15.复制生成的cgi测试程序到根文件系统中存放boa服务器目录下的cgi-bin目录下(cgi程序全部要放在这个目录下):[root@localhostboa-0.94.13_arm]#cptest/cgi-hello.cgi/opt/s3c2440/root_nfs/var/附cgi-hello.c源码:#includestdio.h#includeunistd.hvoidmain(){printf(Content-type:text/html\n\n);//注意这里要两个换行符,这是HTML的规定信盈达嵌入式web服务器boa移植到mini2440开发板详细过程陈工5/7printf(\n);printf(htmlheadtitleCGITEST/title/head);printf(body);printf(h1BOACGITEST/h1);printf(h2huyi/h2);printf(Hello\n);printf(/body/html);}16.测试boa服务器cgi程序支持功能1)启动mini2440开发板,挂接上根文件系统后,在超级终端中启动boa服务器程序如下:lib80211:commonroutinesforIEEE802.11driverss3c2410-rtcs3c2410-rtc:settingsystemclockto2008-09-1212:17:36UTC(1221221856)eth0:linkdownIP-Config:Complete:device=eth0,addr=192.168.1.99,mask=255.255.255.0,gw=192.168.1.1,host==,nis-domain=arm.com,bootserver=192.168.1.102,rootserver=192.168.1.102,rootpath=LookingupportofRPC100003/2on192.168.1.102eth0:linkup,100Mbps,full-duplex,lpa0xC1E1LookingupportofRPC100005/1on192.168.1.102VFS:Mountedroot(nfsfilesystem)ondevice0:12.devtmpfs:mountedFreeinginitmemory:132KPleasepressEntertoactivatethisconsole.#boa以下为成功的提示信息[12/Sep/2008:11:25:52+0000]boa:serverversionBoa/0.94.13[12/Sep/2008:11:25:52+0000]boa:server