zoukankan      html  css  js  c++  java
  • 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) $@

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

    – 如果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移植 - hh8582 - 木头人

    经过BOA+PHP处理后的效果


    BOA移植 - hh8582 - 木头人
    其它网页效果
    BOA移植 - hh8582 - 木头人
     
    BOA移植 - hh8582 - 木头人
    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(6321) | 评论(0) | 转发(4) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    [转][黄忠成]Object Builder Application Block
    C#中的接口
    委托、事件与Observer设计模式
    [转][黄忠成]Object Builder Application Block (1)
    C# 中的委托和事件
    Android布局充分演示Demo
    android代码重启 .
    【转】小游戏>弹球
    多个Icon的APk——实现多程序入口总结
    为你的Android应用定制属于你的BaseActivity
  • 原文地址:https://www.cnblogs.com/ztguang/p/12647389.html
Copyright © 2011-2022 走看看