Chinaunix首页 | 论坛 | 博客
  • 博客访问: 427995
  • 博文数量: 139
  • 博客积分: 106
  • 博客等级: 民兵
  • 技术积分: 613
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-24 16:03
文章分类

全部博文(139)

文章存档

2016年(1)

2014年(16)

2013年(23)

2012年(98)

2011年(1)

分类:

2012-09-24 14:27:12

LinuxBoa服务器移植,交叉编译boa并成功移植到FL2440开发板上,并且CGI程序运行正常。

主机环境:redhat9
交叉编译器:arm-linux-gcc 3.4.1

BOA版本:0.94.13
平台:s3c2440
一:下载源码:从官方网站下载源码,并将源码放置在/src 目录下。

[root@ EmbedSky ~]# cd /usr/src      进入源码目录

[root@ EmbedSky src]# tar zxvf boa-0.94.13.tar.tar  解压源码压缩包

[root@ EmbedSky src]# cd boa-0.94.13          进入源码解压包

[root@ EmbedSky  boa-0.94.13]# cd src

[root@ EmbedSky src]# ./configure             生成makefile

 二:编译前修改的文件:

1. 修改Makefile文件,找到CC=gccCPP=gcc -E,分别将其改为交叉编译器安装的路径:

CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc

CPP=/usr/local/arm/2.95.3/bin/arm-linux-g++

保存退出。

2. 修改编译方式:

LDFLAGS = -g –static

: 使用静态编译可以让目标文件自动的包含所需要的

库文件,而动态编译需要手工拷贝库文件。

3.修改/src/defines.h文件:

#define SERVER_ROOT "/etc/boa"

4 修改boa-0.94/src/ util.c文件

修改char *get_commonlog_time(void)函数。

time_offset = 0;

5. 修改src/config.cCurrent_uid=1

6. 修改compat.h 把第120 行的

#define

TIMEZONE_OFFSET(foo)foo##->tm_gmtoff

修改为:

#define

TIMEZONE_OFFSET(foo)foo->tm_gmtoff

7.修改/src/boa.c,注释掉下面两行:

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

            DIE("icky Linux kernel bug!")} */

/*if (passwdbuf == NULL) {

            DIE("getpwuid"); }*/

8 gethostbyname:: Resource temporarily unavailable

这个问题我也遇到过我只是把src文件夹下的config.c里的if(!server_name){..........}大概在266行到286行之间注释掉就能运行在板子上运行boa

解决:config.c

/*if (!server_name) {

        struct hostent *he;

        char temp_name[100];

   if (gethostname(temp_name, 100) == -1) {

            perror("gethostname:");

            exit(1);  }

        he = gethostbyname(temp_name);

        if (he == NULL) {

            perror("gethostbyname:");

            exit(1);   }

        server_name = strdup(he->h_name);

        if (server_name == NULL) {

            perror("strdup:");

            exit(1);} }*/

9. /src/log.c中的修改:注释掉:

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

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

        } */                                                      

10. boa.conf中的修改:

1 ServerName的设置

修改#ServerName

ServerName

    注意:该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::No such file or directory,所以必须打开。其它默认设置即可。

    注意:以下是为改为下面这样的:

2UserGroup的修改:

    User 0

    Group 0

3ErrorLog /var/log/boa/error_log

    AccessLog /var/log/boa/access_log

4DocumentRoot /var/www

5DirectoryIndex index.html

6KeepAliveMax 1000

    KeepAliveTimeout 10

7MimeTypes /etc/mime.types

8ScriptAlias /cgi-bin/  /var/www/cgi-bin/

11. 此外,还需要将mime.types文件复制目标板根文件系统/etc目录下,通常可以从linux主机的 /etc目录下直接复制即可。

三:运行make进行编译,得到可执行的程序boa

[root@ EmbedSky boa-0.94.13]# cd /usr/src/boa-0.94.13/src

[root@ EmbedSky src]# make clean

rm -f y.tab.o lex.yy.o alias.o boa.o buffer.o cgi.o cgi_header.o config.o escape.o get.o hash.o ip.o log.o mmap_cache.o pipe.o queue.o read.o request.o response.o select.o signals.o util.o sublog.o timestamp.o boa core lex.yy.c y.tab.c y.tab.h *~ boa_indexer index_dir.o

[root@EmbedSky src]# make

去掉调试信息: # /usr/src/usr/local/arm/3.4.1/bin/arm-linux-strip boa

 :安装Boa配置文件的修改

 利用超级终端经串口向arm板传送配置文件。

1. 将编译得出的可执行文件/boa-0.94.13/src中的boa文件,拷到/sbin目录下。

2. /var下新建logwww目录:

       #cd /var

   # mkdir log       // 创建日志文件所在目录

   # mkdir www     //创建HTML文档的主目录

#cd log

   # mkdir boa

       #cd /var/www

   # mkdir cgi-bin          //创建CGI脚本所在录

#mkdir img            //创建图片所在目录

index.html文件拷到/var/www

   # chmod 777 /var/log/* //文件权限设定777表示所有人都可读、可写、可执行

   # chmod 777 /var/www/*

3. /etc下新建目录boa

# mkdir /etc/boa

/boa-0.94.13中的boa.conf文件拷到/etc/boa

# chmod 777 /etc/boa/*

4.arm板的ip地址的配置

# ifconfig eth0 172.20.182.92 netmask 255.255.255.0

5.pc机的ip地址设置:

ip address       172.20.182.82

subnet mask     255.255.255.0

default gateway  172.20.182.254

dns servers      61.138.125.65

(pc机的ip网络设置可以直接连上校园网络,只需换上网线即可,方便快捷)                         

运行及功能测试

# boa&                                                       

# [01/Jan/1970:06:59:44 +0000] boa: server version Boa/0.94.13 //版本号

[01/Jan/1970:06:59:44 +0000] foa: server built Dec 12 2011 at 16:54:43. //启动时间

[01/Jan/1970:06:59:44 +0000] boa: starting server pid=573, port 80 //进程号573 端口80

[1] + Done                       boa

# ps                       //显示所有进程

  PID  Uid        VSZ Stat Command

    1 root       1816 SW  init

    2 root            SWN [ksoftirqd/0]

    3 root            SW< [events/0]

    4 root            SW< [khelper]

    5 root            SW< [kthread]

   21 root            SW< [kblockd/0]

   24 root            SW  [khubd]

   77 root            SW  [pdflush]

   78 root            SW  [pdflush]

   80 root            SW< [aio/0]

   79 root            SW  [kswapd0]

  286 root            SW  [kseriod]

  340 root            SW  [mtdblockd]

  376 root            SW< [krfcommd]

  396 root      19844 SW  ./qpe

  397 root    $  1828 SW  -sh

  398 root       1816 SW  init

  414 root       9008 SW< /usr/bin/qss

  456 root       1820 SW  /bin/sh

  538 root      13096 SWN /usr/bin/quicklauncher

  573 root       2116 SW  boa      // boa服务器移植运行成功!!!

  574 root       1820 RW  ps

网线接入:

# eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1

[01/Jan/1970:07:00:37 +0000] request from 172.20.182.82 "GET /images/bg01.gif HTTP/1.5" ("/var/www/images/bg01.gif"): document open: No such file or directory

[01/Jan/1970:07:00:42 +0000] request from 172.20.182.82 "GET /favicon.ico HTTP/1.1" ("/var/www/favicon.ico"): document open: No such file or directory

[01/Jan/1970:07:01:50 +0000] request from 172.20.182.82 "GET /images/bg01.gif HTTP/1.1" ("/var/www/images/bg01.gif"): document open: No such file or director}

[01/Jan/1970:07:01:53 +0000] request from 172.20.182.82 "GET /favicon.ico HTTP/1.1" ("/var/www/favicon.ico"): document open: No such file or directory

[01/Jan/1970:07:03:10 +0000] request from 172.20.182.82 "GET /favicon.ico HTTP/1

.1" ("/var/www/favicon.ico"): document open: No such file or directory

静态网页测试:将静态网页存入根文件系统的/var/www目录下

打开IE浏览器,输入网址: http//172.20.182.91/pengtiegang.html

重新输入网址: http//172.20.182.92/index.html

CGI功能测试:将交叉编译好的cgictest.cgi测试程序存入根文件系统的/var/www/cgi-bin/

再次输入:http//172.20.182.92/cgi-bin/cgictest.cgi

结果如下所示:

 

PC机上可以看到/var/www目录下的网页 和运行/var/www/cgi-bin/目录下的CGI程序顺畅。

中途出现的问题:出现内存错误的有下列几种

1.      文件系统中的库不全,有人用开发板自带的库就可以,后来调整自己文件系统的库

2.      函数指针错误,修改源码过程造成

3.      交叉编译器问题,就如这个。

 

重新编译:

[root@localhost src]# make clean

[root@localhost src]# make

bison -y -d boa_grammar.y

/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.   -c -o y.tab.o y.tab.c

y.tab.c: In function `yyparse':

y.tab.c:1295: warning: implicit declaration of function `yylex'

flex boa_lexer.l

/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.   -c -o lex.yy.o lex.yy.c

 

..............................

 

lex.yy.c:1246: warning: 'yyunput' defined but not used

/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.   -c -o alias.o alias.c

/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.   -c -o boa.o boa.c

/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.   -c -o buffer.o buffer.c

/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.   -c -o cgi.o cgi.c

/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.   -c -o cgi_header.o cgi_header.c

/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.   -c -o config.o config.c

................

/usr/local/arm/3.4.1/bin/arm-linux-gcc -g -O2 -pipe -Wall -I.   -c -o index_dir.o index_dir.c

/usr/local/arm/3.4.1/bin/arm-linux-gcc -o boa_indexer index_dir.o escape.o -g -static

 

将重新编译的可执行文件拷到共享目录/home/boa执行

# ./boa                                                      

eth0: Transmit buffer not free!                                               

eth0: Transmit buffer not free!                                               

eth0: Transmit buffer not free!                                               

eth0: Transmit buffer not free!                                               

[01/Jan/1970:00:38:05 +0000] boa: server version Boa/0.94.13                  

[01/Jan/1970:00:38:05 +0000] boa: server built May 11 2009 at 18:21:02.       

[01/Jan/1970:00:38:05 +0000] boa: starting server pid=343, port 80            

[root@(none) boa]# [01/Jan/1970:00:39:43 +0000] request from 10.10.205.154 "GETy

[01/Jan/1970:00:39:43 +0000] request from 10.10.205.154 "GET /stylesheet-imagesy

Boa服务器目录:

 

小结:

Boa服务器在此系统中负责的是接收来自网页的HTTP请求,根据请求调用相关的串口发送应用程序。同时接收servfox传来的现场截图,通过无线网络一帧一帧再传送回浏览器端。在浏览器端形成连续的视频画面。Boa的移植主要工作是对源码的修改交叉编译再调试。配置相关的脚本,使其在Linux系统中正常工作。

 

阅读(5186) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~