您的位置:首页 > 其它

嵌入式 BOA 服务器移植(本人亲测)和遇到的部分问题总结

2013-01-10 21:23 435 查看
注释:---下文内容主要载自《嵌入式web服务器及远程测控应用详解v0.1》,其中也包含了个人的一些注解和总结,如有问题请共同商讨,谢谢。

《嵌入式web服务器及远程测控应用详解v0.1》的下载地址:http://download.csdn.net/detail/kaloha3/4982894

1.1 嵌入式 BOA 服务器移植

移植过程参考《嵌入式 Linux 系统开发详解— — 基于 EP93XX 系列 ARM》及网络上一

篇文章《WEB 服务器-----Boa 实验笔记》,下面是自己在 S3C2410 平台上移植 Boa 的过程。

第一步完成 Boa 程序的移植

www.boa.org 上下载 Boa 源码,当前的版本是 0.94.13,将其解压并进入源码目录的

src 子目录。

# tar xzf boa-0.94.13.tar.gz

# cd boa-0.94.13/src

生成 Makefile 文件

# ./configure

修改 Makefile 文件(注:这里修改根据自己的交叉编译器自行修改,例如我的是arm-none-linux-gnueabi-gcc,有的是arm-linux-gcc等等),修改 CC = gcc

为 CC =armv4l-unknown-linux-gcc

修改 CPP = gcc - E

为 CPP = armv4l-unknown-linux-gcc –E

修改 头文件 defines.h

找到#define SERVER_ROOT “/etc/boa” 修改成

#define SERVER_ROOT “/var/www”

这里定义的是 web 服务器的文件根目录(用户可以自行定义,是板上的目录,只要跟 boa.conf 中设置一致

就可以了)

然后运行 make 进行编译,得到的可执行程序 boa,将调试信息剥去,得到的最后程序只有

62872Byte 大小。

# make

# armv4l-unknown-linux-strip boa

第二步完成 Boa 的配置,使其能够支持 CGI 程序的执行。在 boa 源码目录下有一个 boa.conf

可以对其作如下修改:

# Boa v0.94 configuration file

# File format has not changed from 0.93

# File format has changed little from 0.92

# version changes are noted in the comments

#

# The Boa configuration file is parsed with a lex/yacc or flex/bison

# generated parser. If it reports an error, the line number will be

# rules is very simple, and they can occur in any order. Where possible

# these directives mimic those of NCSA httpd 1.3; I saw no reason to

# introduce gratuitous differences.

# $Id: boa.conf,v 1.25 2002/03/22 04:33:09 jnelson Exp $

# The "ServerRoot" is not in this configuration file. It can be compiled

# into the server (see defines.h) or specified on the command line with

# the -c option, for example:

#

# boa -c /usr/local/boa

# Port: The port Boa runs on. The default port for http servers is 80.

# If it is less than 1024, the server must be started as root.

Port 80

# Listen: the Internet address to bind(2) to. If you leave it out,

# it takes the behavior before 0.93.17.2, which is to bind to all

# addresses (INADDR_ANY). You only get one "Listen" directive,

# if you want service on multiple IP addresses, you have three choices:

# 1. Run boa without a "Listen" directive

# a. All addresses are treated the same; makes sense if the addresses

# are localhost, ppp, and eth0.

# b. Use the VirtualHost directive below to point requests to different

# files. Should be good for a very large number of addresses (web

# hosting clients).

# 2. Run one copy of boa per IP address, each has its own configuration

# with a "Listen" directive. No big deal up to a few tens of addresses.

# Nice separation between clients.

# The name you provide gets run through inet_aton(3), so you have to use dotted

# quad notation. This configuration is too important to trust some DNS.

#Listen 192.68.0.5

# User: The name or UID the server should run as.

# Group: The group name or GID the server should run as.

User nobody

Group 0

# ServerAdmin: The email address where server problems should be sent.

# for CGIs.

#ServerAdmin root@localhost

# ErrorLog: The location of the error log file. If this does not start

# with /, it is considered relative to the server root.

# Set to /dev/null if you don't want errors logged.

# If unset, defaults to /dev/stderr

#ErrorLog /var/log/boa/error_log

# Please NOTE: Sending the logs to a pipe ('|'), as shown below,

# is somewhat experimental and might fail under heavy load.

# "Usual libc implementations of printf will stall the whole

# process if the receiving end of a pipe stops reading."

#ErrorLog "|/usr/sbin/cronolog --symlink=/var/log/boa/error_log

/var/log/boa/error-%Y%m%d.log"

# AccessLog: The location of the access log file. If this does not

# start with /, it is considered relative to the server root.

# Comment out or set to /dev/null (less effective) to disable

# Access logging.

#AccessLog /var/log/boa/access_log

# Please NOTE: Sending the logs to a pipe ('|'), as shown below,

# is somewhat experimental and might fail under heavy load.

# "Usual libc implementations of printf will stall the whole

# process if the receiving end of a pipe stops reading."

#AccessLog"|/usr/sbin/cronolog-symlink=/var/log/boa/access_log/var/log/boa/access-%Y%m%d.l

og"

# UseLocaltime: Logical switch. Uncomment to use localtime

# instead of UTC time

#UseLocaltime

# VerboseCGILogs: this is just a logical switch.

# It simply notes the start and stop times of cgis in the error log

# Comment out to disable.

#VerboseCGILogs

# ServerName: the name of this server that should be sent back to

# clients if different than that returned by gethostname + gethostbyname

ServerName www.your.org.here

# VirtualHost: a logical switch.

# Comment out to disable.

# Given DocumentRoot /var/www, requests on interface 'A' or IP 'IP-A'

# become /var/www/IP-A.

# Example: http://localhost/ becomes /var/www/127.0.0.1

#

# Not used until version 0.93.17.2. This "feature" also breaks commonlog

# output rules, it prepends the interface number to each access_log line.

# You are expected to fix that problem with a postprocessing script.

#VirtualHost

# DocumentRoot: The root directory of the HTML documents.

# Comment out to disable server non user files.

DocumentRoo t /var/www

# UserDir: The name of the directory which is appended onto a user's home

# directory if a ~user request is recieved.

UserDir public_html

# DirectoryIndex: Name of the file to use as a pre-written HTML

# directory index. Please MAKE AND USE THESE FILES. On the

# fly creation of directory indexes can be _slow_.

# Comment out to always use DirectoryMaker

DirectoryIndex index.html

# DirectoryMaker: Name of program used to create a directory listing.

# Comment out to disable directory listings. If both this and

# DirectoryIndex are commented out, accessing a directory will give

# an error (though accessing files in the directory are still ok).

#DirectoryMaker /usr/lib/boa/boa_indexer

# DirectoryCache: If DirectoryIndex doesn't exist, and DirectoryMaker

# has been commented out, the the on-the-fly indexing of Boa can be used

# to generate indexes of directories. Be warned that the output is

# extremely minimal and can cause delays when slow disks are used.

# Note: The DirectoryCache must be writable by the same user/group that

# Boa runs as.

# KeepAliveMax: Number of KeepAlive requests to allow per connection

# Comment out, or set to 0 to disable keepalive processing

KeepAliveMax 1000

# KeepAliveTimeout: seconds to wait before keepalive connection times out

KeepAliveTimeout 10

# MimeTypes: This is the file that is used to generate mime type pairs

# and Content-Type fields for boa.

# Set to /dev/null if you do not want to load a mime types file.

# Do *not* comment out (better use AddType!)

MimeTypes /var/www/mime.types

# DefaultType: MIME type used if the file extension is unknown, or there

# is no file extension.

DefaultType text/html

# CGIPath: The value of the $PATH environment variable given to CGI progs.

CGIPath /bin:/usr/bin:/usr/local/bin

# SinglePostLimit: The maximum allowable number of bytes in

# a single POST. Default is normally 1MB.

# AddType: adds types without editing mime.types

# Example: AddType type extension [extension ...]

# Uncomment the next line if you want .cgi files to execute from anywhere

#AddType application/x-httpd-cgi cgi

# Redirect, Alias, and ScriptAlias all have the same semantics -- they

# match the beginning of a request and take appropriate action. Use

# Redirect for other servers, Alias for the same server, and ScriptAlias

# to enable directories for script execution.

# Redirect allows you to tell clients about documents which used to exist in

# your server's namespace, but do not anymore. This allows you to tell the

# clients where to look for the relocated document.

# Aliases: Aliases one path to another.

# Example: Alias /path1/bar /path2/foo

#Alias /doc /usr/doc

# ScriptAlias: Maps a virtual path to a directory for serving scripts

# Example: ScriptAlias /htbin/ /www/htbin/

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

ScriptAlias /index.html /var/www/index.html

注:最后两行解释一下,倒数第二行指示 CGI 脚本的存放位置,倒数第一行指示网页存放

的位置。红色部分为要修改的区域;当然上例中的设置比如目录和服务器名等可以根据自己需要修改。

第三步 NFS 方式测试

首先在 S3c2410 平台启动好的文件系统中/var 目录下使用 mkdir www 命令创建一个

www 目录。在主机上建立一个目录,mkdir /new_boa 同时在 new_boa 下建立一个 cgi-bin

脚本目录,然后拷贝刚刚编译好的可执行文件 boa 以及 boa.conf 到 new_boa 目录下,再从主

机 redhat9.0 下/etc 目录下找到 mime.types 拷贝到/new_boa 目录下。

这样一个测试环境就搭建好了,我们在 minicom 中使用挂载主机 new_boa 到/var/www 下,

mount 211.87.99.169:/new_boa /var/www

注:主机地址为 211.87.99.169(可自行修改成自己的 IP,只要主机 IP 和 S3c2410 平台

IP 处在同一个网段就可以)。

下面进行静态网页测试与脚本测试两个部分:

静态网页测试:

在主机端 new_boa 目录下 vi index.html 创建一个简单网页如下:

<html>

<head><title> BOA TEST </title>

</head>

<body>

<h1> BOA TEST</h1>

</body>

</html>

进入平台 S3c2410 平台的 var/www 目录下,运行 ./boa

[01/Feb/2030:15:58:00 +0000] boa: server version Boa/0.94.13

[01/Feb/2030:15:58:00 +0000] boa: server built Dec 21 2007 at 02:03:37.

[01/Feb/2030:15:58:00 +0000] boa: starting server pid=37, port 80

看到上面信息表示服务器运行正常。

启动浏览器,输入 211.87.99.168 (S3c2410 平台服务器 IP)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: