李峰 马丽 葛熠
摘要:该文设计实现了基于FS2410开发板的嵌入式智能家居远程监控系统,系统采用S3C2410处理器和Linux操作系统,具有耗能低、控制简便、成本低廉和智能化等特点。建立了嵌入式系统平台和开发环境,包括制作bootloader,嵌入式Linux内核的裁减、移植,文件系统的制作、加载,对AD转换模块,键盘扫描模块,LED驱动模块,声音报警模块进行了分析与设计,总体设计良好,层次较清晰,可维护性高。
关键词:家庭安防;嵌入式;Linux;s3c2410;驱动
中图分类号:TP316文献标识码:A文章编号:1009-3044(2012)20-4835-06
GPRS-based Remote Security Monitoring System - Environment Set Up and Driver Design
LI Feng, MA Li, GE Yi
(Nanjing University of Information Science and Technology, Nanjing 210044, China)
Abstract: In this paper, the embedded system development, design and implement the basic embedded smart home remote monitoring sys tem. The system uses the S3C2410 processor and Linux operating systems, with low power consumption, easy control, low cost and intelli gent features. Establish a platform and development environment for embedded systems, including the production of the reduction of pro duction bootloader, embedded Linux kernel, transplantation, loading the file system, and the analysis of the keyboard scanning module, the LED driver module, the audible alarm module. The overall design is good, the level is clearer, high maintainability.
Key words: home security; embedded; Linux; S3c2410; driver
随着社会的不断发展,人们的生活水平得到很大的提高,家用电器得到普遍的应用,也因此带来饿了更大的安全隐患。一些电器如果出现一些故障异常,则会给人们带来不必要的损失。为了减少各种异常情况造成的安全隐患,就必须在异常发生时用户能够得到及时的信息。所以,远程监控系统的前景和作用是非常巨大的。
现有的安防监控系统一般采用的是摄像机传送视频信号然后经过高效压缩芯片的压缩,传送到内置的WEB服务器。在监控端用户可以通过浏览器观看WEB服务器上的摄像机视频图像,用户还可以控制摄像机镜头的动作[1]。但是这种方法所需要的设备成本比较高,并且所需的带宽比较多,适合在小区或者学校等公共场所得实时监控,但是家居安防监控设备具有一些特点,它不需要连续的监控,并且也不需要将监控情况实时的传入服务器进行监控,该系统需要具备耗能低,控制简便,成本低廉的优点。
1系统结构
使用FS2410开发板[2]和GPRS模块和传感器,实现对现场的监控功能,硬件资源来源于FS2410开发板自带的资源,比如温度传感器,报警器,红外传感器等。如果红外传感器特检测到有不法分子闯入,那么相应的相应的报警功能,并通过GPRS模块通知用户现场情况,用户根据具体情况采取不同的措施。如果温度传感器检测到有火灾,则启动装置,并短信通知用户。主要模块以及功能见图1。
2基于GPRS家庭安防系统驱动模块概要设计
2.1 AD模块概要设计
输入数据流:现场的温度
输出数据流:实际的温度值
处理说明[3]:
1)AD驱动模块的注册
首先将编写好的AD驱动源程序(s3c2410-adc.c)交叉编译成相应的模块(s3c2410-adc.ko),然后在系统启动的脚本里添加ins mod命令将驱动模块插入到内核之中。
2)创建AD设备节点
当驱动模块插入内核以后,会得到一个主设备号并根据测试程序设定的设备节点名,用mknod创建一个节点。
3)测试AD
运行测试程序,测试AD是否工作正常。
2.2键盘扫描模块驱动概要设计
功能描述:模拟红外传感器或者用于其他扩展功能处理说明:
1)键盘驱动的注册
将键盘扫描驱动以模块的形式插入到linux内核之中,完成注册设备,并得到相应的主设备号。
2)创建设备节点
完成键盘扫描驱动的注册之后,用mknod创建键盘的设备节点。
3)测试
把键盘扫描驱动的测试程序交叉编译生成可执行程序,在开发板运行测试,测试是否得到相应的键值。
2.3 LED驱动模块概要设计
输入数据:温度过高后,开启灭火设备
输出数据:灯亮代表灭火,灯灭代表正常
处理说明:
1)驱动程序的加载
编写完驱动程序,同样要交叉编译生成相应的模块,用insmod命令插入到内核之中。得到相应的主设备号。
2)创建设备节点
根据主设备号和系统的设备节点名,用mknod命令来创建设备节点。
3)测试
首先交叉编译测试程序main-led.c,在开发板上执行main-led可执行程序,可以通过改变温度传感器的温度值来测试是否能开启灭火功能。
2.4声音报警模块概要设计
输入数据:温度过高或者有不法分子闯入时。
输出数据:蜂鸣器报警代表异常。
处理说明:
1)驱动程序的加载
编写完驱动程序,同样要交叉编译生成相应的模块,用insmod命令插入到内核之中。得到相应的主设备号。
2)创建设备节点
根据主设备号和系统的设备节点名,用mknod命令来创建设备节点。
3)测试
首先交叉编译测试程序main-beep.c,在开发板上执行main-beep可执行程序,可以通过改变温度传感器的温度值或者按键来测试是否能开启报警功能。
3系统搭建
3.1 uboot烧写
使用H-jtag将u-boot烧写[4]在2410开发板的nand flash的零地址上,我们选择的是K9VF1208,设置烧写参数如图2所示。
选择烧写的uboot文件源文件位置及烧写地址,烧写完成后打开终端,重启开发板。其中主机ip设置# setenv serverip 192.168.1.2,目标板ip设置# setenv ipaddr 192.168.1.3,保存环境变量# saveenv
3.2 Linux编译与配置[6-7]
1)解压内核并进入内核目录
2)修改Makefile
修改内核源码目录下的Makefile。
修改交叉编译工具链。
3)拷贝s3c2410默认配置文件
4)配置内核
5)配置网卡驱动
将cs8900.c和cs8900.h两个文件拷贝到linux-2.6.35/drivers/net/arm/下
修改Kconfig添加cs8900内核配置项
修改linux-2.6.35/drivers/net/arm/Kconfig添加如下内容:
config S3C2410_CS8900
tristate“CS8900 support”
depends on NET_ETHERNET && ARM && ARCH_SMDK2410
---help---
support for cs8900 chipset base Ethernet cards,if you have a network card of this type.修改Makefile添加内核编译配置
修改driver/net/arm/Makefile添加如下内容:
obj-$(CONFIG_S3C2410_CS8900) += cs8900.o
添加地址映射定义
修改arch/arm/mach-s3c2410/include/mach/map. h文件,添加如下内容:
/* CS8900a */
#define pSMDK2410_ETH_IO__phys_to_pfn(0x19000000)
#define vSMDK2410_ETH_IO0xE0000000
#define SMDK2410_ETH_IRQIRQ_EINT9
添加平台代码
修改arch/arm/mach-s3c2410/mach-smdk2410.c文件,添加如下内容:
tatic struct map_desc smdk2410_iodesc[] __initdata = {
/* nothing here yet */
{
vSMDK2410_ETH_IO,pSMDK2410_ETH_IO,SZ_1M,MT_DEVICE} //添加内容
};
配置内核,让它支持cs8900网卡
$ make menuconfig
Kernel Features --→//使用EABI工具链这两项是必须选择的
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL) (NEW)
Device Drivers --→
[*] Network device support --→
[*] Ethernet (10 or 100Mbit) --→
<*> CS8900a support
6)Nand flash驱动的添加
在linux-2.6.35.13的内核中已经包含了s3c2410的nand flash控制器的驱动,但是需要我们正确配置后才能正常工作。
修改分区信息,建立分区表。
配置内核
7)内核编译
在linux顶层目录
$ make zImage
内核编译(大约需要半个小时)拷贝内核到tftpboot目录下$ cp arch/arm/boot/zImage /tftpboot
3.3 Busybox制作根文件系统
Busybox将许多常用的UNIX工具和命令结合到一个单独的程序中[8],虽busybox中的这些工具相对于GNU常用工具功能有所简化,但对于嵌入式系统来说这已经足够了。同时,busybox仅仅需要几百KB的空间资源就能实现大量的Linux命令(如ls,cat,cp等),节省系统空间容量,使用简洁方便,不需裁剪就可以直接将其应用于嵌入式系统的根文件系统[9]。
Busybox开放源代码,遵守GPL协议,该文以虚拟机为载体,busybox-1.17为例,完全的源代码可从http://www.busybox.net下载,压缩包大小为1.3M左右。经过源码下载,编译,安装,启动参数设置,然后重新启动开发板,最终会进入如下界面,这便是一个最简Linux系统,见图3。
4驱动模块的实现
4.1 AD驱动模块的实现
硬件描述:
AD转换器是模拟信号转化为数字信号,方便对信号的处理[1,10]。FS2410开发板用的AD转换器是ARM S3C2410内置的一个10位AD转换器。并且支持触摸屏功能。最大转化率是500K,AD转换器频率的计算公式为:系统时钟/(比例值+1)。例如:
PCLK为50MHz,预分频值为49,所以10位转换时间为:
50MHz/(49+1)=1MHz
转换时间为1/(1MHz/5)= 5微秒(完成一次AD转换需要5个时钟周期)
本电路的是通过改变滑动变阻器的阻值从而改变模拟电压量,实现不同的信号输入。
软件是通过read,write来对AD的进行读和写的操作。
4.2 LED驱动模块的实现
硬件描述:
S3C2410处理器的四个管脚与四个LED灯相连接[1,10],因为GPIO是复用管脚,因此首先配置相应寄存器,配置控制寄存器GP FCON,配置为output为01,然后就是对灯进行相应控制,对数据寄存器GPFDAT写入不同数据,如果写0,led灯亮,如果为1则表示灯灭。
驱动程序中,注册该设备,打开设备之后,上层应用软件是通过ioctl进行相应的控制,具体流程如图4。
4.3键盘扫描驱动模块的实现
硬件描述:
4*4键盘扫描与S3C2410管脚相连接[1,10],软件上首先配置相应的寄存器,这里主要要配置GPFCON,GPGCON,GPECON三个寄存器,把相应的位设置为OUTPUT和INPUT工作模式。然后设置下降沿触发中断。
驱动大致流程如图5。
4.4蜂鸣器驱动的实现
硬件描述:
S3C2410A有5个16位定时器,其中定时器0、1、2、3有脉宽调制(PWM)功能。定时器4有只有一个内部定时器而没有输出管脚。蜂鸣器接到S3C2410处理器的一个GPB0管脚上,配置GPBCON的GPB0为输出模式,在GPBCON[0:1]位上写入01,即设置为输出模式,当数据寄存器里写入1时,蜂鸣器打开。当写0时,关闭蜂鸣器[1,10]。
该驱动的大致流程请参考图6,上层应用软件通过ioctl来进行相应的控制的。
5结束语
本系统硬件采用优龙公司的FS2410开发板,硬件使用三星公司的s3c2410芯片,裁剪并移植linux2.6.35的内核,使用busybox制作了根文件系统,对AD转换模块,键盘扫描模块,LED驱动模块,声音报警模块进行了分析与设计。监控机可以通过温度传感器实时监测温度,判断是否发生火灾,通过红外传感器探测是否有人进入现场,并进行声光报警,在异常情况下给用户发送短信报警。该系统智能化程度高,功耗低,可靠性高,在实际应用中具有很好的推广价值。
参考文献:
[1]徐彬彬,伍利衡,李秋廷,等.基于GPRS的远程安防监控系统的研究和设计[J].现代电子技术,2012(2):36-39,46.
[2]周曼丽,姜文刚.基于嵌入式Web服务器的植物工厂远程监控系统研究与实现[J].中国农机化,2011(5):90-95.
[3]丘宏烈.基于嵌入式ARM7和以太网监测电压参数的研究[D].成都:西华大学,2011.
[4]李洪亮.邵长彬.基于s3c2410的u-boot移植[J].电子技术,2012(1):12-14.
[5]方安平,高柯,刘炽.U-Boot在ADSP-BF533上的移植[J].现代电子技术,2008(4):37-39.
[6]孙天泽.嵌入式LINUX操作系统[M].北京:人民邮电出版社,2009.
[7]曾宏安.嵌入式linux C语言开发[M].北京:人民邮电出版社,2009.
[8]张方樱.构建嵌入式Linux的根文件系统[J].实验室科学,2007(6):87-89.
[9]李飞,武金虎,石颖博.基于busybox的根文件系统制作[J].电脑知识与技术,2010,6(17):4655-4699.
[10]孙天泽,袁天菊.基于ARM9处理器[M].3版.北京:电子工业出版社,2009.