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) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    Hibernate save, saveOrUpdate, persist, merge, update 区别
    Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目
    Neo4j批量插入(Batch Insertion)
    嵌入式(Embedded)Neo4j数据库访问方法
    Neo4j 查询已经创建的索引与约束
    Neo4j 两种索引Legacy Index与Schema Index区别
    spring data jpa hibernate jpa 三者之间的关系
    maven web project打包为war包,目录结构的变化
    创建一个maven web project
    Linux下部署solrCloud
  • 原文地址:https://www.cnblogs.com/ztguang/p/12647389.html
Copyright © 2011-2022 走看看