大家好,我是极客范的本期栏目编辑小友,现在为大家讲解基于嵌入式linux的Boa服务器移植问题。
Boa是一个非常小的Web服务器,其可执行代码只有60KB左右。作为单任务Web服务器,Boa只能轮流完成用户的请求,而不是分出新的进程来处理并发的连接请求。但是Boa支持CGI,可以创建一个进程让CGI程序分叉执行。宝儿的设计目标是速度和安全。
下面简单介绍一下Boa服务器移植的具体操作步骤,希望能有所帮助。
环境:ubuntu8.10跨工具链:gcc-3.4.5-glibc-2.3.6目标:s3c2410开发板
结合一些网上文献,整理出了一份比较完整的文献。
1.下载Boa源代码
下载地址: http://www.boa.org/
最新版本:0.94.13
下载boa-0.94.13.tar.gz
解压:#塔尔兹夫boa-0.94.13.tar.gz
2.安装需要工具bison,flex
sudo apt-get安装bison flex
否则,将出现以下错误
Make: yacc:命令找不到make: *** [y.tab.c]错误127
Make: lex:命令未找到make: *** [lex.yy.c]错误127
3.修改文件
(1)修改src/compat.h
发现
#定义时区_偏移量(foo) foo##-tm_gmtoff
修改为
#定义时区_偏移量(foo) (foo)-tm_gmtoff
否则,将会出现错误:
Util.c:100:1:错误3360粘贴“t”和“-”没有给出有效的预处理标记使: * * * [util.o]错误1
(2)修改src/logc
加注释
if (dup2(error_log,STDER _ FILENO)=-1){ DIE('无法dup2错误日志');}
用于:
否则,将会出现错误:
log.c:73无法复制错误日志:错误文件deor
(3)修改员工代表/主管
评论下面两句话:
if(passwdbuf==NULL){ DIE("getpwuid");} if(init group(passwdbuf-pw _ name,passwdbuf-pw _ GID)==-1){ DIE("init group");}
为
# if 0if(passwdbuf==NULL){ DIE("getpwuid");} if(init group(passwdbuf-pw _ name,passwdbuf-pw _ GID)==-1){ DIE("init group");}#endif
否则,将出现一个错误:boa.c:211-getpwuid 3360no这样的文件或目录。
评论以下陈述:
if (setuid(0)!=-1) {DIE(“恶心的Linux内核bug!”);}
为
#if 0if (setuid(0)!=-1) {DIE(“恶心的Linux内核bug!”);}
#endif
否则就会出现问题:boa.c:228-icky Linux内核bug!没有这样的文件或目录
4.生成Makefile文件
执行:
#cd boa-0.94.13/src#。/configure
5.修改Makefile
cd srcvim Makefile
将CC=GCC修改为CC=ARM-softfloat-Linux-GNU-GCC
将CPP=GCC-e修改为CC=ARM-soft float-Linux-GNU-GCC-e。
6.编制
makels-l boa-rwxr-xr-x 1 David David 189223 2009-05-31 13:44 boa
然后精简生成的二进制文件boa。
arm-soft float-Linux-GNU-strip boals-l boa-rwxr-xr-x 1 David David 61052 2009-05-31 13:51 boa
我们可以发现boa的大小有很大的差距,这为我们节省了很多空间。
7.宝儿的配置
这一步的工作也是在主机上完成的。
boa-0.94.13目录中已经有一个boa.conf样例,可以在此基础上进行修改。如下所示:
#vi boa.conf
(1)修改1)组
修改组编号组
组是0吗
(2)修改2)用户
不修改用户
用户是0吗
(3)修改3)别名
修改别名/CGI-bin//usr/lib/CGI-bin/
Is Alias /cgi-bin//www/cgi-bin/
(5)修改5)DoucmentRoot
修改DoucmentRoot /var/www
是DoucmentRoot /www
(6)设置6)服务器名
修改#服务器名www.your.org.here
是服务器名www.your.org.here。
否则,将出现错误“gethostbyname :3360无此类文件或目录”。
(7)访问日志修改
修改访问日志/var/log/boa/access _ log
# access log/var/log/boa/access _ log
否则,将出现一条错误消息:“无法复制错误日志:错误文件”
(8)以下配置与boa.conf的配置相关,都是在ARM根文件系统中创建的。
在开发板上执行以下步骤:
创建目录/etc/boa,并将boa和boa.conf复制到该目录。
mkdir /etc/boa
创建HTML文档的主目录/www
mkdir /www
在目录/www/cgi-bin中创建CGI脚本
mkdir /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。
# CP/etc/mime . type/source/rootfs/etc
将你的主页index.html复制到www目录
8.测试
打开浏览器,输入开发板ip查看效果。
好