本帖最后由 caizhiwei 于 2015-11-12 09:13 编辑
boa服务器还是非常经典的服务器,适合小型的arm-linux系统!
下面是我总结的移植步骤,分享给大家:
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 -zxvf boa-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 –E 5. 编译并优化: 修改/src/compat.h中的 #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 为: #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff 否则会报错util.c: 100: 1: pasting“t” and “->” does not give a valid preprocessing token make: [util.o] Error1 然后,src目录下执行make命令,开始一键make! make 之后可能不是那么顺利哦,会遇到各种trouble!!! boa服务器make错误 - 三心草的日志 - 网易博客 http://zhouyang340.blog.163.com/blog/static/3024095920121187544204/ 成功后,将在src目录下生成boa可执行文件(大致256K),可去掉boa的调试信息对其进行优化,执行命令 #arm-linux-strip boa 后, boa 变得只有 60k大小。如图1所示: 图1 编译后生成的boa可执行文件 6. 修改配置文件boa.conf 复制ubuntu上/home/forlinx/boa-0.94.13/boa.conf文件到开发板的/etc/boa/目录下,修改权限#chmod –R777 boa并修改如下内容。 - <font size="3">Port 80
- User root
- Group 0
- ErrorLog /dev/console
- AccessLog /www/log/boa/error_log
- ServerName http://caizhiwei.com/
- DocumentRoot /www
- DirectoryIndex 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/ </font>
复制代码 以上参数说明: 其中的一些设置的说明和可能出现的错误情况分析如下: (1) Port 80 监听的端口号,默认都是 80 ,无需修改。 (2) User root User 后面对应一个用户 (3) Group root 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) ServerName http://embedclub.taobao.com/ 该项默认是注释掉的, ServerName后面的内容任意取,表示服务器名字。该项必须打开,否则运行 boa时会异常退出,提示“get host by name::Nosuch file or directory ”。 (7) DocumentRoot /www 存放 HTML文档的主目录,这里对应根文件系统的 www目录。 (8) DirectoryIndex index.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 步骤如下: - <font size="3">cd /opt/rootfs
- mkdir www
- chmod –R 777 www
- mkdir –m 777 www/cgi-bin
- mkdir www/log
- mkdir www/log/boa
- cd www/log/boa
- touch error_log </font>
复制代码 8.最后一步了,先拷贝Ubuntu主机/etc/mime.types文件到开发板/etc 目录下。 #cp /etc/mime.types/opt/rootfs/etc 将步骤5中编译好的boa拷贝根文件系统的/bin目录下: #cp boa/opt/rootfs/bin 运行开发板中的boa 程序; #./boa如果发现错误,不要急,按照错误号修改代码重新编译,直到成功! 9.静态网页测试: 把St的Lib V3.5的固件库下的index.html(谁便找了一个),复制到/www目录下,重启开发板,启动boa服务 #boa . 在浏览器中输入开发板ip: 图3 静态网页测试 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" );
- printf ("</html>\n");
- exit ( 0 );
- }
复制代码在主机上交叉编译: # arm-arago-linux-gnueabi-gcc helloCGI.c -o helloCGI 将helloCGI拷贝至根文件系统的/www/cgi-bin/下,重启开发板,启动boa, 在浏览器输入: http://192.168.0.59/cgi-bin/helloCGI 网页出现Hello,i'm caizhiwei!调试成功!如图所示:
图4 CGI功能测试 11. 动态WEB页面测试 11-1.CGIC库源代码下载 从CGIC的主站点http://www.boutell.com/cgic/ 下载源码,当前最新版本是 2.06版。 11-2. CGIC库配置
解压 cgic205.tar.gz到/home/forlinx目录,得到cgic205目录。 # tar xvzfcgic205.tar.gz # cd cgic205 修改makefie文件中的编译工具: CC=gcc 改为CC=arm-linux-gcc AR=ar 改为 AR=arm-linux-ar RANLIB=ranlib 改为 RANLIB=arm-linux-ranlib gcc cgictest.o -o cgictest.cgi ${LIBS} 改为: $(CC) $(CFLAGS) cgictest.o -o cgictest.cgi${LIBS} gcc capture.o -o capture ${LIBS} 改为: $(CC) $(CFLAGS) capture.o -o capture${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所示。 图5 动态网页测试 服务器程序可以通过三种途径接收信息:环境变量、命令行和标准输入。具体使用哪一种方法要由<FORM> 标签的Method属性来决定。在“Method=GET”时,向CGI 程序传递表单编码信息的正常做法是通过命令来进行的。 大多数表单编码信息都是通过 Query-String 的环境变量来传递的。如果 “Method=POST”,表单信息将通过标准输入来读取。还有一种不使用表单就可以向CGI 传送信息的方法。那就是把信息直接追回在URL 地址后面,信息和URL 之间用问号(?)来分隔。本测控系统采用的是GET方法。 接下来你可以搞一个远程控制LED闪烁快慢的程序玩玩哦。Enjoy it ! |