Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1639729
  • 博文数量: 311
  • 博客积分: 7778
  • 博客等级: 少将
  • 技术积分: 4186
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 19:59
个人简介

蓝点工坊(http://www.bluedrum.cn) 创始人,App和嵌入式产品开发。同时也做相应培训和外包工作。 详细介绍 http://pan.baidu.com/s/1y2g88

文章存档

2012年(3)

2011年(115)

2010年(170)

2009年(23)

分类: 嵌入式

2010-04-16 23:26:04

 Andrew Huang
 
   很老的一篇了,用了这一篇文章换了一板开发板.隔了几年也没见类似文章出来,留在这里备份

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

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

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

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

1.所需源码

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

1.       操作系统为arm-linux 2.42.6均测试通过

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

3.       BOA源码下载Boa -0.94.13 ()

4.       PHP 源码下载php-5.2.3.tar.bz2 ()

5.       Php 测试网页

 

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

               l          1.下载Boa源码 ,解压

下载地址: 或者

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) $@

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  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/  <自已CGI程序所在目录>

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所在目录

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

3.BOA 动态页面支持原理 

BOA 采用最早的一种动态页面技术,CGI技术. CGICommon 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程度的命令行参数去执行.否则是静态网页

                

l                                        出现了cgi-bin,BOAhello.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把文档),phpcgi版本的程序放在 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的浏览器上地址栏上输入 即可看到所有测试项

4.4 测试结果

没有经过PHP处理的网页

经过BOA+PHP处理后的效果

其它网页效果
 
 
 
阅读(5996) | 评论(7) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-04-15 16:43:04

请问如何配置 php+boa+sqlite在arm上的环境呢?

chinaunix网友2010-08-03 16:06:41

你好,我想问下,编译好的php-cgi应该发到什么位置?

liningMCU2010-07-27 14:24:17

boa.conf是怎么配置的啊?

liningmcu2010-07-27 11:21:25

编译好的php后,放在开发板上,怎么与boa关联啊?

刘子一2010-07-26 11:03:12

学习了~