boa移植到android平台上

时间:2022-11-14 04:01:14

一 、到http://www.boa.org/上下载bor服务器,本人用的是0.94.13版本。

二、将其解压到android源码根目录下的external/boa中

三、在boa文件夹下创建Android.mk文件,具体内容如下

ifeq ($(TARGET_ARCH),arm)

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_PRELINK_MODULE := false

LOCAL_SRC_FILES:= src/lex.yy.c \

src/y.tab.c \ //TAB间隔,自己把握

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

LOCAL_SHARED_LIBRARIES := \

libcutils

LOCAL_C_INCLUDES += $(LOCAL_PATH)/src

LOCAL_MODULE:= libmy

include $(BUILD_SHARED_LIBRARY) //生成libmy库

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= src/lex.yy.c \

src/y.tab.c \ //TAB间隔,自己把握

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

LOCAL_CFLAGS := -g -O2 -pipe -Wall -I.



LOCAL_SHARED_LIBRARIES := \

libcutils libmy

LOCAL_C_INCLUDES += $(LOCAL_PATH)/src

LOCAL_MODULE:= boa

include $(BUILD_EXECUTABLE)

endif


四、修改boa源码

(1)修改 src/compat.h

#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

修改成

#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

(2)修改 src/log.c

if (dup2(error_log, STDERR_FILENO) == -1) {

                         DIE("unable to dup2 the error log");

                   }

为:

/*if (dup2(error_log, STDERR_FILENO) == -1) {

                         DIE("unable to dup2 the error log");

                   }*/

(3)修改src/boa.c

if (passwdbuf == NULL) {

        DIE(”getpwuid”);

        }

        if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

        DIE(”initgroups”);

        }

#if 0

        if (passwdbuf == NULL) {

        DIE(”getpwuid”);

        }

        if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {

        DIE(”initgroups”);

        }

        #endif

(4)修改src/boa.c

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

                        DIE(”icky Linux kernel bug!”);

        }

#if 0

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

                        DIE(”icky Linux kernel bug!”);

                }

#endif

五、编译

回到android源码根目录下,执行. build/envsetup.sh,之后执行mmm external/boa编译boa源码

六、配置boa.conf

 1)修改 Group nogroup为 Group 0  修改 User nobody为 User 0

 2)修改 ErrorLog /var/log/boa/error_log为 #ErrorLog /var/boa/log/error_log

 3) 修改 AccessLog /var/log/boa/access_log为 #AccessLog /var/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/

 

七、由于开发板中的etc目录位于android源码下的out/target/product/rk29sdk/system/etc下,所以在该目录下创建如下目录:

  /etc/boa/

 /etc/boa/log

 /etc/boa/www

 /etc/boa/www/cgi-bin/

(1)将boa.conf拷贝到/etc/boa目录下

(2)把mime.types拷到/etc/boa目录下,mime.types可以从自己机子的/etc目录下取得。

(3)把静态html页面拷到/etc/boa/www目录下。

八、执行./mkimage生成system.img,将其烧到板子上。

九、测试

 (1)启动目标板的wifi热点。

 (2)将电脑连接到目标板的wifi热点上。

 (3)执行adb shell进入命令界面,执行boa,启动目标板的boa服务器。

 (4)在浏览器上输入wifi热点的ip地址(可在命令界面执行busybox ifconfig命令进行查看),如果正常,你将能看到刚放进去的html页面。