• 移植BOA服务器到开发板


    移植BOA 服务器到GEC210 开发板

    开发平台
    主机:VMWare--Ubuntu 10.04 LTS
    开发板:GEC210 / linux-2.6.35.7
    编译器:arm-linux-gcc-4.5.1
    所需软件:boa-0.94.13.tar.gz
    下载:http://www.boa.org/boa-0.94.13.tar.gz
    第一部分  移植步骤
    BOA 服务程序编译
    1、设置好交叉编译工具链路径:
    export PATH=/usr/local/arm/4.5.1/bin:$PATH
    2、解压下载好的BOA 压缩包
    tar zxvf boa-0.94.13.tar.bz2
    3、进入解压后的目录
    cd boa-0.94.13
    4、进入BOA 源码包的src 目录(下面操作均在该目录下进行)
    cd src
    5、利用configure 工具配置生成Makefile 文件
    ./configure
    6、修改生成的Makefile 文件(设置交叉编译器)

    CC = gcc
    CPP = gcc –E
    修改为:
    CC=arm-linux-gcc
    CPP=arm-linux-gcc –E

    7、修改defines.h 文件
    将#define SERVER_ROOT “/etc/boa”修改为#define SERVER_ROOT “/gec/web”
    该处定义的是WEB 服务器的文件根目录,跟boa.conf 文件中的DocumentRoot 一致即可。
    8、修改compat.h 文件
    将#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
    修改成#define TIMEZONE_OFFSET(foo) foo->tm_gmtoff
    防止在make 时出现如下错误提示:
    util.c:100:1: pasting "t" and "->" does not give a valid preprocessing token
    9、修改boa.c 文件
    注释掉下面两句话:
    #if 0
    if (passwdbuf == NULL) {
    DIE(”getpwuid”);
    }
    if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
    DIE(”initgroups”);
    }
    #endif
    否则会出现错误: getpwuid: No such file or directory
    注释掉下面语句:
    #if 0
    if (setuid(0) != -1) {
    DIE(”icky Linux kernel bug!”);
    }
    #endif
    否则会出现错误: - icky Linux kernel bug!: No such file or directory
    10、编译boa
    make
    至此,在src 目录中将得到交叉编译后的boa 程序,可以使用以下方法缩小程序的体积
    arm-linux-strip boa //去掉相关调试信息,对交叉编译生成的boa 程序瘦身。
    编译错误(1):
    yacc  -d boa_grammar.y
    make: yacc:命令未找到
    make: *** [y.tab.c]
    解决办法:#apt-get install bison,安装完成后要再一次执行 #./configure
    再执行 #make
    编译错误(2):
    y.tab.c: 在函数‘yyparse’中:
    y.tab.c:1319:7: 警告:隐式声明函数‘yylex’
    lex  boa_lexer
    make: lex:命令未找到
    make: *** [lex.yy.c] 错误127
    解决办法:#yum install flex
    安装完成,再#make就可以了
    第二部分  BOA 服务器运行环境搭建
    一、在解压的boa 源码目录下有个boa.conf 文件,根据GEC210 根文件系统的设计,对它进行如下修改:
    1、修改用户与用户组信
    1)、User 的修改:
    将User nobody 修改为User 0
    2)、Group 的修改:
    将Group nogroup 修改为Group 0
    在根文件系统中的/etc/passwd 文件中没有nobody 用户,所以设成0。
    在根文件系统中的/etc/group 文件中没有nogroup 组,所以设成0。
    2、相关日志文件存放位置项,保留将保存日志文件,根据需要可以选择是否注释掉
    #ErrorLog /var/log/boa/error_log
    #AccessLog /var/log/boa/access_log
    3、打开ServerName 的设置:
    将#ServerName www.your.org.here 前面的#号去掉,该项默认为未打开,执
    行Boa 会异常退出,提示“gethostbyname::No such file or directory”,所以
    须打开。
    4、将DocumentRoot /var/www 修改为:DocumentRoot /gec/web,不然会提示错误
    GET / HTTP/1.1" ("/var/www/"): document open: No such file or directory
    5、将DirectoryMaker /usr/lib/boa/boa_indexer 注释掉
    6、将MimeTypes /etc/mime.types 修改为:MimeTypes /gec/web/mime.types
    7、将DefaultType text/plain 修改为:DefaultType text/html。
    8、将Alias /doc /usr/doc 注释掉。
    9、SccriptAlias 的设置:
    将ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/修改为
    ScriptAlias /cgi-bin/ /gec/web/cgi-bin/
    至此,BOA 服务器配置已经完成,接下来完善根文件系统即可在GEC210 上运行。
    二、完善根文件系统
    1、在开发板的根文件系统根目录创建必要的BOA 服务器运行目录:
    在根文件系统的根目录下创建/gec/web 目录:
    cd /root/rootfs
    mkdir -p gec/web
    进入到创建好的web 目录下,创建cgi-bin 目录:
    mkdir cgi-bin
    2、把交叉编译生成的boa 程序和配置好的boa.conf 文件及主机下的/etc/mime.types 文件
    都复制到板上的/gec/web 目录下,并在该目录下创建一文件index.html,文件内容可以参
    考如下:
    <html>
    <head>
    <title>BOA TEST</title>
    </head>
    <body>
    <h1>BOA TEST</h1>
    </body>
    </html>
    3、进入到板上的/gec/web 目录下,执行./boa,可以看到如下启动信息:
    在主机上启动浏览器,输入URL 为http://192.168.0.23,访问板上的BOA 服务,效果如下:

    wps_clip_image-20959
    4、测试完静态页面后,接下来测试CGI 脚本文件:
    在主机上创建一文件test.c,文件内容如下:
    include <stdio.h>
    int main(void)
    {
    printf("Contenttype:text/html ");
    printf("<html> ");
    printf("<head><title>BOA CGI TEST</title></head> ");
    printf("<body> ");
    printf("<h1>BOA CGI TEST</h1> ");
    printf("</body> ");
    printf("</html> ");
    return 0;
    }
    编译:arm-linux-gcc test.c –o test.cgi
    然后用交叉编译工具链编译,将得到的test.cgi 文件复制到板上的/gec/web/cgi-bin 目录下:
    在浏览器输入http://192.168.0.23/cgi-bin/test.cgi,可以看到如下效果:

    wps_clip_image-21077

    相关文档及文件下载链接: http://download.csdn.net/detail/klcf0220/5888169

    另外还有一份关于S3C2440开发板的:http://download.csdn.net/detail/klcf0220/5888157

  • 相关阅读:
    asp.net mvc 中使用async/await异步编程
    简述C#中浅复制和深复制
    Angular:自定义表单控件
    Angular:Reactive Form的使用方法和自定义验证器
    Angular:ViewProviders和Providers的区别
    Angular:OnPush变化检测策略介绍
    Angular:利用内容投射向组件输入ngForOf模板
    在Angular中利用trackBy来提升性能
    Angular @HostBinding()和@HostListener()用法
    Angular利用@ViewChild在父组件执行子组件的方法
  • 原文地址:https://www.cnblogs.com/klcf0220/p/3243086.html
Copyright © 2020-2023  润新知