近段时间在做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

嵌入式开发之web服务器---boa移植的更多相关文章

  1. 嵌入式web服务器BOA的移植及应用

    嵌入式web服务器子系统 一.嵌入式web服务器的控制流程 如下图所示,嵌入式web服务器可实现通过网络远程控制嵌入式开发板,便捷实用. 控制流程:浏览器 --->>>嵌入式开发板 ...

  2. 嵌入式web服务器BOA+CGI+HTML+MySQL项目实战——Linux

    准备环境操作系统: Ubuntu12.04 LTS环境搭建: 需要 BOA,Apache,CCGI,MySQL,GCC[Linux下嵌入式Web服务器BOA和CGI编程开发][数据库的相关知识——学习 ...

  3. [置顶] ARM-Linux下WEB服务器Boa的移植、配置和运行测试

    Linux下使用的轻量级WEB服务器主要有:lighttpd.thttpd.shttpd和boa等等,而Boa是使用最为广泛的轻量级WEB服务器之一(当然,阿帕奇是世界使用排名第一的Web服务器软件) ...

  4. 嵌入式Web服务器boa在ARM平台的移植步骤

    1.下载http://www.boa.org/ 2.解压tar xzf boa-0.94.13.tar.gz 3.编译cd boa-0.94.13/src./configure 生成了makefile ...

  5. Linux下嵌入式Web服务器BOA和CGI编程开发

    **目录**一.环境搭建二.相关配置(部分)三.调试运行四.测试源码参考五.常见错误六.扩展(CCGI,SQLite) # 一.环境搭建操作系统:Ubuntu12.04 LTSboa下载地址(但是我找 ...

  6. web服务器boa的移植

    1.下载官方网站 http://www.boa.org/ 我下载的是0.94.13版本 2.解压 tar -zxvf boa-0.94.13.tar.gz 3.进入src目录 ./configure ...

  7. 嵌入式开发之zynqMp ---Zynq UltraScale+ MPSoC 图像编码板zcu102

    1.1 xilinx zynqMp 架构 1.1.1 16nm 级别工艺 Zynq UltraScale+  MPSoC架构 Xilinx新一代Zynq针对控制.图像和网络应用推出了差异化的产品系,这 ...

  8. 嵌入式开发之makefile---交叉编译静态库和动态库的生成和调用

    c和cpp 混合的动态库生成: $(LIBSO): $(COBJS) $(CPPOBJS) $(CPP) -shared -o $@ $^ $(LIBS) ////////////////////// ...

  9. 嵌入式开发之NorFlash 和NandFlash

    http://blog.csdn.net/tigerjibo/article/details/9322035 [摘要]:作为一个嵌入式工程师,要对NorFlash 和NandFlash要有最起码的认知 ...

随机推荐

  1. Spring的AOP浅尝

    项目中使用到了Spring,写了一个简单的例子,跟大家分享一下,由于自己写东西,所以在技术选择上充分自由,虽然对于Spring的利弊众说纷纭,我也不能评判,反正我是尝试用了,记得在上学时候老师讲Spr ...

  2. 【转】MySQL5.5的my.cnf 参数详解

    这篇文章很多地方只是翻译了my.cnf原始配置文件的说明 以下原文中有些参数事实上不适用于MySQL5.5,不知道原作者是否有经过实际测试,比如log-slow-queries应该写成slow-que ...

  3. Request Header Or Cookie Too Large

    运营反馈 Nginx 报 400 错误,具体点说:Request Header Or Cookie Too Large.其实随便搜搜就知道可以通过加大 client_header_buffer_siz ...

  4. JAVA常见算法题(十四)

    package com.xiaowu.demo; /** * 输入某年某月某日,判断这一天是这一年的第几天? * * * @author WQ * */ public class Demo14 { p ...

  5. Python 面向对象二(转载)

    来源:www.cnblogs.com/wupeiqi/p/4766801.html 三.类成员的修饰符 类的所有成员在上一步骤中已经做了详细的介绍,对于每一个类的成员而言都有两种形式: 1.公有成员, ...

  6. 2017.4.26 慕课网--Java 高并发秒杀API配置文件(持续更新)

    新建项目,new maven project. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  7. SQL注入的几种有用办法

    一.查询表中包括有多少列: 这里以DISCUZ举例说明,例如以下 select * FROM pre_forum_thread ORDER BY 80 返回,Unknown column '80' i ...

  8. x^2 + (y-(x^2)(1/3))^2 = 1 心形方程 5.20无聊之作

    2017.05.20 一个无聊的周六,只能看别人秀恩爱.偶然间在网上看到一个有意思的方程 x^2 + (y-(x^2)(1/3))^2 = 1,据说这个方程可以绘制出一个爱心的形状.既然很无聊,就随便 ...

  9. node - 写返回mime类型

    何为mime类型?  mime.json { ".323":"text/h323" , ".3gp":"video/3gpp&qu ...

  10. Linux组件封装(一)中互斥锁MutexLock的封装

    本文对Linux中的pthread_mutex_t做一个简易的封装. 互斥锁主要用于互斥,互斥是一种竞争关系,主要是某一个系统资源或一段代码,一次做多被一个线程访问. 条件变量主要用于同步,用于协调线 ...