嵌入式boa服务器的移植
下载后可任意编辑 嵌入式boa服务器的移植 硬件平台:AT91SAM9G20 开发环境:Vmware+ubuntu10.04 交叉编译器:arm-linux-guneabi- arm-linux-gcc-3.4.1 软件版本:linux2.6.27,boa-0.94.13.tar.gz 一:准备boa服务器源代码 下载地址: 二:安装交叉编译器。 参考网上的嵌入式boa服务器的移植,其中修改boa中Makefile文件的交叉编译器,如: CC = gcc CPP = gcc -E 该为: CC = arm-linux-gcc CPP = arm-linux-gcc -E 先前,在编译内核,文件系统,都是用arm-linux-gnueabi-编译器,因为担心不同的编译器编译的东西,可能不能不兼容,因此,就直接将CC改为arm-linux-gnueabi-,将CPP改为arm-linux-gnueabi-g++,后来出现错误。于是便决定参考网上的方法,安装arm-linux-gcc编译器,试试! 交叉编译器的下载地址:http://handhelds.org/download/projects/toolchain/ 三:移植boa服务器 1:编译boa服务器 ①解压#tar –zxvf boa-0.94.13.tar.gz ②进入boa-0.94.13/src目录,#./configure ③#修改交叉编译器路径 #gedit Makefile CC = gcc CPP = gcc -E 该为: CC = /home/zzq/9G20/tools/usr/local/arm/3.4.1/bin/arm-linux-gcc CPP = /home/zzq/9G20/tools/usr/local/arm/3.4.1/bin/arm-linux-gcc -E LDFLAGS = -g -static(添加静态编译选项)。 ④#make ⑤去除调试信息 #/home/zzq/9G20/tools/usr/local/arm/3.4.1/bin/arm-linux-strip boa 经4,5步之后,便在src目录下生成boa可执行文件。以为这个文件添加到文件系统后,就可以运行,没想到除了一大堆的错误,还好,网上都有这些解决这些问题的办法 2:修改boa.conf文件 ①修改User nobody 为 User 0 ; 修改Group nogroup 为 Group 0 ②设定日志目录:boa日志有两部分,Errorlog 和 AccessLog 一般情况下为/var/log/boa/error_log 和 /var/log/boa/access_log两个文件。所以根据自己的情况情况设置日志目录: ErrorLog /var/log/boa/error_log AccessLog /var/log/boa/access_log (注意:这里/var/log/boa目录必须为可写,否则会出项错误:log.c:73 – Unable to dup2 the error log: Bad file r.) ③设置html文件目录:DocumentRoot /var/www ④设置默认首页: DirectoryIndex index.html ⑤设置cgi脚本目录: 将 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin 修改为 ScriptAlias /cgi-bin/ /var/www/cgi-bin ⑥ServerName的设置 修改#ServerName www.your.org.here/ ServerName www.your.org.here/ (注意:默认未打开,在执行boa会异常退出,提示“gethostbyname::No shuc file or directory”,所以必须打开) 3:将boa服务器到文件系统 ①在开发板文件系统中,创建相应目录 #mkdir -p /var/log/boa #mkdir -p /var/www /var/www/cgi-bin ② 拷贝PC上/etc/mime.types文件到开发板/etc目录下 (或者将boa.conf文件中MimeTypes /etc/mime.types 修改为: MimeTypes /dev/null ) ③将可执行文件boa复制到/bin目录下。 ④将静态网页index.html和img目录放到/var/www目录下。 4:测试 ①通过nfs挂载根文件系统 ②设置开发板ip #ifconfig eth0 192.168.1.1 ③运行boa ④在PC机上输入目标板的ip,即可看到静态网页:index.html。 5:在运行boa时常出现的错误 ① gethostbyname:: No such file or directory 解决办法: 修改boa.conf 去掉 ServerName www.your.org.here 前的注释符号(#) ②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 ③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 ④boa.c:228 - icky Linux kernel bug!: No such file or directory 解决办法: