• 嵌入式开发之web服务器---boa移植


    近段时间在做ti8148的编解码器又涉及到boa web服务器的移植。在移植到ARM开发板的过程中,遇到很多的问题。原先的自带thttpd 由于功能没有boa完善,比如在ubuntu下面的utf-8编码的网页在thttpd中给客户浏览器显示的是默认ios欧洲乱码,但是boa显示正常,就干掉了

    现将移植步骤整理如下:(其中涉及到个人习惯和路径问题,视各自情况而定)

    1.下载源码:

    下载网址http://www.boa.org/boa-0.94.13.tar.gz,但实际上下载的包为boa-0.94.13.tar.tar

    2.解压源码包:

    将源码拷贝到/usr/src目录下,

    #tar -xvf boa-0.94.13.tar.tar

    之后,会在/usr/src目录下生成boa-0.94.13目录。

    3.修改源码:

    ①修改boa-0.94.13/src目录下的boa.c源文件,大概在225行,注释掉如下语句:

    if (setuid(0) != -1){

              DIE("icky Linux kernel bug!");

    }

    注释掉的具体原因还没有弄懂!正在研究中……不注释无法使用post方法。

    ②修改boa-0.94.13/src目录下的compat.h头文件,大概在120行,修改如下:

    将foo##->tm_gmtoff中的##去掉即可,不然在编译时会出现:

    util.c:100:1:error:pasting "t" and "->"does not give a valid prearocessing token.

    具体原因可能是使用了较高版本的编译器。

    4.执行configure:

    在boa-0.94.13/src目录下执行configure:

    #./configure

    之后会生成Makefile文件

    5.修改Makefile文件:

    修改boa-0.94.13/src目录下的Makefile文件,修改如下:(前提是已配置好交叉编译工具链)

    将CC = gcc修改为CC=arm-linux-gcc

    将CPP = gcc -E 修改为CPP=arm-linux-gcc -E

    6.执行make:

    在boa-0.94.13/src目录下执行make:

    #make

    之后会在boa-0.94.13/src目录下生成boa可执行文件,即可以在ARM板子上运行的程序。

    可能出现未安装bison flex

     

    sudo apt-get install bison flex是可以的

      如果不安装bison和flex,在编译boa时会出现如下错误

     make: yacc:命令未找到

     make: *** [y.tab.c] 错误 127

     make: lex:命令未找到

     make: *** [lex.yy.c] 错误 127

    7.在开发板上创建执行目录:

    #mkdir /var/www                (如果有了,就省略)

    #mkdir /var/www/cgi-bin

    #mkdir /var/log

    #mkdir /var/log/boa

    #mkdir /etc/boa

    将在boa-0.94.13/目录下的boa.conf文件拷贝到开发板/etc/boa目录下;

    将宿主机中/etc/mime.types文件拷贝到开发板/etc目录下;(浏览器媒体的资源类型)http://www.cnblogs.com/jsean/articles/1610265.html

    将boa-0.94.13/src目录下的boa拷贝到开发板/bin目录下(或其他默认系统路径);

    8.修改boa.conf文件:

    ①修改48行:User nobody 为 User root

    ②修改193行:ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 为 ScriptAlias /cgi-bin/  /var/www/cgi-bin/

     

    9. 优化boa

      

      优化:

      #arm-linux-strip boa

      这里的优化就是去除 boa 中的调试信息。经过此操作,boa 会由 232K 变成 62K 左右,这个优化是比较常用的做法。

      修改上传最大文件限制在src中的defin.h

      #define SINGLE_POST_LIMIT_DEFAULT               100 * 1024 * 1024 /* 100  MB  modify by pkf */

    至此,boa移植完毕。

    10.干掉thttpd后启动boa又出现了很多问题

      找了好久没找到thttpd的启动设置脚本,干脆就把etc/下的thttpd改名为thttpd_bk,就没发现开机启动了

      root@dm814x-evm:/opt/dvr_rdk/ti814x# ./boa
      .gethostbyname:: Resource temporarily unavailable

      解决:

    Boa需要在/etc目录下建立一个boa目录,里面放置Boa的主要配置文件boa.conf,Boa源码下已经有一个示例boa.conf,可以在其基础上修改,主要改动如下:

    Group nogroup 修改为 Group 0

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 修改为 ScriptAlias /cgi-bin/ /var/www/cgi-bin/

    #ServerName www.your.org.here 去掉这一行的注释符"#",网址可任意。如不去掉这行的注释,会出现如下错误:

    gethostbyname:: Resource temporarily unavailable错误。

       .root@dm814x-evm:/opt/dvr_rdk/ti814x# ./boa 

      [15/Mar/2011:02:29:06 +0000] log.c:73 - unable to dup2 the error log: Bad file descriptor

      解决:

    在var/log下 mkdir boa;chmod 777 boa

    在运行Boa前要把/var/log/boa挂载上ramfs文件系统,使其可写

    注意www目录下的cig-bin下cgi文件才有效,在www目录下的无效,导致直接下载cgi文件,cgi文件需赋予777权限,且单个文件编译时要加static

    至此我的boa算是能跑起来了!

     ret=fwrite(&decoder_param,1,sizeof(system_param),p_fd);导致502 Bad Gateway,

      解决:原因是www下面的权限问题,还有文件是否存在

      问题 system("/sbin/reboot -f")不成功 http://bbs.csdn.net/topics/30363137

      解决:

      是uid权限不够,把/etc/boa.conf里面的

    User nobody 改为User root 或者(0)
    Group nobody改为 Group nobody(0)

      附录:

    http://blog.csdn.net/bull_liu/article/details/7486298

    http://www.cnblogs.com/zhangchaoyang/articles/1934386.html

    http://wenku.baidu.com/view/61c2f5addd3383c4bb4cd2a1.html

    http://www.cnblogs.com/jsean/articles/1610265.html

    http://ubuntu828.blog.163.com/blog/static/174441561201110191250561/

    http://bbs.csdn.net/topics/340022620

  • 相关阅读:
    MVC模式和三层架构的区别
    浅谈MVC3自定义分页
    Jquery进度条插件 Progress Bar
    浅谈 MVC3 WebMail 发送邮件
    LINQ orderby 排序妙用
    mvc3 razor视图下 显示字符串形式的html
    Asp.Net MVC3 让你疯狂的5个理由
    4月8日作业 代码审核复查
    几个js处理时间函数
    看看下面JavaScript代码输出什么?
  • 原文地址:https://www.cnblogs.com/pengkunfan/p/3939987.html
Copyright © 2020-2023  润新知