一 编译生成二进制文件boa
1 Boa介绍:
是一种非常小巧的Web服务器,其 可执行代码
只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理 并发连接
请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。
2 下载源码:
http://www.boa.org/news.html
我下载的版本是0.94.14rc21版本:boa-0.94rc21.tar.bz2,解压到~/opt:
$tar xjvf boa-0.94rc21.tar.bz2 -C ~/opt
3 配置Makefile:
参考网上别人给的方法,
需要进入解压后目录下的src目录下进行配置:
$./configure
但是,在这个版本里该目录下没有configure文件,所以没有能够进行配置。而在根目录(解压后目录)下有需要的configure文件,
所以直接在根目录(boa-0.94rc21)下进行配置:
$./configure
得到结果:
[xu@XU boa-0.94.14rc21]$ ls
aclocal.m4 config.status contrib examples
Makefile
CHANGES config.sub COPYING extra_macros.m4 Makefile.in
config.guess configure CREDITS extras README
config.log configure.in docs install-sh src
已经有Makefile文件了,而且,在boa-0.94.14rc21/src/目录下也产生了Makefile文件:
[xu@XU src]$ ls
access.c cgi.c defines.h index_dir.c pipe.c response.c
access.h cgi_header.c escape.c ip.c poll.c select.c
alias.c compat.h escape.h log.c queue.c signals.c
boa.c config.c get.c
Makefile range.c sublog.c
boa.h config.h globals.h Makefile.in read.c timestamp.c
buffer.c config.h.in hash.c mmap_cache.c request.c util.c
4 得到目标文件boa
如果要在ARM平台构建,需要进入src目录下,修改Makefile:修改编译器的选择,使适合ARM:
CC = gcc
CPP = gcc -E
改为:
CC = arm-linux-gcc
CPP = arm-linux-g++ -E
(注:这里在Fedora上就不用修改。)
修改完后在src目录下直接:
make
生成了boa文件:
[xu@XU src]$ ll boa
-rwxrwxr-x 1 xu xu 233461 Mar 15 21:03 boa
为boa文件瘦身:
[xu@XU src]$ arm-linux-strip boa
[xu@XU src]$ ll boa
-rwxrwxr-x 1 xu xu 72896 Mar 15 21:06 boa
果然,文件变成原来的3分之一了,这里,介绍一下这个:arm-linux-strip的作用:
arm-linux-strip:
UNIX下文件压缩命令compress大家都比较熟悉了,它的压缩率比较高, 和tar命令结合使用来做数据备份是最合适不过了。但compress压缩也有缺点,就是被压缩后的文件需要用命令uncompress解压后才能正常使用。而用strip命令就没有这个问题,它能清除执行文件中不必要的标示符及调试信息,可减小文件大小而不影响正常使用。但与compress 不同的是,文件一旦strip后就不能恢复原样了,所以strip是一个减肥工具而不是压缩工具。而且,被strip后的文件不包含调试信息,就不能用dbx来调试程序了。
可见,这个arm-linux-strip也是对文件清除不必要的标示符、调试信息等,减小文件大小。
至此,我们得到了想要的
boa文件。
二 移植cgic
1 下载源码
参考上文,下载源码:
http://www.boutell.com/cgic/cgic205.tar.gz
然后解压:
$tar xzvf cgic205.tar.gz -C ~/opt
解压了部分,然后出现错误:
gzip: stdin: unexpected end of file
cgic205/cgic.c
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
上网查找原因,别人提示是因为文件不完整,可能是下载或者传输过程出了问题,从新下载就OK了。果然,重新下载源码,继续解压,没有问题。
2 修改Makefile
修改交叉编译项,应用在ARM平台。对解压目录下
Makefile进行修改:
CC=gcc
AR=ar
改为:
CC = arm-linux-gcc
AR = arm-linux-ar
以及:
23 cgictest.cgi: cgictest.o libcgic.a
24
$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS} #修改后
26 capture: capture.o libcgic.a
27
$(CC) $(CFLAGS) capture.o -o capture ${LIBS} #修改后
(注:在Fedora上这里不用修改。)
3 得到可执行文件
然后Make,
得到可执行文件
capture,和次使用的
cgictest.cgi
[xu@XU cgic205]$ ls
capture cgic.c cgic.o cgictest.o Makefile
capture.c cgic.h cgictest.c libcgic.a readme.txt
capture.o cgic.html
cgictest.cgi license.txt support.txt
可以继续优化:
$arm-linux-strip capture
三 配置WEB服务器
1 配置boa
修改boa.conf文件,但是在主目录下没有找到这个文件,在src/目录下也没有,看来这个版本不一样,还是有很多区别的啊,不能按照别人的步骤来实现,只能作为参考,细节还要自己搞定。
这个配置文件可以自己写,但是有模板来修改就更快了。在文件目录下有个文件:
example,里面应该是例子,进去就发现有要找的文件:
boa.conf,可以复制后在里面修改。
[xu@XU examples]$ cp boa.conf ../
在主目录下就有了这个文件:
[xu@XU boa-0.94.14rc21]$ ls
aclocal.m4 config.log configure.in docs install-sh src
boa.conf config.status contrib examples Makefile
CHANGES config.sub COPYING extra_macros.m4 Makefile.in
config.guess configure CREDITS extras README
对boa.conf进行修改,
我的修改内容为:
Port 80
Listen 192.168.1.111
User 0
Group 0
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
ServerName www.your.org.here
DocumentRoot /var/www
UserDir public_html
DirectoryIndex index.html
DirectoryMaker /usr/lib/boa/boa_indexer
KeepAliveMax 1000
KeepAliveTimeout 10
MimeTypes /etc/mime.types
DefaultType text/plain
CGIPath /bin:/usr/bin:/usr/local/bin
Alias /doc /usr/doc
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
2 测试
在root下建立目录:
#mkdir /etc/boa
复制文件boa.conf到上述目录下,
修改boa.conf:
建立文件目录:依据上面的修改: http://blog.csdn.net/bull_liu/article/details/7486298
#mkdir /var/boa
#mkdir /var/www
#mkdir /var/www/cgi-bin
#mkdir -p /var/lob/boa
把之前编译cgi205得到的文件:
capture和cgictest.cgi拷贝到/var/www/cgi-lin/下面,
运行boa:
./boa
在浏览器输入:
http://192.168.1.111/cgi-bin/cgictest.cgi
能够进入例子。
设计hello代码:
#
include
<
stdio
.
h
>
#
include
<
stdlib
.
h
>
int
main
(
void
)
{
printf
(
"Content-type: text/html\n\n"
)
; //注意\n\n
printf
(
"<html>/n"
)
;
printf
(
"<head><title>CGI Output</title></head>/n"
)
;
printf
(
"<body>/n"
)
;
printf
(
"<h1>Hello,world.</h1>/n"
)
;
printf
(
"<body>/n"
)
;
printf
(
"</html>/n"
)
;
exit
(
0
)
;
}
编译:
gcc -o hello.cgi hello.c
将得到的hello.cgi拷贝到/var/www/cgi-lin/
通过浏览器访问:
http://192.168.1.111/cgi-bin/hello.cgi
没有问题。
第二部分
1.启动boa
2../mjpg_streamer -i "input_uvc.so -yuv -d /dev/video0 -y -r 640x480" -o "output_http.so -w ./www"
3.cp /mjpg_streamer/www/* /var/www
4.在stream.html中添加<img src="http://192.168.1.102:8080/?action=stream" width="512px" height="384px" />就可以了
4.在客户端打开网页192.168.1.×××
验证完成
问题:可能会出现mime.types缺失问题,拷贝电脑etc下的mime.types到板子上etc文件下