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

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

("\n"

);

printf

("CGI</p> <p class="reader-word-layer reader-word-s4-11">Output\n"

);

printf

("\n"

);

printf

("

Hello,i'm

caizhiwei

!.

\n");

printf

("\n"

);

10.

CGI

功能测试

:

编写

HelloCGI.c

程序

(

注意:

printf

语句以

Tab

开始

)

int

main

(

void

)

{

printf

("Content-type:

text/html\n\n");

printf

("\n"

);

printf

("CGI</p> <p class="reader-word-layer reader-word-s4-11">Output\n"

);

printf

("\n"

);

printf

("

Hello,i'm

caizhiwei

!.

\n");

printf

("\n"

);

10.CGI功能测试:
编写HelloCGI.c程序(注意:printf语句以Tab开始)intmain(void){
printf("Content-type:text/html\n\n");printf("\n");
printf("CGIOutput\n");printf("\n");
printf("

Hello,i'mcaizhiwei!.

\n");printf("\n");

printf("\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所示。


服务器程序可以通过三种途径接收信息:环境变量、命令行和标准输入。具体使用哪一种方法要由

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


接下来你可以搞一个远程控制LED闪烁快慢的程序玩玩哦。Enjoyit!

你可能感兴趣的:(linux)