手机端
or

欢迎您加入我爱方案网QQ群

1.智能产品外包服务群(311606115)
2.嵌入式项目开发群(491609563)

基于嵌入式Linux系统的家庭网关Web服务器设计

王雅志; 王绍源| 数据采集处理,ARM9,蓝牙,无线通信| 2010-11-29
1673 收藏
分享到: 
每日精选
热门推荐

【中心议题】

  • 介绍了嵌入式Linux系统下家庭网关Web服务器的设计开发
  • 给出了相关测试结果

【解决方案】

  • BOA的移植
  • CGI程序的设计
  • Sqlite数据库的移植

0 引言

随着网络技术和通信技术的不断发展及人们对生活质量要求的不断提高,智能建筑、数字家庭、数字小区、数字城市等概念应运而生。数字家庭是将公共网络和信息服务以家庭网关为连接点延伸到家庭,并通过家庭网络连接各种信息终端,为家庭提供集成的通信、娱乐、家电控制、安全防范、家居管理和信息服务等功能。

未来家庭中,各种家电设备将组成一个家庭局域网,并通过家庭网关接入互联网。由此看来,数字家庭网络的市场发展潜力极其可观。

1 家庭网关

1. 1 家庭网关简介

数字家庭网络的构架包括家庭内部网络系统、数字家庭网关及家庭内部网络与外部Internet网络之间的数据通信。其中,数字家庭网关是数字家庭网络的一个重要组成部分,起到治理、控制和与外部网络通信的核心作用。它是连接家庭智能内部和外部网络的物理接口,实现家庭内部同外部通信网络之间的数据交换功能,同时还负责家庭设备的治理和控制。总的来说,网关技术的发展包括3个阶段。

(1)桥接设备。桥接设备常见的有Modem设备,它只是简单的桥接设备,功能单一,只在二层上将家庭内设备与接入网连接起来。

(2)家庭网关。家庭网关是家庭网络的中心设备,是家庭网络的通信、管理、控制中心,具有丰富的家庭网络联网接口、完备的家庭网络通信功能,负责整个家庭网络的连接与管理。

(3)业务网关。业务网关是通信设备和业务载体,运营商的各种新业务在网关上得以展现,同时也承载家庭网络内部的各种业务,它将是一个通用、开放的家庭网络业务平台。

1. 2 家庭网关的软件结构总体设计

家庭网关的主要功能是进行协议转换,Internet和家庭控制网络之间建立一个沟通的桥梁。本文介绍的嵌入式家庭网关功能结构框图如图1所示。

 

其工作流程如下:

(1)用户通过Web浏览器以表单形式提交对网络家用电器的访问请求。

(2) Web服务器接收该请求,将它转发给CGI(Common Gateway Interface,通用网关接口)控制模块。

(3) CGI对数据进行解析和提取,再将相应消息转发给家庭内部控制网络通信模块。

(4)家庭内部控制网络通信模块接收到消息,生成相应的控制信号发给家用电器。

(5)家用电器完成动作后,最终将结果通过CGI模块显示在用户的Web浏览器上。

2 嵌入式W eb Server BOA的配置与移植

ARM-Linux,主要有3个嵌入式WebServer:HTTPDTHTTPDBOA。它们与Apache等高性能Web服务器的主要区别在于它们一般是单进程服务器,只有在完成一个用户请求后才能响应另一个用户的请求,无法并行响应,但对其在数字家庭中的应用已经足够了。HTTPD是最简单的一个Web Server,它的功能最弱,不支持认证、CGI、动态页面,因此它不适合高级应用。

THTTPDBOA都支持身份认证、CGI,功能比较齐全,THTTPD在运行过程中所需要的资源要远大于BOABOA是一个单任务的小型http服务器,源代码开放,性能优越,特别适合应用在嵌入式系统中。因此,本文选择BOA作为服务器。

ARM-Linux下实现BOA,其过程如下:

 

(1)下载BOA-0. 94. 13. tar. gz源码,下载地址: http: //www. boa. org/。将下载的文件放入用户目录(/ccp),解压#tar xzf boa-0. 94. 13. tar.gz

(2)生成Makefile文件。boa-0. 94. 13. tar.gz经解压后生成boa-0. 94. 13目录,运行该目录下的src/configure文件,执行命令#. /configure

(3)修改Makefile文件: #viMakefile

①修改CC = gccCC = arm-linux-gcc

②修改CPP = gcc-ECPP = arm-linux-gcc-E

(4)进入boa-0. 94. 13/src目录,运行make,进行编译。执行命令#make,得到的可执行程序为boa,再执行命令#arm-linux-strip boa将调试信息剥去。

(5)把编译后的boa放入根文件系统的/bin目录下。

(6) BOA配置。在BOA源码boa-0. 94. 13目录下已有一个示例boa. con,f可以在其基础上进行修改。修改如下:

Group:修改Group nogroupGroup 0

ScriptAlias:修改ScriptAlias/cgi-bin//usr/lib/cgi-bin/ScriptAlias /cgi-bin//var/www/cgi-bin/

ServerName:修改#ServerName www. your.org. hereServerNamewww. your. org. here

④如果文件系统是只读的(cramfs),需要在boa. conf里注释掉#AccessLog /var/log/boa/access_log

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

(7)重新编译文件系统,然后下载到ARM板。

完成上述操作后,ARM板上运行BOA程序,正常情况下就可以在PC上通过IE浏览器访问开发板上的Web Server

Web服务器BOA实现动态网页的工作执行流程如图2所示。

 

3 CG I控制模块程序设计

CGI是外部扩展应用程序与Web服务器交互的一个标准接口,它本身是一个服务器端的程序。当用户的浏览器向服务器发出请求时,通常是请求一个网页文件,但对于CGI来说,请求由CGI程序来执行,它动态地生成网页代码。这样,用户在浏览器上所看到的网页实际上是CGI程序动态生成的。CGI程序一般完成Web网页中表单(Form)数据的处理、查询等,可以用任何程序设计语言(FortranPascalC)来编写,也可以用服务器上系统所支持的脚本语言(ShellPerl)来编写。但对于BOA这个WebServer而言,不支持任何的脚本,只支持C代码的CGI程序。采用C语言编写的CGI程序执行速度快,安全性和效率都很高。

3. 1 WWWCGI的工作原理

CGI数据利用标准输入/输出STDIN/STD-OUT的方式来传播。当用户提交一个HTMLForm,Web浏览器首先对Form中的数据以名字/值对的形式进行编码,并发给Web服务器,然后由Web服务器传递给CGI程序。其格式为“NAME1=VALUE1&NAME2=VALUE2。若参数值中间有空白,则以“+”代替,特殊字符以“%xx”代替,其中xx为特殊字符的十六进制ASCII码。这些特殊字符包括了“&”、“=”、中文以及ASCII码值>128的字符。信息经这样包装后,如果METHOD设定为POST,则程序先从CON-TENT_LENGTH环境量得到数据的字长,然后从标准输入中读取相应长度的字符串,即可得到提交的数据。如果METHOD设定为GET,资料会被送入QUERY_STRING的环境变量中,通过调用函数getenv(QUERY_STRING)读取即可。

表单信息获取流程如图3所示。

 

CGI获取表单信息,信息结果将保存在字符串input,但未处理特殊字符。

3. 2 CGI程序向浏览器返回信息

CGI程序通过标准输出(STDOUT)将输出信息传送给Web服务器。传送给Web服务器的信息可以有各种格式,通常是纯文本或者HTML的形式,这样就可以从页面上直观得到所需要的结果。

CGI程序产生的输出由两部分组成:头信息和实际的信息。两部分之间以一个空行分开。

主要的头信息类型有3: Content-typeLocationStatus

如果CGI程序要返回HTML,则语句printf(Contenttype: text/html\n\n)通知服务器后面输出的是HTML代码;如果要返回纯文本,则语句printf(Contenttype: text/html\n\n)通知服务器,随后输出的是纯ASCII文本形式的信息。所以,Content-type用以向服务器表明返回数据的类型,希望另一端的客户能据此作处理。

如果CGI程序出了问题, Status标题就用于了解一些信息。各种状态代码代表不同含义。

如果CGI程序不想生成一个新HTML返回给用户而指向别的地点,则可使用Location标题,它将引导浏览器到一个新的地点,只要说明位置即可。如果想在原来的页面某处显示结果,则亦可使用Location,只要在输入的链接地址URL后添加需要的数据即可,数据和地址之间用问号(? )来隔离。如果有多个数据,可用“NAME1=VAL-UE1&NAME2=VALUE2的形式。当然,在制作的网页中还要有脚本程序(javascript)来解析这些数据,以便将它们放到页面合适的地方。

4 嵌入式数据库的选择及移植

由于数字家庭管理系统中需管理的家电设备信息较多(如设备注册信息、设备状态信息等),故需采用嵌入式数据库对各种数据进行管理。可用于嵌入式的数据库有MetakitSQliteEmpressEmbedded Database等。

SQlite是一种开放源代码的数据库,且有功能齐全的C语言API函数,能较好地支持SQL-92

标准,同时也支持BOA,故本文设计选择SQlite-3. 3. 8

假设将sqlite-3. 3. 8. tar. gz下载到/ccp目录下,解压缩sqlite-3. 3. 8. tar. gz:

#tar zxvf sqlite-3. 3. 8. tar. gz解压后会在/ccp目录下生成sqlite-3. 3. 8/子目录。该目录包含了编译所需所有源文件和配置脚本,而所有源代码文件都位于sqlite-3. 3. 8/src/目录下。在sqlite-3. 3. 8/目录下有一个Makefile范例文件Makefile. linux-gcc。首先通过下面的命令拷贝此文件,并重命名为Makefile:

#cpMakefile. linux-gccMakefile

接下来,vi打开Makefile文件,并手动修改Makefile文件的内容。改动如下:

 

TOP =.. /sqlite修改为TOP =.

TCC = gcc-O6修改为TCC = arm-linux-gcc-O6

AR = ar cr修改为AR = arm-linux-ar cr

RANLIB = ranlib修改为RANLIB = arm-linux-ranlib

MKSHLIB = gcc-shared修改为MKSHLIB= arm-linux-gcc-shared

注释掉以下两行:

TCL_FLAGS =-I/home/drh/tcltk/8. 4linux;

LIBTCL =/home/drh/tcltk/8. 4linux/libtcl8.4g. a-lm-ldl

Makefile的修改主要包括两个方面。首先是将编译器、归档工具等换成交叉工具链中的对应工具,gcc换成arm-linux-gcc, ar换成ar-linux-ar, ranlib换成arm-linux-ranlib;其次是去掉与TCL相关的编译选项。默认情况下,会将编译SQlite3TCL语言绑定,但是在移植至ARM-Linux时并不需要,因此将两个与TCL有关的行注释掉。

接下来修改文件main.mk,因为Makefile包含这个文件。

找到该文件中的下面一行:

selec.t o table. o tclsqlite. o tokenize. o trigger.o\

把它替换成:

selec.t o table. o tokenize. o trigger. o\

这样编译时将不会编译SQlite3TCL语言绑定。此时,修改工作已完成,接下来就可以开始编译SQlite3,通过make命令即可完成。编译完成后,将在sqlite3. 3. 8/目录下生成库函数文件libsqlite3. a和头文件sqlite3. h,这就是所需要的两个文件。

编译完成后,就可以编写自己的应用程序,然后编译,最后下载到ARM板上。编译时要指定头文件、库函数文件、要链接的静态库文件目录。举例如下:

# arm-linux-gcc-I /ccp/sqlite-3. 3. 8/-L /

ccp/sqlite-3. 3. 8-o test tes.t c-lsqlite3

 

其中,-I /ccp/sqlite-3. 3. 8指出了头文件sqlite3. h所在的目录,-L /ccp/sqlite3. 3. 8指定了库函数文件libsqlite3. a所在的目录,-o test指定编译生成的文件名为tes,t tes.t c是源程序文件,-lsqlite3指明要链接静态库文件libsqlite3. a

家庭网络数据中存储了用户信息、设备注册信息、状态信息等。数据库及表结构设计的好坏关系到能否高效管理数据。以设备注册信息为例,设计的表格式(dev_regedi.t db)ID号设备类型设备ID号通信方式终端地址,1 light12DALI04

5 页面制作及测试结果

采用MacromediaDreamweaverMX 2004软件制作网页。在网页中,将整个家庭分为6个区域:客厅、主卧、客卧、书房、厨房、卫生间。顶部的导航栏就按照这6个区域来划分,每个区域中都有对应的家电设备。左边的导航栏按照家电设备种类来划分(如电灯、电视机、空调等)。以查询设备状态为例,CGI程序流程如图4所示。在网页中点击query按钮后,对应的CGI程序执行图4所示的查询流程,结果如图5所示,可知是串口发生了超时。

6 结 语

本文介绍了嵌入式Web服务器BOA的移植过程和一个简单的基于Web服务器BOA的应用开发过程,读者可以此为参考,开发更为复杂的应用。随着互联网应用领域的不断深入及数字家庭的不断普及,嵌入式Internet技术将得到更为广泛的应用和发展。

深圳市中电网络技术有限公司 Copyright© www.52solution.com 粤ICP备10202284号