APP下载

基于ARM的嵌入式Web服务器设计与实现

2014-01-01肖令禄

渭南师范学院学报 2014年23期
关键词:内核浏览器智能家居

肖令禄

(渭南师范学院物理与电气工程学院,陕西渭南714099)

物联网是信息化产业中继计算机、互联网和移动通信技术之后兴起的又一项革命性技术.作为物联网技术的一个典型应用,智能家居近年来在我国得到了快速发展,它在为人们的生活带来便捷、舒适、安全的同时,也逐渐改变着人们的生活方式.随着3G、4G网络的开通运营以及各种手持智能移动终端的普及,人们利用Internet随时随地对智能家居进行远程监控成为了可能.但传统的Web服务器对系统硬件配置要求较高,不适用于资源有限的嵌入式系统.本文设计了一种基于ARM的嵌入式Web服务器,通过将Web技术和通用网关接口技术CGI(Common Gateway Interface)相结合,不仅满足了嵌入式设备接入互联网的需求,而且实现了客户端与服务器之间的动态数据交互,能够很好地适应智能家居等嵌入式系统远程监控的需要.

1 嵌入式Web服务器的体系结构

传统的Web服务器通常是由一系列具有高运算处理能力、海量存储能力的高性能PC机组成,以非实时操作系统为软件运行平台,用来响应众多用户对网站的并发访问请求.而在嵌入式系统中,设备的软硬件资源都非常有限,不支持对系统资源占用较多的应用程序,也无需处理大量的数据请求,因此,宜采用功能相对简单、体积小、资源消耗少的嵌入式Web服务器,其体系结构如图1所示.

图1 嵌入式Web服务器的体系结构

嵌入式Web服务器通常采用B/S结构,其内部已经植入了TCP/IP协议.用户通过浏览器向Web服务器发送连接请求,服务器在检查请求合法后建立与浏览器的TCP/IP连接,侦听浏览器服务请求并按HTTP协议规范进行解析,根据所请求内容的不同,将一个静态页面或CGI程序的执行结果返回给浏览器.

在嵌入式Linux系统中,典型的Web服务器有httpd、shttpd、thttpd及Boa等.其中,Boa是一种运行于Linux环境下的高效小巧的Web服务器,其可执行代码只有约60 KB左右.[1]Boa是一个单任务的Web服务器,只能依次完成用户的请求,不能创建新的进程处理并发连接请求,但Boa支持CGI,能够创建出一个新的进程来执行CGI程序,满足本系统的设计要求,因此,设计中选用Boa作为嵌入式Web服务器.

2 硬件平台的设计

本系统硬件平台选用友善之臂的Micro2440开发板,该开发板采用以ARM920T为内核的S3C2440处理器,系统硬件组成主要包括微处理器、存储器、外设接口及用户接口等四个部分,如图2所示.

图2 系统硬件平台结构示意图

Micro2440开发板支持两种启动模式,即NorFlash启动和NandFlash启动,设计中选用第二种启动方式.系统上电复位后程序将从0x00000000地址处开始运行,该地址对应于64 MB NandFlash的起始地址,存放引导系统加载程序BootLoader.BootLoader用于初始化硬件设备,建立内存空间映射图,从NandFlash中读取内核映像和根文件系统到RAM中,为内核设置启动参数,调用内核直到最终启动系统.

3 系统软件设计

3.1 ARM-Linux软件开发环境的建立

软件开发环境的建立过程主要包括:BootLoader的移植、Linux内核的移植以及根文件系统的制作.该环境实际上是任何嵌入式系统开发所需的通用环境,因本文的研究重点并不在于此,故只作简要介绍.

BootLoader是系统上电后运行的第一段程序,用于引导操作系统.S3C2440微处理器常用的BootLoader主要有vivi和u-boot,设计中选用u-boot作为引导加载程序.其移植过程相关参考文献较多,在此不再赘述.移植完成后,将编译生成的u-boot.bin文件下载到NandFlash的0x00000000地址处即可.

Linux内核移植是指根据所选用的目标平台对Linux源代码进行必要修改,使其能在目标平台上正确运行,包括获取内核源代码,根据目标平台对体系结构相关的代码进行修改,添加必要的硬件驱动程序,配置并编译内核,以及将生成的内核映像文件uImage烧写到NandFlash中的指定区域等.本设计中选用Linux2.6.29.4 版本内核,按文献[2]所述方法进行移植.

根文件系统是内核启动后挂载的第一个文件系统,它由一些内核启动所必须的文件和目录组成,如用户进程init所对应的文件、挂载分区所需的/etc/fstab文件、shell接口、各种操作命令及应用程序运行所依赖的库文件等.设计中选用BusyBox创建根文件系统目录,同时,为了便于调试并节约存储资源,选用网络文件系统NFS挂载根文件系统.

3.2 Boa服务器的移植

Boa服务器的移植过程主要包括源代码的获取、可执行文件的编译、Boa.conf文件的配置等.[3]

(1)从www.boa.org上下载Boa服务器源代码,设计中选用Boa-0.94.13版本.

(2)解压后进入Boa源代码目录下的src子目录,生成Makefile文件并进行修改,将CC=gcc、CPP=gcc-E分别修改为CC=arm-linux-gcc和CPP=arm-linux-gcc-E.执行make命令进行编译并去除调试信息,得到大小约为60 KB的可执行文件Boa.

(3)Boa.conf文件用于配置Boa服务器的运行环境及参数,包括用户访问权限、服务器侦听端口、日志目录、静态页面和CGI脚本的存储目录等.配置内容包括:将服务器端口设置为80,将访问权限User nobody、Group nogroup分别修改为User 0和Group 0,设置访问日志目录为/var/log/boa/access_log,设置静态页面的存放目录为/www,设置CGI脚本的存放目录为/cgi/cgi-bin等.

3.3 CGI程序设计

CGI定义了Web服务器和CGI脚本之间的接口标准,提供了一种Web环境下的数据传递服务机制.[4]用户可通过浏览器传递信息给Web服务器,服务器把接收到的信息存入环境变量,然后启动指定的CGI脚本完成特定的工作.CGI脚本在执行过程中所需的参数可从环境变量中获取,最后将执行结果以HTML页面的格式返回给浏览器端,其工作原理如图3所示.

图3 CGI工作原理示意图

在Web环境下,浏览器与服务器之间的数据交换都是通过表单完成的,其数据传递方式包括GET和POST两种.在GET方法中,表单中的数据被作为字符串附加到URL的后面,由于字符串长度受环境变量QUERY_STRING的限制且只能出现在URL请求行中,故表单数据的提交大多使用POST方法.[5-6]

在智能家居控制系统中,遍布在室内的各种传感器将采集到的数据发送并以文本文件的格式保存在家居控制中心.以环境温度检测为例,传感器采集到的温度值经格式转换后保存在根文件系统中的temperature.txt文件中,CGI程序开始运行后,将打开该文件,读取文件中的数据并保存在数组中,用标准输出STDOUT将查询到的温度信息以HTML格式返回到浏览器页面中.设计中温度查询所对应的CGI程序为temp.cgi,其主要代码如下:

4 实验测试

设计智能家居远程控制系统主页面index.html,存放在Boa服务器的/www目录中,将编译后的CGI应用程序存放在/cgi/cgi-bin目录中,设置开发板的IP地址为192.168.0.123,启动Boa服务器,在任意浏览器地址栏中输入开发板的IP地址,即可看到系统主界面,如图4所示.点击“查询”按钮后,相应的CGI程序就会被执行,同时将查询结果返回到浏览器页面中.除查询家居环境以外,还可设计相应的CGI程序用于智能家电的远程控制.

图4 智能家居远程监控界面

5 结语

将嵌入式Web服务器引入到智能家居控制系统的设计中,使得用户可以通过浏览器实现家居环境的远程监测以及智能家电的远程控制,极大地方便了用户,提高了家居的智能化水平.实验测试结果表明,该系统响应速度快、可靠性较高,经适当的修改和完善,可广泛应用于数据采集、医疗看护、工业控制等众多领域,具有一定的应用和推广价值.

[1]王俊,郭书军.嵌入式Web服务器的实现及其CGI应用[J].电子设计工程,2011,19(21):152-154.

[2]王剑飞,程耀瑜.基于S3C2440的嵌入式Linux系统移植[J].电子测试,2012,(11):84-88.

[3]谢华成,李晶.物联网系统中嵌入式 BOA的移植与应用[J].软件,2011,32(5):106-108.

[4]宋凯,严丽平,甘岚.嵌入式Web服务器的设计与实现[J].计算机工程与设计,2009,30(4):808-810.

[5]王莉,周伟.基于ARM的嵌入式Web服务器设计[J].计算机工程与应用,2012,48(14):90-93.

[6]居锦武.基于嵌入式实时操作系统RTX51的软件系统设计[J].四川理工学院学报(自然科学版),2012,25(1):74-76.

猜你喜欢

内核浏览器智能家居
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
基于PLC的智能家居控制系统研究
反浏览器指纹追踪
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
基于Zigbee的无线通信技术在智能家居中的应用
关于智能家居真正需求的探讨
环球浏览器
智能家居更贴心