• 嵌入式web 服务器boa的编译和移植


    编译环境:虚拟机 ubuntu 18.04

    目标开发板:飞凌OKA40i-C开发板, Linux3.10 操作系统

    开发板本身已经移植了boa服务器,但是在使用过程中发现POST方法传输大文件时对数据量有限制,超过1M字节就无法传输,这是源码默认的,为了解除这个限制需要修改源码并重新编译和移植。

    1、源码下载

    Boa Webservericon-default.png?t=N7T8http://www.boa.org/从官方网站下载最新版本源码包boa-0.94.13.tar.gz,执行解压命令

        tar -xvf boa-0.94.13.tar.gz

     2、修改源码

    进入源码src目录,执行./configure,生成Makefile,修改Makefile

    1. CC=arm-linux-gnueabihf-gcc-5.3.1
    2. CPP=arm-linux-gnueabihf-gcc-5.3.1 -E

      (1)修改 src/defines.h

    1. 修改宏定义为100M
    2. #define SINGLE_POST_LIMIT_DEFAULT 100 * 1024 * 1024

      (2)修改 src/compact.h

    1. #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
    2. 修改为
    3. #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

    (3)修改 src/log.c

    1. if (dup2(error_log, STDERR_FILENO) == -1) {
    2. DIE("unable to dup2 the error log");
    3. }
    4. 修改为
    5. /*if (dup2(error_log, STDERR_FILENO) == -1) {
    6. DIE("unable to dup2 the error log");
    7. }*/

    (4)修改 src/boa.c

    1. if (passwdbuf == NULL) {
    2. DIE(”getpwuid”);
    3. }
    4. if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
    5. DIE(”initgroups”);
    6. }
    7. 修改为
    8. /*
    9. if (passwdbuf == NULL) {
    10. DIE(”getpwuid”);
    11. }
    12. if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
    13. DIE(”initgroups”);
    14. }
    15. */

    继续向下修改

    1. if (setuid(0) != -1) {
    2. DIE("icky Linux kernel bug!");
    3. }
    4. 修改为
    5. /* if (setuid(0) != -1) {
    6. DIE("icky Linux kernel bug!");
    7. }*/

    3、编译

    在src目录下执行make命令生成boa可执行程序,将可执行程序替换掉usr/sbin目录下原来的boa,重新运行boa即可完成移植。如果是初次编译移植,需要对配置文件boa.conf做一些符合自身需要的修改,并拷贝到板子的/etc/boa目录下。

  • 相关阅读:
    自学黑客(网络安全)
    Git (2)—分支操作
    2024码蹄杯初赛 拔河(非二分解法)
    Linux-----网络套接字编程
    5 个让日常编码更简单的 Python 库
    【PAT甲级】1084 Broken Keyboard
    人工智能与机器学习原理精解【1】
    lattice crosslink开发板mipi核心板csi测试dsi屏lif md6000 fpga
    香橙派5plus从ssd启动Ubuntu
    Java排序算法之贪心算法
  • 原文地址:https://blog.csdn.net/shanhujiao53/article/details/139803096