Linux下Boa服务器移植,交叉编译boa并成功移植到FL2440开发板上,并且CGI程序运行正常。
主机环境:redhat9交叉编译器:arm-linux-gcc 3.4.1
BOA版本:0.94.13平台:s3c2440一:下载源码:从官方网站下载源码,并将源码放置在/src目录下。
[root@ EmbedSky ~]# cd /usr/src进入源码目录
[root@ EmbedSky src]# tar zxvf boa-0.94.13.tar.tar解压源码压缩包
[root@ EmbedSky src]# cd boa-0.94.13进入源码解压包
[root@ EmbedSkyboa-0.94.13]# cd src
[root@ EmbedSky src]# ./configure生成makefile
二:编译前修改的文件:
1.修改Makefile文件,找到CC=gcc和CPP=gcc -E,分别将其改为交叉编译器安装的路径:
CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
CPP=/usr/local/arm/2.95.3/bin/arm-linux-g++
保存退出。
2.修改编译方式:
LDFLAGS = -g –static
注:使用静态编译可以让目标文件自动的包含所需要的
库文件,而动态编译需要手工拷贝库文件。
3.修改/src/defines.h文件:
#define SERVER_ROOT "/etc/boa"
4修改boa-0.94/src/ util.c文件
修改char *get_commonlog_time(void)函数。
time_offset = 0;
5.修改src/config.c:加Current_uid=1
6.修改compat.h:把第120行的
#define
TIMEZONE_OFFSET(foo)foo##->tm_gmtoff
修改为:
#define
TIMEZONE_OFFSET(foo)foo->tm_gmtoff
7.修改/src/boa.c,注释掉下面两行:
/* if (setuid(0) != -1) {
DIE("icky Linux kernel bug!")} */
/*if (passwdbuf == NULL) {
DIE("getpwuid");}*/
8 gethostbyname:: Resource temporarily unavailable
这个问题我也遇到过,我只是把src文件夹下的config.c里的if(!server_name){..........}(大概在266行到286行之间)注释掉,就能运行在板子上运行boa。
解决:config.c
/*if (!server_name) {
struct hostent *he;
char temp_name[100];
if (gethostname(temp_name, 100) == -1) {
perror("gethostname:");<