开发工具:
文件大小: 49kb
下载次数: 0
上传时间: 2013-09-09
详细说明: 与BOA配合使用:本文为CGI部分 webserver移植主要分为BOA移植和CGI的移植。 1、BOA移植 1.1 设置编译环境 boa 的官方网站是:www.boa.org,下载地址: https://sourceforge.net/project/showfiles.php?group_id=78,下载的版本为:boa-0.94.13 版。 #tar xvfz boa-0.94.13.tar.gz -C /opt/EmbedSky/ 1.2 配置编译条件 配置 boa: #cd /opt/EmbedSky/boa-0.94.13/src #./configure 会在 boa-0.94.13/src 目录下面生成 Makefile 文件,修改 Makefile 文件: #vi Makefile 在 31 行和 32 行,找到:CC = gcc 和 CPP = gcc -E,然后改成:CC = arm-linux-gcc 和 CPP =arm-linux-gcc -E,保存退出。 相关文件的修改: 我们要做的是对该目录下一些源代码做相应的修改。 修改compat.h(步骤4)(这里参考别人的,写的很详细) #define TIMEZONE_OF FSET(foo) foo##->tm_gmtoff 将其修改成 #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff 否则会出现错误: util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 修改log.c(步骤5) 将以下语句注释掉: if (dup2(error_log, STDERR_FILENO) == -1) { DIE("unable to dup2 the error log"); } 否则会出现错误: log.c:73 unable to dup2 the error log:bad file deor 修改boa.c(步骤6) 注释掉下面两句话: if (passwdbuf == NULL) { DIE(”getpwuid”); } if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) { DIE(”initgroups”); } 否则会出现错误:boa.c:211 - getpwuid: No such file or directory 注释掉下面语句: if (setuid(0) != -1) { DIE(”icky Linux kernel bug!”); } 否则会出现问题:boa.c:228 - icky Linux kernel bug!: No such file or directory 生成可执行文件BOA: 首先进入src目录,并执行configure文件,生成Makefile文件 #cd /source/boa-0.94.13/src # make(步骤9) 对生成文件进程瘦身 #arm-linux-strip boa(步骤10) 2、移植 cgic 库 2.1 下载 cgic 库的具体下载站点是:http://www.boutell.com/cgic/cgic205.tar.gz,版本为:cgic205版。 下载后,解压到“/opt/EmbedSky/”目录下,会生成目录 cgic205: #tar xvfz cgic205.tar.gz -C /opt/EmbedSky/ 2.2 配置编译条件 进入 cgic205 目录,修改 Makefile 文件: #cd /opt/EmbedSky/cgic205 #vi Makefile 下面是修改后的文件内容: CFLAGS=-g -Wall CC=arm-linux-gcc //原来是CC = gcc AR=arm-linux-ar //原来是AR = ar RANLIB=arm-linux-ranlib //原来是RANLIB = ranlib LIBS=-L./ -lcgic all: libcgic.a cgictest.cgi capture install: libcgic.a 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/ (此处可改可不改) @echo libcgic.a is in /usr/local/lib. cgic.h is in /usr/local/include. libcgic.a: cgic.o cgic.h rm -f libcgic.a $(AR) rc libcgic.a cgic.o $(RANLIB) libcgic.a #mingw32 and cygwin users: replace .cgi with .exe cgictest.cgi: cgictest.o libcgic.a $(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS} //由gcc改成了:$(CC) $(CFLAGS) capture: capture.o libcgic.a $(CC) $(CFLAGS) capture.o -o capture ${LIBS} //由gcc改成了:$(CC) $(CFLAGS) clean: rm -f *.o *.a cgictest.cgi capture 修改后保存退出。 2.3 编译并优化 编译,会在目录下生成 capture 的可执行文件和测试用的 cgictest.cgi 文件: #make (此时 .c 文件出现一个未定义的错误,将相应的语句注销了) 优化: #arm-linux-strip capture 会把 capture 由原来的 100K 左右变成现在的 29K 左右。 3.配置 Web 服务器 主要修改 boa.conf 文件 基本依照天嵌的流程改动, User 0 //行48 Group 0 //行49 //作为哪个用户组运行,即它拥有该用户组的权限,一般都是root,需要在/etc/group文件中有root组。 ErrorLog /dev/console //行62 //错误日志文件。如果没有以/xxx开始,则表示从服务器的根路径开始。如果不需要错误日志,则用 /dev/null。系统启动后看到的boa的打印信息就是由/dev/console得到的。 AccessLog /dev/null //行75 //访问日志文件。如果没有以/xxx开始,则表示从服务器的根路径开始。如果不需要错误日志,则用 /dev/null或直接注释掉。 DocumentRoot /www //行112 //非常重要,这个就是存放HTML文档的主目录。如果没有以/xxx开始,则表示从服务器的根路径开 始。 ScriptAlias /cgi-bin/ /www/cgi-bin/ //行194 //非常重要,指明CGI脚本的虚拟路径对应的实际路径。一般所有的CGI脚本都要放在实际路径里, 用户访问执行时输入站点+虚拟路径+CGI脚本名。前面的/cgi-bin/就是虚拟路径,/web/cgi-bin/就是 实际的路径。 4、测试 (1)先进入开发板的根目录,创建www目录,在进入www目录创建cgi-bin目录,用来放置cgic测试文件。 (2)进入etc目录,创建boa目录。通过nfs将boa 和 boa.conf文件拷到该目录下。 (3)将linux系统下得/etc/mime.types拷贝到开发板根文件系统的/etc下,mime.types的主要功能是控制从网络上发给宿主机端的媒体文件的类型,并且告诉宿主机怎么去处理这些数据。 (4)CGI 脚本测试 使用 helloweb.c 进行测试。 helloweb.c 源码如下: #include main() { printf("Content-type: text/html\n\n"); printf("\n"); ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.