您的位置:首页 > 其它

如何在arm平台移植boa Web服务器

2015-01-28 10:23 218 查看
http://blog.sina.com.cn/caizhiwei99

开发平台:

Ubuntu14.04LTS+OK335XSAuthor:casyDate:2014/8/6

1.到Boa的官方网站:www.boa.org,或另一个下载地址:
http://sourceforge.net/projects/boa/files/下载源码boa-0.94.13.tar.gz。
2.将boa-0.94.13.tar.gz解压到home/forlinx目录下得到boa-0.94.13

目录。root@LinuxServer:/home/forlinx#tar-zxvfboa-0.94.13.tar.gz

3.进入boa-0.94.13/src目录,执行

root@LinuxServer:/home/forlinx/boa-0.94.13/src#./configure,执行后会自动在src目录下将生成Makefile文件,打开Makefile文件。4.修改所使用的编译器:用gedit打开makefile文件做如下修改。

CC=gcc

改为:CC=arm-linux-gcc

CPP=gcc–E

改为:CPP=arm-linux-gcc–E5.编译并优化:

修改/src/compat.h中的

#defineTIMEZONE_OFFSET(foo)foo##->tm_gmtoff

为:

#defineTIMEZONE_OFFSET(foo)foo->tm_gmtoff

否则会报错util.c:100:1:pasting“t”and“->”doesnotgiveavalidpreprocessingtokenmake:[util.o]Error1

然后,src目录下执行make命令,开始一键make!

make之后可能不是那么顺利哦,会遇到各种trouble!!!

boa服务器make错误-三心草的日志-网易博客
http://zhouyang340.blog.163.com/blog/static/3024095920121187544204/
成功后,将在src目录下生成boa可执行文件(大致256K),可去掉boa的调试信息对其进行优化,执行命令#arm-linux-stripboa后,boa变得只有60k大小。如图1所示:

6.修改配置文件boa.conf

复制ubuntu上/home/forlinx/boa-0.94.13/boa.conf文件到开发板的/etc/boa/目录下,修改权限#chmod–R777boa并修改如下内容。
Port 80
User root
Group root

ErrorLog /dev/console

AccessLog /www/log/boa/error_log
ServerName http://caizhiwei.com/ Document Root/www
Directory Index index.html
KeepAliveMax 1000
KeepAliveTimeout 10

MimeTypes /etc/mime.types
DefaultType text/plain

CGIPath /bin:/usr/bin:/usr/sbin:/sbin
ScriptAlias /cgi-bin/ /www/cgi-bin/

以上参数说明:

其中的一些设置的说明和可能出现的错误情况分析如下:
(1)Port80

监听的端口号,默认都是80,无需修改。
(2)Userroot

User后面对应一个用户
(3)Grouproot

Group对应group文件中一个组。作为哪个用户组,即它拥有该用户组的权限,一般都是root,需要在/etc/group文件中有root组。
(4)ErrorLog/www/log/boa/error_log

错误日志文件,error_log记录了boa的运行日志,如果发现运行错误通过#cat/www/log/boa/error_log就可查看错误信息。也可以设置为:ErrorLog/dev/console则在boa运行是错误信息直接从串口终端输出。如果不需要错误日志,则用/dev/null。

(5)AccessLog/www/log/boa/error_log

访问日志文件。如果不需要错误日志,则用/dev/null或者直接注释掉。(6)ServerNamehttp://embedclub.taobao.com/

该项默认是注释掉的,ServerName后面的内容任意取,表示服务器名字。该项必须打开,否则运行boa时会异常退出,提示“gethostbyname::Nosuchfileordirectory”。(7)DocumentRoot/www

存放HTML文档的主目录,这里对应根文件系统的www目录。(8)DirectoryIndexindex.html

HTML目录索引的文件名。(9)KeepAliveMax1000

一个连接所允许的HTTP持续作用请求最大数目,注释或设为0都将关闭HTTP持续作用。

(10)KeepAliveTimeout10

HTTP持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接。

(11)MimeTypes/etc/mime.types

指明mime.types的位置。(12)DefaultTypetext/plain

文件扩展名没有或未知的话,使用的缺省MIME类型。(13)CGIPath/bin:/usr/bin:/usr/sbin:/sbin

提供CGI程序的PATH环境变量值。

(14)ScriptAlias/cgi-bin//www/cgi-bin/

指明CGI脚本的虚拟路径对应的实际路径,一般所有的CGI脚本都要放在实际路径里,用户访问执行时输入站点IP+虚拟路径+CGI脚本名。其中,/cgi-bin/表示虚拟路径;/www/cgi-bin/表示实际路径。7.创建与boa.conf相关的目录与文件创建HTML文档的主目录:/www

创建日志文件所在目录:/www/log/boa创建CGI脚本所在录:/www/cgi-bin

创建日志文件:/www/log/boa/error_log步骤如下:

cd/opt/rootfsmkdirwww

chmod–R777www

mkdir–m777www/cgi-binmkdirwww/log

mkdirwww/log/boacdwww/log/boatoucherror_log

8.最后一步了,先拷贝Ubuntu主机/etc/mime.types文件到开发板/etc目录

下。#cp/etc/mime.types/opt/rootfs/etc

将步骤5中编译好的boa拷贝根文件系统的/bin目录下:#cpboa/opt/rootfs/bin

运行开发板中的boa程序:如果发现错误,不要急,按照错误号修改代码重新编译,直到成功!运行boa,如图2所示:

9.静态网页测试:

把St的LibV3.5的固件库下的index.html(谁便找了一个),复制到/www目录下,重启开发板,启动boa服务#boa.在浏览器中输入开发板ip:

10.
CGI
功能测试
:
编写
HelloCGI.c
程序
(
注意:
printf
语句以
Tab
开始
)
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,i'm
caizhiwei
!.</h1>\n");
printf
("<body>\n"
);
10.
CGI
功能测试
:
编写
HelloCGI.c
程序
(
注意:
printf
语句以
Tab
开始
)
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,i'm
caizhiwei
!.</h1>\n");
printf
("<body>\n"
);
10.CGI功能测试:

编写HelloCGI.c程序(注意:printf语句以Tab开始)intmain(void){

printf("Content-type:text/html\n\n");printf("<html>\n");

printf("<head><title>CGIOutput</title></head>\n");printf("<body>\n");

printf("<h1>Hello,i'mcaizhiwei!.</h1>\n");printf("<body>\n");

printf("</html>\n");exit(0);

}

在主机上交叉编译:

#arm-arago-linux-gnueabi-gcchelloCGI.c-ohelloCGI

将helloCGI拷贝至根文件系统的/www/cgi-bin/下,重启开发板,启动boa,在浏览器输入:http://192.168.0.59/cgi-bin/helloCGI网页出现Hello,i'mcaizhiwei!调试成功!如图所示:

11.动态WEB页面测试11-1.CGIC库源代码下载

从CGIC的主站点http://www.boutell.com/cgic/下载源码,当前最新版本是2.06版。11-2.CGIC库配置

借助Samba服务,将cgic205.tar.gz拷贝到虚拟机Linux系统中,解压cgic205.tar.gz到/home/forlinx目录,得到cgic205目录。#tarxvzfcgic205.tar.gz#cdcgic205

修改makefie文件中的编译工具:CC=gcc

改为CC=arm-linux-gcc
AR=ar

改为AR=arm-linux-ar
RANLIB=ranlib

改为RANLIB=arm-linux-ranlib

gcccgictest.o-ocgictest.cgi${LIBS}

改为:$(CC)$(CFLAGS)cgictest.o-ocgictest.cgi${LIBS}
gcccapture.o-ocapture${LIBS}

改为:$(CC)$(CFLAGS)capture.o-ocapture${LIBS}11-3.编译和优化

执行make命令得到的CGIC库libcgic.a并生成调试辅助程序capture和测试程序cgictest.cgi文件,执行#arm-arago-linux-gnueabi-stripcapture命令对生成的capture文件进行优化,减小大小。capture由原来的100K左右变成29K左右。11-4.测试

拷贝以上生成的capture和cgictest.cgi可执行文件到根文件系统的www/cgi-bin目录下。重启运行如图5所示。

服务器程序可以通过三种途径接收信息:环境变量、命令行和标准输入。具体使用哪一种方法要由<FORM>标签的Method属性来决定。在“Method=GET”时,向CGI程序传递表单编码信息的正常做法是通过命令来进行的。

大多数表单编码信息都是通过Query-String的环境变量来传递的。如果“Method=POST”,表单信息将通过标准输入来读取。还有一种不使用表单就可以向CGI传送信息的方法。那就是把信息直接追回在URL地址后面,信息和URL之间用问号(?)来分隔。本测控系统采用的是GET方法。

接下来你可以搞一个远程控制LED闪烁快慢的程序玩玩哦。Enjoyit!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: