嵌入式开发之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 左右,这个优化是比较常用的做法。

至此,boa移植完毕。

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

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

  [email protected]:/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错误。

  [email protected]:/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

  附录:

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

时间: 2024-11-02 23:21:29

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

嵌入式开发之GCC编译器使用

嵌入式开发之GCC编译器使用 Linux系统下GCC是GNU推出的功能强大的性能优越的多平台编译器,是GNU的代表作之一.GCC 可以在多种硬件平台上编译出可执行程序,其执行效率一般比其他编译器高%20到%30.GCC编译器能将C C++语言程序汇编程序编译,链接成可执行程序.在linux文件没有统一的后缀,系统从文件的属性来区分可执行程序和不可执行程序.  1.1GCC编译程序的四个阶段 预处理(Pre-Processing) 编译(Comping) 汇编(Assembing) 连接(Link

IOS开发之svn服务器

IOS开发之svn服务器 1. SVN服务器地址 自己创建一个SVN服务端, mac 10.9默认有svnadmin,所以只需要简单配置一下就可以使用. 2.配置svn 2.1.创建版本库 打开终端输入命令行 mkdir ~/repository svnadmin create ~/repository 2.2.修改配置shift + i 进行编辑 vi 打开svnserve.conf ,passwd,authz进行编辑 svnserve.conf: [general] anon-access

嵌入式linux下web服务器搭建

一.移植编译生成boa二进制文件 Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右.作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求.但Boa支持CGI,能够为CGI程序fork出一个进程来执行.Boa的设计目标是速度和安全. 首先下载boa源码包,下载链接:http://www.boa.org/. 解压到特定目录,本人使用的是/opt目录,使用命令: # tar zxvf boa-0.94.13.tar.gz –C /op

嵌入式开发之cgic库---cgi库的使用

很幸运!用C语言写CGI程序还可以有比较简单的方式,那就是我们可以借助使用第三方库CGIC(CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作系统)来编写,省去了必须自己去遵循CGI规范来码砖的痛苦,使CGI程序的编写变的简单,下面是我第一次使用CGIC库来写的第一个CGI程序:第一步:从cgic官网(http://www.boutell.com/cgic/ 此网站好像不稳定,偶尔能开)上下载cgic库文件第二步:在Dev-C++中创建一

嵌入式开发之davinci--- 8148/8168/8127 中的High-DefinitionVideo Processing Subsystem (HDVPSS)

High-DefinitionVideo Processing Subsystem (HDVPSS) 这一章介绍了高清视频处理子系统(HDVPSS). 2.1导论 2.1.1 简介 HDVPSS 使用TI开发的算法,灵活的复合和融合引擎,各种高质量外部视频接口,实现视频/图像显示和采集处理功能.   2.1.3 缩略语 名称 定义 COMP Compositor 复合器 DEI De-Interlacer 去隔行 DEIH High quality De-Interlacer 高质量去隔行 DV

嵌入式开发之davinci--- DVRRDK, EZSDK和DVSDK这三者有什么区别

下载的时候选择信息要避免security类型的产品,这个是要审查的. DVRRDK是专门针对DVR的开发包是非公开的,针对安防的客户定制的,效率要高. EZSDK是开放的版本架构上使用openmax可以为android提供支持 DVSDK是老的版本名称使用codec engine架构,现在新的芯片DM8xxx都是EZSDK了 三种不同的软件框架,使用不同的方法来利用dsp工作. http://blog.csdn.net/zhouzhuan2008/article/details/8512128

嵌入式开发之davinci--- ccs 编译lib库

(1)ccs 简介 (2)ccs 输出格式coff elf (3)ccs 编译lib 算法库 (4)ccs 存在的问题 --------------------------------------------------华丽的分界线 --------------------------------author:pkf ---------------------------------------time:5-13 -----------------------------------------

嵌入式开发之davinci--- 8148/8168/8127 中的xdc 简介

XDC是TI公司为嵌入式实时系统可重用软件组件(在XDC里被成为packages,以下成为包)制定的一套标准.它包括一些有用的工具,标准的API函数,静态配置文件和打包(packaging)操作.XDC最主要的亮点在于它标准化了传递过程,并简化了在应用程序中引用目标平台下其他包的过程. 本文从一个简单的“Hello,World“入手,引领大家进入XDC开发世界. 在XDC开发世界中,首先需要明确两个概念,package和repository. 所谓package,类似与java里的jar文件或.

嵌入式开发之hi3519---GPIO 驱动

在一个嵌入式系统中使用最多的莫过于 通用输入输出 GPIO口.看到论坛中经常有朋友问海思为什么没有提供GPIO驱动.其实不然. 在海思SDK  xxx/osdrv/tools/board_tools/reg-tools-1.0.0/source/tools/下 提供了himm的读写工具源码.你也可以根据himm的源码来写一个文件设备操作的驱动.毕竟轮子已经有了,我们就没必要再去造轮子了. 这个工具是用来 配置海思寄存器的.当然可以稍加改造或者在应用直接使用来控制通用寄存器. 根据海思提供资料 ,