linux程序 移植安卓手机版下载,boa服务移植到安卓手机

本文详细介绍了如何在Ubuntu 12环境下,使用arm-none-linux-gnueabi-gcc工具链,针对安卓手机进行Boa Web服务器的移植过程,包括头文件修改、Makefile配置、boa.conf调整及实际部署步骤,适合移植者参考。
摘要由CSDN通过智能技术生成

Boa是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。

下面给大家介绍一下Boa服务器移植的具体操作步骤,希望能够有帮助。

我所用的环境是在ubuntu12下,交叉编译工具arm-none-linux-gnueabi-gcc(arm-linux-gcc-4.4.3.tar.gz),运行板子安卓手机(最好是烧的android debug版,这样有root权限操作较为方便一些);

结合网上一些教程结合自己的移植过程中遇到的问题,贴出来;编译之前需要安装bison和flex,这两个工具用,sudo apt-get install就可以安装了;1.下载Boa源码

下载地址:

最新发行版本: 0.94.13

下载 boa-0.94.13.tar.gz

解压:# tar xzf boa-0.94.13.tar.gz

2.修改一些头文件

(1)修改 src/compat.h

找到

#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff修改成#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

否则会出现错误:

util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] 错误 1

(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");

}*/

否则会出现错误:

log.c:73 unable to dup2 the error log:bad file descriptor

(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

否则会出现错误:boa.c:211 - getpwuid: No such file or directory

注释掉下面语句:

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

DIE(”icky Linux kernel bug!”);

}

#if 0

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

DIE(”icky Linux kernel bug!”);

}

#endif

否则会出现问题:boa.c:228 - icky Linux kernel bug!: No such file or directory

3、生成Makefile文件

执行:

#cd boa-0.94.13/src

#./configure

4、修改Makefile

在 boa-0.94.13/src目录下修改Makefile

vim Makefile

找到CC,CPP,并添加AR,LD,STRIP,如下

CC = arm-none-linux-gnueabi-gcc

CPP = arm-none-linux-gnueabi-gcc -E

AR = arm-none-linux-gnueabi-ar

LD = arm-none-linux-gnueabi-ld

STRIP = arm-none-linux-gnueabi-strip

找到生成boa和boa_indexer的地方添加两行,如下

boa:$(OBJS)

$(CC) -o $@ $^ $(LDFLAGS) $(LIBS)

$(STRIP) boa

boa_indexer:index_dir.o escape.o

$(CC) -o $@ $^ $(LDFLAGS) $(LIBS)

$(STRIP) boa_indexer

然后make

5、boa.conf的配置

这一步的工作也在电脑主机上完成。

在boa-0.94.13目录下已有一个示例boa.conf,可以在其基础上进行修改。如下:

#vi boa.conf

(1)Group的修改

修改 Group nogroup

为 Group 0

(2)user的修改

修改 User nobody

为 User 0

(3)ScriptAlias的修改

修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

为 ScriptAlias /cgi-bin/ /etc/boa/www/cgi-bin/

(5)DoucmentRoot的修改

修改DoucmentRoot /var/www

为DoucmentRoot /etc/boa/www

(6)ServerName的设置

修改#ServerName

为 ServerName

否则会出现错误“gethostbyname::No such file or directory”

(7)AccessLog修改

修改AccessLog /var/log/boa/access_log

为#AccessLog /var/boa/log/access_log

否则会出现错误提示:“unable to dup2 the error log: Bad file descriptor”

(8)以下配置和boa.conf的配置有关,都是在ARM根文件系统中创建

以下步骤在 安卓手机上进行:

adb root利用root权限启动adb,

adb进入手机中,

cd /system/etc/

mkdir boa

这时候会报错:mkdir failed for boa, Read-only file system

解决办法:

mount -o rw,remount /system

在手机adb下建立以下目录

/etc/boa/用于存放所有关于boa的东西,

/etc/boa/log用于存放日志文件,

/etc/boa/www用于存放静态网页,

/etc/boa/www/cgi-bin/,用于存放cgi脚本程序

将boa.conf拷贝到开发板根文件系统的/etc/boa下

#adb push boa.conf /etc/boa

将src下的boa,boa_indexer拷到手机中的/etc/boa下

#adb pushboa /etc/boa

#adb pushboa_indexer /etc/boa

将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下

#sudo adb push /etc/mime.types /etc/boa

将你的主页index.html拷贝到www目录下,同样利用adb push

adb下启动boa:

cd /system/etc/boa/

./boa

6、测试

adb下利用netcfg命令查看手机的IP 地址,打开手机的热点共享,然后用一台设备连上热点,打开浏览器输入IP,就可以看到刚才push进去的index.html的网页

OK

需要用cgi测试的话,将cgi程序在本地编译好adb push进www/cgi-bin下,

如果出现下面问题

cgi_header: unable to find LFLF

解决办法:

网上有相应的解决办法,如果还是不行的话,在本地编译cgi程序还是用前面提到的交叉编译工具来编译,并且需要静态编译,因为android使用的bonic libc和libc库还是不一样的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值