zoukankan      html  css  js  c++  java
  • 将Boa移植到Android平台上

    http://www.codesky.net/article/201104/174518.html

    boa是一款轻量级的、高性能的嵌入式web服务器,和普通的web服务器一样,它能够解析http协议,完成接收客户端的请求,分析请求,响应请求,向客户端返回响应结果等任务。本文将介绍如何把它移植到Android平台上。下面是具体的移植步骤:

    一、移植准备:
    (1)Android源码,可以到google网站下载。
    (2)boa源码,本人用的版本是0.94.13,可以到http://www.boa.org/ 下载。

    二、在Android平台上编译boa和boa_indexer
    将boa移植到Android平台上,最主要一点就是把boa的makefile改成Android平台上的makefile,即Android.mk。
    我们首先将boa源码目录拷贝到Android源码的一个目录下,比如external目录下,然后在boa源码目录下新建Android.mk文件,参照boa的makefile,将生成boa可执行程序需要的那些源文件放在Android.mk的LOCAL_SRC_FILES:=中,如下:

    /*****************************************************************************/
    LOCAL_SRC_FILES:=
             src/lex.yy.c
             src/y.tab.c
             src/alias.c
             src/boa.c
             src/buffer.c
             src/cgi.c
             src/cgi_header.c
             src/config.c
             src/escape.c
             src/get.c
             src/hash.c
             src/ip.c
             src/log.c
             src/mmap_cache.c
             src/pipe.c
             src/queue.c
             src/read.c
             src/request.c
             src/response.c
             src/select.c
             src/signals.c
             src/util.c
             src/sublog.c
             src/timestamp.c

    /*****************************************************************************/
    接着,将boa的makefile中的编译规则GCC_FLAGS,搬到Android.mk的LOCAL_CFLAGS后面,如下:
    /*****************************************************************************/
    LOCAL_CFLAGS := -Wstrict-prototypes -Wpointer-arith -Wcast-align -Wcast-qual
          -Wtraditional
          -Wshadow
          -Wconversion
          -Waggregate-return
          -Wmissing-prototypes
          -Wnested-externs
          -Wall
          -Wundef -Wwrite-strings -Wredundant-decls –Winline

    /*****************************************************************************/
    最后,生成boa可执行程序,如下:
    /*****************************************************************************/
    LOCAL_MODULE:= boa
    include $(BUILD_EXECUTABLE)
    /*****************************************************************************/
    注意:源码中的lex.yy.c在boa的源文件中找不到,但从makefile中我们可看出该文件由flex调用boa_lexer.l脚本生成的,命令如下:
    flex  boa_lexer.l,所以,我们需要手动执行该命令,先生成lex.yy.c。
    至此,在Android源码根目录下执行"make boa",便可执行程序boa生成。
    接下来是boa_indexer,
    这个的makefile 更简单,因为源文件较少,只有两个,它的makefile如下:
    /*****************************************************************************/

    include $(CLEAR_VARS)
    LOCAL_SRC_FILES:=
             src/index_dir.c
             src/escape.c
     
    LOCAL_SHARED_LIBRARIES :=
             libcutils
     
    LOCAL_CFLAGS := -Wstrict-prototypes -Wpointer-arith -Wcast-align -Wcast-qual
          -Wtraditional
          -Wshadow
          -Wconversion
          -Waggregate-return
          -Wmissing-prototypes
          -Wnested-externs
          -Wall
          -Wundef -Wwrite-strings -Wredundant-decls –Winline
     
    LOCAL_MODULE:= boa_indexer
    include $(BUILD_EXECUTABLE)

    /*****************************************************************************/
    改好后,make boa_indexer,搞定。
    编译的过程中,可能不会那么顺利,由于Android的C库跟其他的嵌入式工具链的C库有较大差别,所以编译过程中肯定会出现一些错误,但不要紧,按照错误提示,适当改一下就没问题了。

    三、把boa放到Android目标板上运行

    1.在pc上配置好boa.conf,关键要配置好以下几项
     1)修改 Group nogroup 为 Group 0
     2)修改 ErrorLog /var/log/boa/error_log 为 ErrorLog /etc/boa/log/error_log
     3)修改 AccessLog /var/log/boa/access_log 为 AccessLog  /etc/boa/log/access_log
     4)修改 #ServerName www.your.org.here 为 ServerName www.your.org.here
     5)修改 DocumentRoot /var/www 为 DocumentRoot /etc/boa/www
     6)修改 MimeTypes /etc/mime.types 为 MimeTypes /etc/boa/mime.types
     7)修改 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 为
    ScriptAlias /cgi-bin/ /etc/boa/www/cgi-bin/

     上面的几项修改好后,在Android目标板上创建跟上面配置相应的目录,如下:
     /etc/boa/用于存放所有关于boa的东西,
     /etc/boa/log用于存放日志文件,
     /etc/boa/www用于存放静态网页,
     /etc/boa/www/cgi-bin/,用于存放cgi脚本程序

    2.使用adb将boa相关制品push到Android目标板上(本人用的是带wifi的Android手机)
     (1)push boa到/etc/boa目录下。
             命令:adb push boa /etc/boa
    (2)push boa_indexer到/etc/boa目录下。
             命令:adb push boa_indexer /etc/boa
     (3)push mime.types到/etc/boa目录下,mime.types可以从PC的/etc目录下取得。
       命令:adb push mime.types /etc/boa
     (4)push一个简单的静态html页面到/etc/boa/www目录下。
       命令:adb push xxx.html /etc/boa/www

    3.测试
     (1)启动目标板的wifi,并将其设为热。
     (2)将电脑连接到目标板的wifi热点上。
     (3)启动目标板的boa服务器。
     (4)在浏览器上输入wifi热点的ip地址,例如192.168.2.254,如果正常,你将能看到刚放进去的xxx.html页面。

    到这里,移植到我们的目标板上的boa算是可以跑了,但这并不代表boa就没问题了,现在的boa只能处理简单的客户端的get请求而已,还无法支持客户端的post请求,这个问题的根本原因是用户权限不够导致的,处理post请求,boa必须先取得root权限,但boa的配置默认不是root权限,所以我们必须首先要给boa root权限,改两个地方即可,
    (1)修改配置文件boa.conf中的User nobody 改为: User root。
    (2)注释掉boa.c源文件中的如下几行代码:
         if( setuid(0)!=-1 ){
             DIE(“icky Linux kernel bug!”);
    }

    至此,boa到Android平台的移植完成。
    <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>
    阅读(112) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    Vsftpd 3.0.2 正式版发布
    Putdb WebBuilder 6.5 正式版本发布
    SoaBox 1.1.6 GA 发布,SOA 模拟环境
    pynag 0.4.6 发布,Nagios配置和插件管理
    Percona Playback 0.4,MySQL 负荷回放工具
    xombrero 1.3.1 发布,微型 Web 浏览器
    Hypertable 0.9.6.4 发布,分布式数据库
    libmemcached 1.0.11 发布
    CryptoHeaven 3.7 发布,安全邮件解决方案
    Android Activity生命周期
  • 原文地址:https://www.cnblogs.com/ztguang/p/12649018.html
Copyright © 2011-2022 走看看