嵌入式WEB服务器移植三部曲之BOA的移植

2019-07-12 21:57发布

转自:http://hi.baidu.com/%D2%BC%BF%DA%B3%BE%B0%A3/blog/item/02cf3efa574652d60b46e010.html
BOA+PHP+SQLite移植三部曲之BOA


第一部:BOA的移植

基于嵌入式的WEB服务器(boa),boa在嵌入式Linux上的移植
 
开发板:PXA270-RP (Linux 2.6.9)
宿主机: Centos 6.0 (linux 2.6.32)
交叉编译器:arm-linux-gcc 3.4.6
开发板IP地址:192.168.0.50
宿主机IP地址:192.168.0.100

开发板挂载宿主机的根目录命令:
[root@Intel /]mount -o soft,timeo=100,rsize=1024 192.168.0.100:/ /mnt

第一步:Boa程序的移植

1、下载Boa源码

下载地址: http://www.boa.org/
下载 boa-0.94.13.tar.gz 解压:
[root@localhost /]# tar -xzvf boa-0.94.13.tar.gz

2、生成Makefile文件

[root@localhost /]# cd boa-0.94.13/src/
[root@localhost src]# ./configure

在运行之前,查看一下是否具有可执行权限

3、修改Makefile文件

把CC = gcc
改为 CC = arm-linux-gcc

把CPP = gcc - E
改为CPP = arm-linux-gcc -E

4、编译

[root@localhost src]# make

过程中没有出现问题。

第二步:Boa的配置

在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改

1、Group的修改

修改 Group nogroup
为 Group 0

2、ScriptAlias的修改

修改 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
为 ScriptAlias /cgi-bin/ /var/www/cgi-bin/

3、ServerName的设置

修改 ServerName www.your.org.here
为 ServerName 192.168.0.50

注意:该项默认为未打开,执行Boa会异常退出,所以必须打开,把前边#号去掉,其它默认设置即可。


第三步:Boa的执行

成功配置以后,还需要创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,将静态网页存入该目录下(可以将主机 /usr/share/doc/HTML/目录下的index.html文件和img目录复制到/var/www目录下),创建CGI脚本所在录/var/www/cgi-bin,将cgi的脚本存放在该目录下。另外还要将mime.types文件复制到开发板/etc目录下,通常可以从linux主机的/etc目录下直接复制即可。

遇到的错误之一:
注意:这些目录都是在开发板上创建的
之前没看清楚文档的意思,在宿主机上建的,一直不成功,原因就在这里

在开发板上(minicom)执行以下命令:

以boa-0.94.13放在宿主机的根目录下为例

[root@Intel /]# mkdir /etc/boa
[root@Intel /]# cp /mnt/boa-0.94.13/boa.conf /etc/boa/
[root@Intel /]# mkdir /var/log
[root@Intel /]# mkdir /var/log/boa
[root@Intel /]# mkdir /var/www
[root@Intel /]# cp /mnt/index.html /var/www/
[root@Intel /]# cp -r /mnt/img /var/www/
[root@Intel /]# mkdir /var/www/cgi-bin
[root@Intel /]# cp /mnt/etc/mime.types /etc/
[root@Intel /]# cp /mnt/boa-0.94.13/src/boa  /

执行:[root@Intel /]# ./boa &

直接在宿主机浏览器中输入http://192.168.0.50,出现Centos6.0的欢迎网页。表示静态HTML调试成功。

改正过前面的错误之后,静态页面调试成功!

第四步:CGI脚本测试

1、编写Helloworld.c程序

#include

int main(void)

{
printf("Content-type: text/html ");
printf(" ");
printf(" ");
printf(" ");
printf(" Hello,world.");
printf(" ");
printf(" ");
exit(0);
}

交叉编译生成helloworld.cgi
# arm-linux-gcc -o helloworld.cgi helloworld.c

将helloworld.cgi拷贝至/var/www/cgi-bin/下,主机浏览器输入:
http://192.168.0.50/cgi/bin/helloworld.cgi,

按回车,出现hellow,world! 表示成功!

遇到的错误之二:
注意:CGI程序调试了很多遍,一直不成功,执行时网页中出现“502 Bad Gateway”,最终对比了PHP移植过程中的代码,在以上代码中添加 后,执行成功。