Chinaunix首页 | 论坛 | 博客
  • 博客访问: 136297
  • 博文数量: 16
  • 博客积分: 225
  • 博客等级: 民兵
  • 技术积分: 185
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-28 22:07
个人简介

人是懒惰的,只要有借口就会不想往前。如果既有明确的目标,同时道路又直直指向目标,一览无余,只等你开始往前走,那么便没有借口,一往无前。

文章分类
文章存档

2014年(2)

2013年(9)

2012年(5)

分类: LINUX

2012-06-22 20:44:37

  Boa服务器移植到Mini2440开发板
 
    如果能在x86平台成功移植Boa服务器,那么把Boa服务器移植到开发板上运行是很容易的事情。它们移植的过程都很相似,整个移植过程我主要参考了TX的《web服务器Boa移植手册》,在此表示非常感谢。下面是我成功移植Boa到Mini2440开发板上的具体操作过程。
 
    一、移植环境
 
    宿主机:Red Hat Enterprise Linux 5
    目标机:Mini2440
    交叉工具链:arm-linux-gcc-4.3.2
    Boa服务器版本:boa-0.94.13
  
    二、下载Boa源码包,将其进行解压,并进行配置和编译。
 
    1、下载boa-0.94.13.tar.gz,解压:
 
    # tar zxvf boa-0.94.13.tar.gz
 
    2、进入到boa-0.94.13下的src目录:
 
    # cd boa-0.94.13/src
   
    3、修改文件
 
   (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");
    }*/

    否则会出现错误:
 
        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:226 - icky Linux kernel bug!: No such file or directory

 
    3、生成Makefile文件:
   
    # ./configure
 
    4、修改Makefile文件:
   
    # vi Makefile
 
    找到代码31,32行:
        CC = gcc
        CPP = gcc -E
    修改为:
        CC = arm-linux-gcc
        CPP = arm-linux-gcc -E
 
    5、编译:# make
 
    此时会在src目录下生成boa可执行文件。
   
    用ls命令查看:
 
    # ls -l boa
 
        -rwxr-xr-x 1 root root 199146 06-21 16:59 boa
 
    去掉调试信息,以减少boa体积:
 
    # arm-linux-strip boa
   
    再用ls查看:
 
    # ls -l boa 
 
        -rwxr-xr-x 1 root root 61192 06-21 17:00 boa

    可以看到boa文件大小变小了很多。
  
    6、将boa可执行文件拷贝到制作好的要运行在开发板的根文件系统的usr/bin目录下,并在etc目录下创建boa目录,拷贝boa-0.94.13目录下的boa.conf到boa下。

 
    四、修改配置文件boa.conf
 
    # vi /etc/boa/boa.conf
 
    1、修改访问权限
 
    代码48行:
        User nobody,修改为:User 0
    代码49行:
        Group nogroup,修改为:Group 0
 
    2、设定日志目录:
 
        ErrorLog   /var/log/boa/error_log
        AccessLog  /var/log/boa/access_log
 
    3、设置html文件目录:
 
        DocumentRoot  /etc/boa/www
 
    4、设置默认首页:
 
        DirectoryIndex  index.html
 
    5、设置cgi脚本目录: 
 
        ScriptAlias  /cgi-bin/ /etc/boa/cgi-bin
 
    五、根据配置文件boa.conf所做的修改创建相应目录
 
    1、建立/var/log/boa目录,以便存放日志文件。
 
    2、建立/etc/boa/www目录,将你的主页index.html拷贝到www目录下。
 
    3、建立/etc/boa/cgi-bin目录,用来存放一些用来测试的cgi脚本。
 
    六、在Mini2440开发板上进行测试
 
    1、利用mkyaffs2image工具生成根文件系统映象:
   
    # mkyaffs2image boa_rootfs boa_rootfs.img
 
    2、将映象文件boa_rootfs.img烧写到Mini2440的nand flash中,重启开发板。
 
    3、用网线连接好开发板和PC机,设置虚拟机、Windows和开发板的IP在同一网段。
   
    4、启动boa程序:
 
    # boa
   
    查看日志文件:
 
    # vi var/log/boa/error_log
 
    看到下面信息说明Boa服务器已经成功启动起来:
 
[01/Jan/1970:00:03:52 +0000] boa: server version Boa/0.94.13
[01/Jan/1970:00:03:52 +0000] boa: server built Jun 21 2012 at 16:59:46.
[01/Jan/1970:00:03:52 +0000] boa: starting server pid=491, port 80
   
    打开浏览器,输入开发板的IP,就可以访问到存放在www目录下index.html。
阅读(2501) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~