首页 理论教育ARM嵌入式系统:Web服务器设计成功!

ARM嵌入式系统:Web服务器设计成功!

【摘要】:Linux具有良好的网络支持,在上面建立Web服务器和设计动态Web网页是比较容易的事情。在开发板提供的examples目录中,包含已经移植过的boa和CGI程序。同样,提供的文件系统中,也添加了boa和CGI。group_id=78得到boa-0.94.36.2.tar.gz,解压到工作目录中$tar zxvf boa-0.94.36.2.tar.gz-C/opt/cvtech/配罝配罝boa:$cd/opt/cvtech/boa-0.94.36.2/src$./configure会在boa-0.94.36.2/src目录下生成Makefile文件,修改Makefile:$viMakefile在31,32行,指定交叉编译器,修改如下CC=/opt/cvtech/4.3.3/bin/arm-linux-gccCPP=/opt/cvtech/4.3.3/bin/arm-Iinux-g++-E修改src/boa.c文件:$vi src/boa.c注释掉225到行227的内容//if(setuid(O)!如果没有以/XXX开始,则表示从服务器的根路径开始。

Linux具有良好的网络支持,在上面建立Web服务器和设计动态Web网页是比较容易的事情。在开发板提供的examples目录中,包含已经移植过的boa和CGI程序。同样,提供的文件系统中,也添加了boa和CGI。

1.移植boa

(1)下载boa源码包

下载地址:https://sourceforge.net/project/showfiles.php?group_id=78

得到boa-0.94.36.2.tar.gz,解压到工作目录中

$tar zxvf boa-0.94.36.2.tar.gz-C/opt/cvtech/

(2)配罝

配罝boa:

$cd/opt/cvtech/boa-0.94.36.2/src

$./configure

会在boa-0.94.36.2/src目录下生成Makefile文件,修改Makefile:

$viMakefile

在31,32行,指定交叉编译器,修改如下

CC=/opt/cvtech/4.3.3/bin/arm-linux-gcc

CPP=/opt/cvtech/4.3.3/bin/arm-Iinux-g++-E

修改src/boa.c文件:

$vi src/boa.c

注释掉225到行227的内容

//if(setuid(O)!=-1){

//DIE(Hicky Linux kernel bug!");

//}

修改src/compat.h文件:

$vi src/compat.h

修改120行内容如下:

#define TIMEZONE_OFFSET(foo)foo->tm_gmtoff

(3)编译并且优化

$cd src

$make

$/usr/local/arm/4.3.3/bin/arm-linux-strip boa

这里移植boa结束。

2.移植cgic库

(1)下载cgic库,地址为:http://www.boutell.com/cgic/cgic205.tar.gz

下载后,解压到工作目录:

$tar zxvf cgic205.tar.gz-C/opt/cvtech/

(2)配罝编译条件

$cd/opt/cvtech/cgic205

$viMakefile

(3)修改Makefile内容如下

CFLAGS=-g-Wall

CC=/opt/cvtech/4.3.3/bin/arm-linux-gcc

AR=/opt/cvtech/4.3.3/bin/arm-1inux-ar

RANLIB=/opt/cvtech/4.3.3/bin/arm-linux-ranlib

LIBS=-L./-lcgic

all:libcgic.a cgictest.cgi capture

install:libcgic.a

cp libcgic.a/usr/local/lib

cp cgic.h/usr/local/include

@echo libcgic.a is in/usr/local/lib.cgic.h is in/usr/local/include.

libcgic.a:cgic.o cgic.h

rm-f libcgic.a

$(AR)rc libcgic.a cgic.o

$(RANLIB)libcgic.a

#mingw32 and cygwin users:replace.cgiwith.exe

cgictest.cgi:cgictest.o libcgic.a

$(CC)$(CFLAGS)cgictest.o-o cgictest.cgi${LIBS}

capture:capture.o libcgic.a

$(CC)$(CFLAGS)capture.o-o capture${LIBS}

clean:

rm-f∗.o∗.a cgictest.cgi capture

(4)编译并优化

编译,生成capture的可执行文件和测试用的cgictest.cgi文件

$make(www.chuimin.cn)

$/opt/cvtech/4.3.3/bin/arm-linux-strip capture

3.配置WEB服务器

(1)在文件系统中配罝boa

$cd/opt/cvtech/A8fs/root_qtopia_2.2.0_2.6.30.4

如果ramdisk.gz没有解压,请先解压,解压后才会出现rd目录

$mkdir web etc/boa

拷贝刚移植生成的boa到文件系统的sbin/目录下:

$cp/opt/cvtech/boa-0.94.36.2/src/boa sbin

拷贝boa的配罝文件boa.conf到etc/boa目录下:

$cp/opt/cvtech/boa-0.94.36.2/boa.conf etc/boa

修改boa.conf,配置如下:

Port80

//监听的端口号,缺省都是80,一般无需修改

Listen 192.168.1.6

//bind调用的IP地址

User root

Group root

//作为哪个用户运行,即它拥有该用户组的权限,一般都是root,需要在/etc/group文件中有root组

ErrorLog/dev/console

//错误日志文件。如果没有以/XXX开始,则表示从服务器的根路径开始。如果不需要错误日志,则用/dev/null。系统启动后看到的boa的打印信息就是由/dev/console得到

ServerName yellow

//服务器名称

DocumentRoot/web

//非常重要,这个是存放html文档的主目录

Directorylndex index.htm l

//html目录索引的文件名

KeepAliveMax 1000

//一个连接所允许的http持续作用请求最大数目

Keep AliveTimeout10

//http持续作用中服务器在两次请求之间等待的时间数,以秒为单位,超时将关闭连接

MimeTypes/etc/mime.types

//指明mime.types文件位罝

DefaultType text/plain

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

//提供CGI程序的PATH环境变量值

ScriptAlias/cgi-bin//web/cgi-bin/

//非常重要,指明CGI脚本的虚拟路径对应的实际路径

(2)配罝CGIC库

$cd/opt/cvtech/A8fs/root_qtopia_2.2.0_2.6.30.4/web

$mkdir cgi-bin

拷贝刚移植的cgic库和cgic测试文件到文件系统的web/cgi-bin目录下:

$cp/opt/cvtech/cgic205/capture cgi-bin/

#cp/opt/cvtech/cgic205/cgictest.cgi cgi-bin/

保存,并生成新的文件系统e.yaffs

重现烧写到开发板中,开机启动。

4.设计实例测试

(1)静态测试

Linux启动后,启动boa

[root@Cvtech/]#boa

然后在PC端,打开网页浏览器,输入测试网址

http://192.168.1.6

就会出现如下网页

图11.3 静态测试界面

(2)cgi脚本测试

打开浏览器,输入:

http://192.168.1.6/cgi-bin/cgictest.cgi

即可打开测试界面。

图11.4 cgi脚本测试界面