移植BoaWeb服务器到ARM-Linux&mipsel-linux系统

一、Boa程序的移植

    1、下载Boa源码

     下载地址:

    http://www.boa.org/

     目前最新发行版本: 0.94.13 (几年没更新版本了)

     下载 boa-0.94.13.tar.gz,

     解压:

    [root@Localhost source]$tar xzf boa-0.94.13.tar.gz

    2、生成Makefile文件

     进入boa-0.94.13,直接运行src/configure文件

    [root@Localhost src]$./configure

    3、修改Makefile文件

    把arm-linux-gcc加入到PATH路径信息中

    CROSS = arm-linux-

    CC = $(CROSS)gcc

    CPP = $(CROSS)gcc -E

    #CC = gcc

    #CPP = gcc -E

    arm-linux-gcc: installation problem, cannot exec `cpp0': ?????????

    arm-linux-gcc: installation problem, cannot exec `cpp0': ?????????

    arm-linux-gcc: installation problem, cannot exec `cc1': ?????????

    arm-linux-gcc: installation problem, cannot exec `cpp0': No such file or directory

    解决的办法,把arm-linux-gcc安装在他的默认目录。

    2.95.3 /usr/local/arm/2.95.3/bin/

    

    (注意:必须用cross-2.95.3, 如使用3.4.1、4.1.1等等会出错或x86 gcc 或mipsel-linux-gcc都会报如下的错误,修改后错误不再出现)

    gcc -g -O2 -pipe -Wall -I. -c -o util.o util.c

    util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token

    make: *** [util.o] Error 1

    解决方法:

    修改 src/compat.h

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

    修改成

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

    

    4、交叉编译

    [root@Localhost src]$ make

    5、去除调试信息,减小体积,大约能减小一半还多。(可选)

    [root@Localhost src]$ arm-linux-strip boa

    6、将编译好的程序放入根文件系统的/bin目录下。

    二、配置Boa(以下部分未亲自测试,文字来源于转载博客)

    Boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在Boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改。

    [root@Localhost src]$ cd ../..

    [root@Localhost source]$ cd ../nfs/rootfs/etc/

    [root@Localhost etc]$ mkdir boa

    [root@Localhost etc]$ chmod 777 boa/

    [root@Localhost etc]$ cd boa

    [root@Localhost boa]$ kwrite boa.conf

    1、Group的修改

    修改 Group nogroup

    为 Group user(开发板上有的组)

    修改 User nobody

    为 User boa (user组中的一个成员)

    根据你的开发板的情况设定。一定要存在的组和用户。

    

    以下是我在开发板上的操作:

    [root@~]#adduser -g user boa

    Changing password for boa

    Enter the new password (minimum of 5, maximum of 8 characters)

    Please use a combination of upper and lower case letters and numbers.

    Enter new password:

    Bad password: too short.

    Warning: weak password (continuing).

    Re-enter new password:

    passwd[820]: password for `boa' changed by user `root'

    Password changed.

    [root@~]#

    2、ScriptAlias的修改

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

    为 ScriptAlias /cgi-bin/ /var/www/cgi-bin/

    这是在设置CGI的目录,你也可以设置成别的目录。比如用户文件夹下的某个目录。

    3、ServerName的设置

    修改 #ServerName

    www.your.org.here

    为 ServerName

    www.your.org.here

    注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory”,所以必须打开。其它默认设置即可。你也可以设置为你自己想要的名字。比如我设置为:ServerName tekkaman2440

    此外,还需要:

    将mime.types文件复制/etc目录下,通常可以从linux主机的 /etc目录下直接复制即可。

    (以下配置和boa.conf的配置有关)

    创建日志文件所在目录/var/log/boa

    创建HTML文档的主目录/var/www

    创建CGI脚本所在录 /var/www/cgi-bin

    [root@Localhost log]$ mkdir -m 777 boa

    [root@Localhost log]$ cd ..

    [root@Localhost var]$ mkdir -m 777 www

    [root@Localhost var]$ mkdir -m 777 www/cgi-bin

    [root@Localhost var]$ cd ..

    [root@Localhost rootfs]$ cp /etc/mime.types etc/

    三、运行Boa

    开发板操作:

    [root@~]#boa

    如果发现boa没有运行,则可以在开发板的/var/log/boa/error_log文件中找原因。

    比如端口已被其他程序占用:

    [root@~]#cat /var/log/boa/error_log

    [20/Feb/2008:21:21:57 +0000] boa.c:194 - unable to bind: Address already in use

    或是用户设置错误等等,都可以查到。

    Q:无法启动 Boa,error log 显示 "boa.c:266.icky Linux kernel bug!:No such file"

    A:修改 src/boa.c,将以下判断注释掉:

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

    DIE("icky Linux kernel bug!");

    }*/

    重新编译

    Q:无法启动 Boa,error log 显示 "boa.c:211 - getpwuid....略"

    A:修改 src/boa.c,将以下判断注释掉:

    /*if (passwdbuf == NULL) {

    DIE("getpwuid");

    }

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

    DIE("initgroups");

    }*/

    重新编译

    四、功能测试

    静态网页测试

    将静态网页存入根文件系统的/var/www目录下(可以将主机 /usr/share/doc/HTML/目录下的index.html、homepage.css和img、stylesheet-images目录复制到/var/www目录下)

    我参考《嵌入式Web服务器移植 》的做法如下:

    在根文件系统的/var目录下

    [root@Localhost var]$ cp /usr/share/doc/HTML/index.html www/

    [root@Localhost var]$ cp -r /usr/share/doc/HTML/img www/

    [root@Localhost var]$ cp /usr/share/doc/HTML/homepage.css www/

    [root@Localhost var]$ cp -r /usr/share/doc/HTML/stylesheet-images www/

    直接在浏览器中输入开发板的IP地址(比如我的是

    http://192.168.1.2

    ) ,出现fedora的欢迎网页。静态HTML调试成功。

    CGI功能测试

    1、编写HelloworldCGI.c程序

    [root@Localhost source]$ vi helloworldCGI.c

    (主程序的程序开头一定要用Tab,而不是空格,不然编译可能不通过)

    #includestdio.h>

    #includestdlib.h>

    int main(void)

    {

     printf("Content-type: text/html\n\n");

     printf("\n");

     printf("CGI Output\n");

     printf("\n");

     printf("Hello,world.\n");

     printf("\n");

     printf("\n");

     exit(0);

    }

    2.交叉编译生成CGI程序

    [root@Localhost source]$ /home/root/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-gcc -o helloworldCGI helloworldCGI.c

    将helloworldCGI 拷贝至根文件系统的/var/www/cgi-bin/下

    [root@Localhost source]$ cp helloworldCGI ../nfs/rootfs/var/www/cgi-bin/

    3.测试

    浏览器输入

    

    http://192.168.1.2/cgi-bin/helloworldCGI

    

    网页出现 Hello,world. 调试成功! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值