第一步:从www.boa.org下载Boa源码,将其解压并进入源码目录的src子目录。
# tar xzf boa-0.94.13.tar.gz
# cd boa-0.94.13/src
生成Makefile文件
# ./configure
修改Makefile文件,找到CC=gcc和CPP=gcc
-E,分别将其改为交叉编译器安装的路径CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc和CPP=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc
-E并保存退出。
然后运行make进行编译,得到可执行程序boa
# make
# /opt/host/armv4l/bin/armv4l-unknown-linux-strip boa
boa 编译问题总结
1.编译出现parse.h 找不到,就在boa-0.94.13 下
ln -s src/parse.h parse.h
2.编译器出现pasting “t” and “->” does not give a valid preprocessing token这个错误
经过修改 src/compat.h
找到
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
这是另一种改法,不过没用过,我用第一种
找到time_offset = IMEZONE_OFFSET(t); 改成 time_offset = 0;
这时你就可以用 tftp -g -r boa ip 放入开发板中
Tftp -p -l boa ip 在开发板中将板中的文件发给主机
第二步:Boa的配置。
Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改。
49 行 Group nogroup 修改成 Group 0
62 行 ErrorLog /app/web/log/error_log 改路径 这个很重要,大部分的提示都在这里一定要有,不然有错误也找不到
74 行 AccessLog /app/web/log/access_log 改路径 要是没改即使运行了boa运行不了,也没有任何提示,要在 error_log 中找
94 行 ServerName www.plm5k.com 去掉“#”号
注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory”,所以必须打开。其它默认设置即可。
111 行 DocumentRoot /app/web/html 放网页的地方
155 行 MimeTypes /app/web/conf/mime.types 将主机上的"/etc/mime.types" 放到指定目录中
193 行 ScriptAlias /cgi-bin/ /app/web/cgi-bin/ 将后面的路径改为所要指定的目录
(可以将主机/usr/share/doc/HTML/目录下的index.html文件和img目录复制到、/app/web/html目录下)
第三步:测试
1.静态HTML网页
在目标板上运行boa程序,将主机与目标机的ip设成同一网段,然后打开任一个浏览器(linux或window下都可),输入目标板的ip地址(http://10.10.10.2)即可打开/var/www/index.html网页
./boa -c /app/web/conf 指定boa.conf的配置文档
测试: 写了一个很简单的cgi helloworld.c
#include <stdio.h>
int main(void)
{
printf("Content-type: text/html\n\n");//据说是固定格式
printf("<html>\n");
printf("<head><title>CGI Output</title></head>\n");
printf("<body>\n");
printf("<h1>Hello,world.</h1>\n");
printf("<body>\n");
printf("</html>\n");
exit(0);
}
用arm-linux-gcc编译成helloworld.cgi,放在嵌入式的扳子下面
能够直接执行,即./helloworld.cgi结果正确
但是在pc机上的浏览器里面不能正确浏览,提示错误:
502 Bad Gateway
The CGI was not CGI/1.1 compliant.
原因: 权限问题boa 运行的用户与你shell所在的用户非同一用户,
请用 chmod a+rx 让所有用户都执行权限试下.
同时请修改下 boa 对CGI支持的缺陷, 见:
http://bbs.chinaunix.net/viewthread.php?tid=824840
最后:
如果要将运行用户为 root 则还要改, 首先在 boa.conf 中
48行 User nobody 改为 User root
如果这样重新运行boa 则会邮错,请看 error_log 中的提示
src/boa.c:226 - icky Linux kernel bug!: Success
在linux中很少以root 用户作为应用程的运行者,一般的应用程序也会禁止认root作为程序的运行者
所以在boa.c 的225行中有
if (setuid(0) != -1)
{
DIE("icky Linux kernel bug!");
}
只要将其注释掉即可