嵌入式web入门:boa服务器移植到简单cgi测试

移植boa服务器:

1.       www.boa.org网站下载boa-0.94.13 发布版;

2.       # tar -xzvf boa-0.94.13.tar.tar解压到PC linux虚拟机下;

3.       src目录下执行命令./configure,会产生一个makefile文件;

4.       修改src目录下makefile文件3132行,将CC = gcc改为CC = arm-linux-gccCPP = gcc –E改为CPP = arm-linux-g++ -E,保存退出;

5.       修改src目录下boa.c文件,屏蔽225227

 

225  /*      if (setuid(0) != -1) {

    226            DIE("icky Linux kernel bug!");

    227       }   */

    保存退出

6.       修改src目录下compat.h文件,120

找到

    #define TIMEZONE_OFFSETfoo foo##->tm_gmtoff

    修改成

    #define TIMEZONE_OFFSETfoo) (foo->tm_gmtoff

保存退出

7.       编译 # make

错误提示1

yacc  -d boa_grammar.y

make: yacc:命令未找到

make: *** [y.tab.c] 错误 127

解决方法:

boa-0.94.13/src#  apt-get install bison

 

错误提示2

lex  boa_lexer.l

make: lex:命令未找到

make: *** [lex.yy.c] 错误 127

解决方法:

boa-0.94.13/src#  apt-get install flex

 

编译一个linux下的c系统,包含词法和语法分析模块,Linux上用bisonflex

yacc是一个文法分析器的生成器,bison即是yaccGNU版本。LexYACC是用于构造词法分析机和语法解释器的工具,利用LexYACC你可以轻松的构造一个语法解释器。

 

优化 # arm-linux-strip boa

优化就是去除boa中的调试信息,boa可执行文件减小到62KB左右

   

8.       把“src/”目录下,编译得到的boa可执行文件拷贝的文件系统的“sbin/”目录下

把“boa-0.94.13/”目录下的boa.conf文件拷贝到文件系统的“etc/boa/”目录下

 

9.       修改boa.conf文件

主要修改内容有

Port 80     //25 端口

 

User root   //48 

Group root  //49 

 

ServerName  GUET  //94 服务器名

 

DocumentRoot  /www   //110 存放html文档主目录,重要

 

DirectoryIndex  index.html  //123  html目录索引的文件名

 

MimeTypes  /etc/mime.types  //155 指明mime.types文件位置

 

DefaultType  text/plain  // 160

 

CGIPath  /bin:/usr/bin:/usr/sbin:/sbin  //164 提供CGI程序的PATH环境变量值

 

ScriptAlias  /cgi-bin/  /www/cgi-bin/  //193 重要,指明CGI脚本的虚拟路径对应的实际路径。

主要就是这些,其他可用默认,或根据需要设置,详细看里面的说明,保存退出。

 

10.   拷贝pclinux系统etc/目录下的mime.types到文件系统etc/目录下

 

移植CGIC

1.       从网站http://www.boutell.com/cgic/下载cgic205.tar.gz源码包;

2.       # tar -xzvf cgic205.tar.gz 解压

3.       修改makefile文件

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

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

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

 

cp libcgic.a /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib

cp cgic.h /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/usr/include

 

cgictest.cgi: cgictest.o libcgic.a

$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS}

 

capture: capture.o libcgic.a

$(CC) $(CFLAGS) capture.o -o capture ${LIBS}

 

保存退出

4.       编译 #make

5.       拷贝cgic205目录下的capture文件到文件系统www/cgi-bin目录下

 

 

简单cgi测试程序:

 

#include <stdio.h>

#include "cgic.h"

#include <string.h>

#include <stdlib.h>

int main()

{

 char *date;

 long m,n;

 printf("Content-Type:text/html;charset=gb2312\n\n");

 printf("<TITLE>加法结果</TITLE>");

 printf("<H3>加法结果</H3>");

 date=getenv("QUERY_STRING");

 if(date==NULL)

  printf("<p>error");

 else if(sscanf(date,"m=%ld&n=%ld",&m,&n)!=2)

  printf("<p>error,input must be figure!");

 else

  printf("<p>%ld%ld等于%ld",m,n,m+n);

 return 0;

}

Arm-linux-gcc  -o mult.cgi mult.c

得到的mult.cgi拷贝到www/cgi-bin

 

网页html代码:

 

<html>

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">

           <title>测试页面</title>

    </head>

    <body>

           <form mention="POST" action="/cgi-bin/mult.cgi">

           <p>m: <input type="text" name="m" size="5" /></p>

           <p>n: <input type="text" name="n" size="5" /></p>

           <p><input type="submit" value="确定"/></p>

           </form>

           </body>

</html>

 

保存为mult.html,拷贝到www目录下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值