BOA移植

http://hh8582.blog.163.com/blog/static/14041920420114202636840/

BOA (http://www.boa.org)是比较流行的嵌入式Web Server,虽然性能不见得太好,但是胜在简单,整个软件编译完后只有几十K.而且可以支持CGI动态脚本..很容易移植到支持POSIX风格的操作系统上.因此很多ARM-Linux 用于BOA来做Web Server 的演示.

PHP(http://www.php.net/)
是流行的跨平台,动态WEB页面的服务端脚本语言。跟ASP类似,广泛用于BBS,电子商务网站的建设.PHP可以直接支持许多流行的数据库,包括
MySQL、PostgreSQL、Oracle、Sybase、Informix 和 Microsoft SQL Server,在PHP
5,内嵌对SQLite的支持

一直认为PHP这个大家伙,BOA不可能玩得转,也没想到这样的应用,但是在我第一次ARM培训,有朝鲜的学生来在GOOGLE找到一个网址,BOA+PHP for uLinux (http://www.menie.org/georges/uClinux/boa-php.html),试着在嵌入式设备上使用PHP做管理界面,

我在ARM-Linux 试着做一下.这个文档写的很简单,而且版本用的都不是新版本.通过这个文档和分析BOA源码,几经折腾,这个实例还是用最新版的BOA和PHP做成功了.

1.所需源码

实验所需源码下载,和工具

1.       操作系统为arm-linux 2.4或2.6均测试通过

2.       arm-linux-gcc 2.95 或 arm-linux-gcc 3.3.2均可

3.       BOA源码下载Boa -0.94.13 (http://www.boa.org/boa-0.94.13.tar.gz)

4.       PHP 源码下载php-5.2.3.tar.bz2 (http://cn.php.net/get/php-5.2.3.tar.bz2/from/this/mirror)

5.       Php 测试网页http://www.menie.org/georges/uClinux/php-test.tar.gz

2.BOA的移植,编译和配置

l          1.下载Boa源码 ,解压

– 下载地址: http://www.boa.org/, 或者http://sourceforge.net

– tar xvzf boa-0.94.13.tar.gz #解开源码

l          2、生成Makefile文件

–     直接运行src/configure文件

l          3.调整代码

– 实测boa-0.94.13 gcc 2.95.3 可以直接编译通过,而gcc 3.3.2以上版本有几处编译错误,主要是关于时间定义,如用gcc 3.3.2版本,需修改如下

l    util.c 100行 , time_offset = TIMEZONE_OFFSET(t); 编译通不过,需要改成time_offset = 0;

– 在redhat 9.0上当把boa启动用户改为其它用户,如root时经常报错,Boa.c 225-227行下, 执行到DIE那句报错,

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

DIE("icky Linux kernel bug!");

}

l          4、修改Makefile文件

– 在Makefile 29行,加入如下定义

l    CROSS_PREFIX = arm-linux-

– 修改 CC = gcc 为 CC = $(CROSS_PREFIX)gcc

– 修改 CPP = gcc – E 为 CPP = $(CROSS_PREFIX)gcc –E

– 在BOA生成语句,原来44行后加上strip语句,以减少尺寸,内容如下

l     $(STRIP) [email protected]

l          5、编译

–  make

Boa的配置

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

l          端口

– Port 80,是缺省的HTTP端口,如果有程序占用,则要换一个

l          Group的修改

– 修改 Group nogroup为 Group 0

l    由于在/etc/group文件中没有nogroup组,所以设成0。

l    在/etc/passwd中有nobody用户,所以User nobody不用修改。在Redhat9.0上为了方便一般改root

l          ErrorLog 的修改

– --原始值发布一个自建的日志文件 ErrorLog /var/log/boa/error_log

– 在嵌入式设备并如此必要,在调试可将其直接注释掉,这样会重定向的缺省错误输出,即串口上

– 正式发布,可直接 设为 ErrorLog /dev/null 即不输出.

l          AccessLog的修改

– 注释时 AccessLog的值 dev/null,调试时,可以将其改为 AccessLog /dev/console 输出到串口

l          ServerName的设置

– 修改 ServerName www.your.org.here为 ServerName

l     注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory”,所以必须打开。其它默认设置即可。

l          DocumentRoot修改

– DocumentRoot /var/www表示静态网页存放目录,用户访问都以为此为根目录

– 修改成你自己的静态网页目录

l          DirectoryIndex的修改

– 缺省网页名字.即用户只输出路径,不带网页名字,BOA自动调用这个网页,缺省是调用index.html,前提DocumnetRoot必须有这个文件存在.

– 缺省值 DirectoryIndex index.html

l          CGIPath的修改

– 表示CGI程序在调用时,BOA查找CGI的路径顺序.为了保险,可以把ScriptAlias 所指向路径加到这里来

– CGIPath /bin:/usr/bin:/usr/local/bin

l          scriptAlias的修改

– 修改 scrīptAlias /cgi-bin/  /usr/lib/cgi-bin/

– 为 scrīptAlias /cgi-bin/

l    Boa所有的CGI程序应该放在这个目录下,注意最后的一个/,必须要有!

BOA 运行前准备

l          如果采用缺省日志(即配置文件ErrorLog 所指向的)还需要创建日志文件所在目录/var/log/boa,

l          创建静态网页HTML文档的主目录,将静态网页存入该目录下,(即DocumentRoot指向的目录)

l          创建CGI脚本所在目录,将cgi的脚本和程序存放在该目录下.(即ScriptAlias 所指向的目录)

l          另外还要将mime.types文件复制/etc目录下,通常可以从linux主机的 /etc目录下直接复制即可。

l          执行时,如果boa.conf 在/etc/boa下,直接运行boa即可. 但boa.conf  在其它目录,需要-c 指示boa.conf所在目录

– 如果boa和boa.conf 在同一目录下,运行 ./boa –c .即可

3.BOA 动态页面支持原理

BOA 采用最早的一种动态页面技术,即CGI技术. CGI是Common Gateway Interface的缩写 .

网页是用HTML来表达的,但只能显示静态内容.为了让网页显示动态内容,多种技术被开发出来。CGI是最早一种,随后ASP,PHP,JSP等新的动态网页层出不穷.

CGI 应用程序读取从Web 服务器标准输出(stdout)传递来的各种信息,客户端的请求进行解释和处理,并用自己标准输出把处理结果发徐Web 服务器

CGI程序根据用户在前台输入的数据和本身状态,输出不同的结果,这样就形了动态网页.

因此,任何支持接收标准输入和标准输出的的程序都可以是CGI程序.只要标准输出的内容符合.HTML语法.因此,Linux Shell 脚本,C程序,Perl ,TCL等各种语言都能开发CGI程序.

CGI程序的缺点是每一次执行一个CGI程序都是调用了一个单独进程,占用系统资源大.并且开发效率也不高.因此在桌面和服务器上,均采用更新一代的动态页面解释语言.如ASP,PHP,JSP等等.但在嵌入式领域,很多情况下还是采用CGI这种比较简单的实现模式.

PHP是目前比较流行的动态页面平台.应用很多大型网站的开发.主要运行模式已经不是CGI模式,但仍然保留一个CGI接口程序,这就便BOA能够使用PHP的技术原理.

在所附的源码中,分别为Shell 脚本和C程序演示显示动态页面的使用

综上所述,BOA CGI程序有如下要求:

–                 从能从标准输入读取数据,并能用标准输出输出结果

–                 放在boa.conf, scriptAlias所指示的目录下,并有执行权限

–                 可以是脚本,或C程序

BOA判断CGI程序原理

l          BOA是通过用户发来URL(即浏览器里输入的网址)来判断是静态网页还是需要用CGI来处理

–                 如果url的路径包括cgi-bin 这们路径(即scriptAlias前半部分),那么BOA认为这是是需要cgi程序处理.并把它后面的参数变成cgi程度的命令行参数去执行.否则是静态网页

–                 如 http://192.168.0.146:8081/cgi-bin/hello.cgi

l                                        出现了cgi-bin,BOA把hello.cgi执行起来,如果hello.cgi正好是一个CGI程序,则进入CGI处理流程

4.PHP 与BOA配合.

4. 1 编译

用在php目录下.执行  ./configure --host=arm-linux

make.

php 4.4.7编译出来的CGI版的程序是 sapi/cgi/php,而php 5.2.3编译出来的CGI版程序是 sapi/cgi/php-cgi,而老版本是编译出来CGI程序名字是php,两个有所差别.

4.2 PHP 和BOA的配合

以下,假设整个项目所需的程序,PHP,BOA,SQLITE 都位于 /usr/local/arm-web 的php,boa,sqlite 下面

测试网页在www 下

所有的CGI程序在cgi-bin 下面

最终的测试程序 php-cgi,

PHP
测试网页(index.php….)必须放在DocumnetRoot
所指向的目录,在本项目就是www下,不能是cgi-bin目录下,(这是分析很久的程序和调试程序才得出这个结果,这是因为BOA把文档),而php的
cgi版本的程序放在 cgi-bin目录下.

4.3 用现成源码测试

1.                                本文档中所有文档所带源码和几个简单的示例代码.,建议解压在/usr/local下,解压后会生成arm-web 目录

tar xvzf arm-web.tgz –C /usr/local

2.                                并且由shell脚本build.sh自动将上述过程,执行,编译,用run.sh 脚本来运行.运行后,会使用TCP 8080端口

3.                                假设开发板IP地址为 192.168.1.230 ,则在PC的浏览器上地址栏上输入 http://192.168.1.230:8080 即可看到所有测试项

4.4 测试结果

没有经过PHP处理的网页

经过BOA+PHP处理后的效果


其它网页效果

 

阅读(6321) | 评论(0) | 转发(4) |

0

上一篇:linux网络编程:用C语言实现的聊天程序(同步通信)

下一篇:在Linux下为PHP5.3.8配置Zend Guard

相关热门文章

  • SHTML是什么_SSI有什么用...
  • shell中字符串操作
  • 卡尔曼滤波的原理说明...
  • 关于java中的“错误:找不到或...
  • shell中的特殊字符

热门推荐

    -->

    给主人留下些什么吧!~~

    评论热议

    BOA移植

    时间: 2024-11-10 14:20:52

    BOA移植的相关文章

    嵌入式开发之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

    嵌入式linux项目开发(一)——BOA移植

    嵌入式linux项目开发(一)--BOA移植 项目目标:使用BOA.CGIC.SQLite搭建嵌入式web服务器 一.嵌入式web服务器BOA简介 在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,使用极为方便. 目前嵌入式设备中所使用的web服务器主要有:boa.thttpd.mini_httpd.shttpd.lighttpd.goahe

    如何进行基于am335的boa移植?

    基于am335进行boa移植,一共需要五步,下面是详细的步骤,对这方面知识比较陌生的小伙伴,可以学起来啦. 1.准备开发环境: (1)VMware 10.0 (2)Ubuntu 14.04 64bit (3)Sail335开发板 (4)交叉编译器:gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux 2.源码: (1)Boa源码:boa-0.94.13.tar.gz (2)Boa测试页面:index.html 3.移植过程: (1)移植Boa ①解压缩

    arm linux上的第一个应用程序 BOA移植

    1. 首先, linux在开发板上能跑起来了. 包括网络驱动也有了, ifconfig之后, 能看到在rcS里面设置的IP, 也能ping通windows主机了, 当然, 也要window关掉防火墙才行. 2. 在windows上起一个tftp, 后来发现这样是不行的, 因为每个包都要反复打包, 有点累, 还是用虚拟机开nfs比较靠谱, 但是我虚拟机不靠谱, 老是不走有线网卡, 主动跑去无线去了. 3. busybo的tftp命令有点屌, 格式是: tftp -g -l localFileNam

    DM8168 IPNC Boa移植

    1.交叉编译openssL 下载openssL-1.0.0.tar.gz在虚拟机下进行交叉编译,生成libcrypto.a及libssl.a.将这两个文件拷贝到DVRRDK_03.00.00.00/boa-0.94.13/src目录下,编译步骤如下: a)解压源码: tar-zxvf openssl-1.0.0.tar.gz cdopenssl-1.0.0 b)配置为linux arm的交叉编译状态 ./Configure linux-elf-arm #修改makefile文件(L62), CC

    SylixOS移植Boa服务器

    1. Boa简介 Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右.作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求.但Boa支持CGI,能够为CGI程序fork出一个进程来执行.Boa的设计目标是速度和安全,适合于嵌入式系统的单任务的http服务器,源代码开放.性能高. 下面给大家介绍一下Boa服务器在SylixOS上移植的具体操作步骤,希望能够有帮助. 2. SylixOS Boa移植: Boa采用服务器模型,因此需要编

    (转)在嵌入式Linux系统(OK6410)中移植Boa 服务器

    OK6410的Boa服务器移植: <一> Boa的编译 1. 从 www.boa.org 下载 Boa 服务器的最新版:boa-0.94.13.tar.gz. 2. 解压:tar xzf boa-0.94.13.tar.gz 3. 进入解压后的文件夹 boa-0.94.13内部的 src文件夹,对源文件进行如下修改 ================================================= 由于arm-linux-gcc 编译器版本过高,对语法的支持有一些改变,所以需要

    嵌入式boa服务器移植

    问题1:交叉工具链:cross-2.95.3.tar.bz2(下载地址:http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/),开始使用的交叉工具链是arm-linux-gcc-3.3.2(下载地址:http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.3.2.tar.bz2), 使用该工具链编译出来的boa,在开发板上运行时,提示ssh: /lib/i686/l

    网页移植开发板

    接boa移植 运行 电脑输入开发板ip进入