嵌入式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文件31、32行,将CC = gcc改为CC = arm-linux-gcc,CPP = gcc –E改为CPP = arm-linux-g++ -E,保存退出;

5. 修改src目录下boa.c文件,屏蔽225至227行

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

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

227 } */

保存退出

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

找到

#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

修改成

#define TIMEZONE_OFFSET(foo) (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上用bison和flex

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

优化 # 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. 拷贝pc机linux系统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目录下


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值