编译环境:虚拟机 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目录下。