• 嵌入式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目录下。

  • 相关阅读:
    【科技与狠活】如何利用Python绘制足球场
    软件测试下的AI之路(2)
    Power Automate详细部署方案
    机器学习预备03
    SpringBoot下的代理注解
    协同细菌觅食优化算法(Matlab代码实现)
    StarkWare:欲构建ZK“宇宙”
    硬件知识积累 PCIE 接口
    unity2D自制游戏如何写设置按钮的代码
    机器学习强基计划7-2:图文详解K-均值聚类(K-means)算法(附Python实现)
  • 原文地址:https://blog.csdn.net/shanhujiao53/article/details/139803096