cgic205.tar.gz
与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"); 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");
用户评论
谢谢分享!!!
挺好用的。
还可以用,
谢谢分享!
可以用来测试
cgic,嵌入式适用,好用
好用,已测试
东西不错,值得用
可以编译,使用了 可以用