编译环境:虚拟机 ubuntu 18.04
目标开发板:飞凌OKA40i-C开发板, Linux3.10 操作系统
开发板本身已经移植了boa服务器,但是在使用过程中发现POST方法传输大文件时对数据量有限制,超过1M字节就无法传输,这是源码默认的,为了解除这个限制需要修改源码并重新编译和移植。
1、源码下载
Boa Webserverhttp://www.boa.org/从官方网站下载最新版本源码包boa-0.94.13.tar.gz,执行解压命令
tar -xvf boa-0.94.13.tar.gz
2、修改源码
进入源码src目录,执行./configure,生成Makefile,修改Makefile
CC=arm-linux-gnueabihf-gcc-5.3.1
CPP=arm-linux-gnueabihf-gcc-5.3.1 -E
(1)修改 src/defines.h
修改宏定义为100M
#define SINGLE_POST_LIMIT_DEFAULT 100 * 1024 * 1024
(2)修改 src/compact.h
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改为
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
(3)修改 src/log.c
if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}
修改为
/*if (dup2(error_log, STDERR_FILENO) == -1) {
DIE("unable to dup2 the error log");
}*/
(4)修改 src/boa.c
if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
修改为
/*
if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}
*/
继续向下修改
if (setuid(0) != -1) {
DIE("icky Linux kernel bug!");
}
修改为
/* if (setuid(0) != -1) {
DIE("icky Linux kernel bug!");
}*/
3、编译
在src目录下执行make命令生成boa可执行程序,将可执行程序替换掉usr/sbin目录下原来的boa,重新运行boa即可完成移植。如果是初次编译移植,需要对配置文件boa.conf做一些符合自身需要的修改,并拷贝到板子的/etc/boa目录下。