与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_OFFSET(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-no
1