您的位置:首页 > 其它

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

2012-09-02 22:36 295 查看


移植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目录下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息