飞凌OK6410板boa移植 同时还有cgi程序测试

大家都知道飞凌自带的移植的boa不是很好用,需要自己重新编译才能运行cgi程序,通过几天的努力,尝试网上的一些方法,今天终于能运行cgi程序了。现在把我的配置方法和大家分享。在尝试的过程中,其中的两篇博客,给我起到了很好的指引作用。如下:

3、http://blog.csdn.net/tianmohust/article/details/6595996

<一> Boa的编译

1. 从 www.boa.org 下载 Boa 服务器的最新版:boa-0.94.13.tar.gz。

2. 解压:tar xzf boa-0.94.13.tar.gz

3. 进入解压后的文件夹 boa-0.94.13内部的 src文件夹,对源文件进行如下修改

复制代码
1     由于arm-linux-gcc 编译器版本过高,对语法的支持有一些改变,所以需要修改compat.h中的
2      #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
3 为:
4 
5      #define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
6 不然在编译的时候会提示如下错误:
7     util.c: 100: 1: pasting “t” and “->” does not give a valid preprocessing token make: [util.o] Error1
复制代码
复制代码
 1 将boa.c 文件225-227三行的文件注释掉
 2  if (setuid(0) != -1) {
 3                         DIE(”icky Linux kernel bug!”);
 4         }
 5  6 /*
 7          if (setuid(0) != -1) {
 8                         DIE(”icky Linux kernel bug!”);
 9                 }
10 */
11 
12 ,否则,但以root权限启动boa服务器的时候,会出现以下错误:boa.c:226 - icky Linux kernel bug!: 
复制代码

4. 然后生成Makefile:./configure

5. 修改生成的Makefile:默认生成的Makefile针对x86平台,我们的目标是针对嵌入式平台,所以需要修改编译器.

1 更改Makefile的31行和32行:
2 CC = gcc 
3 CPP = gcc -E
4 更改为
5 CC = arm-linux-gcc
6 CPP = arm-linux-gcc -E

6. 在当前目录下编译Boa源文件: make

7. 将生成好的boa可执行文件去掉冗余信息: arm-linux-strip boa.

<二> 将Boa移植到OK6410中

1. 修改boa.conf配置文件:

我的配置文件如下:

(1)Port 80

(2)User root
    Group root

(3)ServerName 192.168.0.232 (把前面的#去掉,这个ip是自己开发板的ip)

(4)

DocumentRoot /usr/local/boa(这里放置要显示的页面index.html)
(5)AddType application/x-httpd-cgi cgi 
(6)
ScriptAlias /cgi-bin/ /usr/local/boa/cgi-bin/
(这里放置编译好的cgi程序)

2. 将配置文件boa.conf 移动到OK6410的 /etc/boa/ 目录下。

3. 创建/var/log/boa/ 目录,这样Boa服务器启动时会在该目录下创建日志文件。

4. 将Linux系统上/etc/mime.types 文件复制到OK6410的/etc 目录下,否则Boa服务器启动不起来。

5. 将生成的boa文件移植到嵌入式板中的/sbin目录下并更改脚本文件 /etc/init.d/rcS, 新增一行: /sbin/boa ,确保boa服务器随系统上电自启动。

<三> 测试Boa服务器:

1. 静态页面测试:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Boa 静态网页测试</title> </head> <body>     <h1>  Welcome to Boa sever! </h1> </body> </html>

2. CGI  程序测试:
#include <stdio.h>
int  main()
{
    printf("Content-type: text/html\n\n");
    printf("<html>\n");
    printf("<head>\n");
    printf("<title>CGI Output</title>\n");
    printf("</head>\n");


    printf("<body>");
    printf("<h1> Hello, world. </h1>");
    printf("</body>");
    printf("</html>\n");
   return 0;
}
一定要经交叉编译后,再把生产的可执行程序放到cgi-bin文件夹的下面。

上面代码执行时,可能会出现错误提示:

502 Bad Gateway

The CGI was not CGI/1.1 compliant.

可能出现的原因:

1.测试下看是否能浏览静态网页,以保证网络是正确的。

在上面“第三步的 2.测试操作”后局域网的PC的IE上输入http://嵌入式板子的IP地址,如果能显示RedHat9的欢迎主页,说明静态访问是正确的了。

2.将.cgi文件拷贝至目标板上后,必须改变其权限

chmod 755 test.cgi

否则,上位机浏览时会提示上面错误

3.最有可能是CGI程序本身的问题。

我们已经看到test.c的打印开头有使用MIME头信息″Content type :text/html ″来表示输出HTML源代码给Web服务器。请注意任何MIME头信息后必须有一个空行,就是加了 ,

所以这点必须保证。

4.Test.c的原文件是在文本模式下编辑的,在linux下不能执行

可以改动:dos2unix test.c 改动后再进行编译

5.还有一种可能,test.cgi被编译成了动态形式,然而程序执行时在嵌入式中找不到动态库文件,所以在编译程序时加上-static,编译成静态的形式,但是这样编译出来的文件很大,在嵌入式中不适宜采用这种方式。

不再上图;

至此,boa服务器移植完成。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值