注释:---下文内容主要载自《嵌入式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)