毕 设 论 文

 

 

 

基于嵌入式Linux的网络监控系统

摘要

介绍了一种采用Browser/Server结构、在视频服务器上内置一个嵌入式Web服务器、基于嵌入式Linux视频的网络监控系统。重点阐述了其服务器端的设计。

 

关键字:嵌入式Linux;web服务器;视频服务器

 

Embedded Linux-based network monitoring system

Abstract

This paper presents a use of Browser / Server structure, built-in video server, an embedded Web server, based on embedded Linux network video monitoring system. Focuses on the design of its  server-side.

 

Keyword: Embedded Linux; web server; video server

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目录

 

前言__ 4

1系统总体架构与功能__ 4

2 系统实现__ 5

2.1 硬件平台简介_ 5

2.2软件设计与实现_ 5

3实验步骤__ 6

3.1需要的软件与工具简介_ 6

3.2软件安装_ 6

4 实验用途__ 12

5 参考文献__ 13

致谢__ 14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

前言

近几年嵌入式软件行业迅猛发展,嵌入式产品渗入各个行业,象常见到的手机、PDA、机顶盒、高清电视(HDTV)、路由器、汽车电子、数码相机、医疗仪器、航天航空设备等等都是典型的嵌入式系统,嵌入式开发已经成为当前最热门最有发展前途的行业之一。业内人士认为,目前嵌入式行业至少存在30-50万的人才缺口,仅北京市场嵌入式软件开发人员的需求就已经超过了5万人,而且还在持续增加,这主要有两方面的原因:一是与目前我们高校的专业设置有关,我国高校的计算机教育普遍以应用软件为主,很少涉及嵌入式软件的课程,因此企业很难招聘到马上可以投入嵌入式软件开发的实战型人才;二是嵌入式领域门槛相对较高,知识要求比较全面,而且需要一定的实验环境(开发板和工具软件)和有经验的人进行指导。需要软件和硬件两个方面的知识,需要掌握操作系统原理、C语言、汇编语言、ARM体系结构也需要知道。所以说对于学习软件的学生,可能还需要花些时间研究硬件,这个是有点难度的。同时也是硬件出生的学生,也需要了解编程语言。

 

 

1系统总体架构与功能    嵌入式Linux视频网络监控系统是电工电子装置、计算机软硬件以及网络、通信等多方面的有机组合体,它以智能化、网络化、交互性为特征,结构比较复杂。如果利用OSI七层模型的内容和形式,把相应的数据采集控制模块硬件和应用软件以及应用环境等有机组合,可以形成一个统一的系统总体框架.摄像头传送来的视频信号数字化后,经过压缩,通过RS-232/RS485将数据送到内置的Web服务器,嵌入式Linux系统的10/100M以太网口实现接入Internet网络,将现场信号送到客户端。整个系统的核心是嵌入式Linux系统。监控系统启动后,嵌入式Linux系统启动Web Server服务程序,或者自己手动启动Web Server服务程序,接收授权客户端浏览器的请求,Web Server将根据通信协议完成相应的监测。客户端就可以时时看到服务器端监控的图像。客户端可以通过浏览器或者安装客户端软件进行监控,如果是通过浏览器需要安装JAVA插件。通过在开发板的摄像头监控周围的环境,把采集到的数据传输到客户端,也就是监控端,把图像播放出来。同时可以通过网络远程的浏览器把服务器端下保存的数据调出来。

 

2 系统实现

2.1 硬件平台简介  本系统以公开的嵌入式Linux源代码为基础,根据设计的嵌入式目标板编写相应的Bootloader程序,然后裁剪出合适的内核和文件系统。CPU- ARM920T- 5 级流水线设计- 16KByte指令缓存- 16KByte数据缓存,主频- 203MHz(标称频率200MHz,最高266MHz),内存- 64MByte PC133 SDRAM- 32bit BusWidth-前端总线频率100MHz,LCD显示输出- 通用液晶屏幕接口,支持单色、伪彩、真彩液晶屏幕-最大分辨率1024x768(理论值)- 四线电阻式模拟触摸屏接口,VGA显示输出-最大刷新率80Hz- 最大分辨率800x600(最大刷新率和最大分辨率不可同时达到),网卡- 10M 网络接口,串口- 2 个简化RS232串行口- 2个USB HOST接口(USB1.1)

2.2软件设计与实现  视频监控系统软件结构采用的是浏览器/服务器(B/S)网络模型,即由客户端通过Web向服务器提出请求,服务器对请求做出确认响应并执行相应的任务(如向客户端发送组播地址、图像格式、压缩格式等),建立连接后就可以在客户端监控被控点,从而实现远程网络监控。服务器(Web Server)端即现场监控点的软件结构包括采集模块、压缩编码模块、网络通信模块、控制模块等,如图2所示。

3实验步骤

3.1需要的软件与工具简介

摄像头驱动:

2.6.11之前需要的驱动是:spca5xx。2.6.11之后需要的驱动是:gspcav1-20070508.tar.gz。
服务器视频采集:
servfox-R1_1_3.tar.gz
客户端播放视频:
spcaview,但是安装Spcaview前提是需要安装SDL。
浏览器java plugs:
linux下的java插件:jre-xx-linux-i586-rpm.bin
windows下的java插件:jre-xx-windows.exe(xx代表版本号)
web服务器:
boa
交叉编译器:
arm-linux-gcc-3.4.1.tar.bz2
Bootloader:
Vivi
内核:
2.6.14
文件系统:
通过nfs挂载的cramfs
3.2软件安装
x86环境配置:交叉编译器arm-linux
下载arm-linux-gcc-3.4.1.tar.bz2
Cd /usr/local;mkdir arm;cp arm-linux-gcc-3.4.1.tar.bz2  ./(把arm-linux-3.4.1拷贝到这里);tar zxvf arm-linux-gcc-3.4.1.tar.bz2;mv  arm-linux-gcc-3.4.1 3.4.1(重命名) (ok了)
配置交叉编译器的路径:vi /etc/.bashrc然后找到PATH,修改为PATH=/usr/local/arm/3.4.1/bin:$PATH
注销linux;
在命令行输入env查看path有没有/usr/local/arm/3.4.1/bin
结束
安装摄像头驱动程序:gspcav1-20070508.tar.gz
下载gspcav1-20070508.tar.gz
把gspcav1-20070508.tar.gz拷贝到要编译内核目录下media(我的是/home/linux-2.6.14/driver/usb/media),tar zxvf  gspcav1-20070508.tar.gz;cd /home/linux-2.6.14;
修改内核让其支持gspcav1驱动(适用于zc301芯片的摄像头),内核默认支持ov511芯片的摄像头)
1)Cd /home/linux-2.6.14;
vi ./drivers/usb/Makefile在obj-$(CONFIG_USB_W9968CF)   += media/之后添加
obj-$(CONFIG_USB_SPCA5XX)    += media/
2)vi  ./drivers/usb/media/Kconfig添加如下代码
config USB_SPCA5XX
       tristate "USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras"
       depends on USB && VIDEO_DEV
       ---help---
      Say Y or M here if you want to use one of these webcams:
          The built-in microphone is enabled by selecting USB Audio support.
      This driver uses the Video For Linux API. You must say Y or M to
      "Video For Linux" (under Character Devices) to use this driver.
      Information on this API and pointers to "v4l" programs may be found
      at .
      To compile this driver as a module, choose M here: the
      module will be called spca5xx.3)vi  drivers/usb/media/Makefile添加如下代码
obj-$(CONFIG_USB_SPCA5XX)    += gspcav1-20071224/
4)配置内核选项
cd /home/linux-2.6.14
make menuconfig
 Device Drivers---> Multimedia devices  --->  <*> Video For Linux (内核默认是支持的)
Device Drivers--->USB support  --->  │<*> Support for Host-side USB (内核默认是支持的)
Device Drivers--->USB support  --->   USB Host Controller Drivers---<*>   OHCI HCD support(内核默认是支持的)
Device Drivers--->USB support  --->│---   USB Multimedia devices---<M>   USB SPCA5XX Sunplus/Vimicro/Sonix jpeg Cameras(按空格键选择M让支持编译成模块)
make zImage(zImage在/home/linux-2.6.14/arch/arm/boot目录下)
make modules(gspca.ko在/home/linux-2.6.14/drivers/usb/media/gspcav1-20071224下)
cp /home/linux-2.6.14/arch/arm/boot/zImage /home/nfs(tftp目录)
5)cp gspca.ko /home/rootfs(nfs目录下)
安装摄像头驱动了
Spcaview 软件包的安装;
依赖关系;
此软件依赖 libsdl,要先安装它才行,下载地址:http://www.libsdl.org ,我下载的是:SDL-1.2.10.tar.gz
http://www.libsdl.org/download-1.2.php
[root@localhost ~]# tar zxvf SDL-1.2.10.tar.gz
[root@localhost ~]# cd SDL-1.2.10
[root@localhost SDL-1.2.10]# ./configure ; make ;make install安装SpcaView 软件包:
[root@localhost ~]# tar zxvf spcaview-20051212.tar.gz
[root@localhost ~]# cd spcaview-20051212
[root@localhost spcaview-20051212]# make ; make install配置可执行程序的路径:
可执行的工具被安装到 /usr/local/bin目录中,所以我们还要配置一下用户的环境变量PATH 。配置命令执行路径,在当前用户家目录下的.bashrc文件中加入下面的一行; 
export PATH="$PATH:/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/X11R6/bin"
然后运行如下命令;
[root@localhost spcaview-20051212]# source .bashrc
servfox软件包的安装和移植:
http://mxhaard.free.fr/spca50x/embedded/Servfox/servfox-R1_1_3.tar.gz
tar zxvf servfox-R1_1_3.tar.gz
cd servfox-R1_1_3
里面没有Makefile,需要自己修改Makefile.arm;mv Makefile.arm Makefile
Make;cp ./servfox /home/rootfs/bin
完成移植servfox
移植boa服务器:(用arm-linux-2.9.5没有问题)
从www.boa.org;下载boa-0.94.13.tar.gz(我下载的)
tar zxvf boa-0.94.13.tar.gz
cd boa-0.94.13/src;./configure(生成Makefile)
1)vi Makefile
找到CC=gcc把修改为CC=arm-linux-;make得到的可执行程序为boa;arm-linux-strip boa;cp ./boa  /home/rootfs/bin;
2)用arm-linux-3.4.1会出现:
错误1)util.c:100:1: error: pasting "t" and "->" does not give a valid preprocessing token make: *** [util.o] Error 1 
解决方法:vi src/compat.h 
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff 修改成 
#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff 
make clean;make
启动boa时的错误:
Boa,error log 提示 “boa.c:266.icky Linux kernel bug!:No such file”
修改 src/boa.c,將底下判斷式註解掉:
/*if (setuid(0) != -1) {
DIE(”icky Linux kernel bug!”);
}*/
make clean;makeBoa,error log  “bo提示 boa.c:211 - getpwuid: No such file or directory
”修改 src/boa.c,將底下兩個判斷式註解掉:
/*if (passwdbuf == NULL) {
DIE(”getpwuid”);
}
if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
DIE(”initgroups”);
}*/
make clean;make配置boa环境:
编译好了,自动生成boa.conf,可以根据这个boa.conf修改。
1)#ServerName www.your.org.here (在PC机上测试网页,只需修改boa.conf就行了)
改成:
ServerName 域名可以自己写(这句话不能注释,不然会出错)
2)DirectoryMaker /usr/lib/boa/boa_indexer
改成:
#DirectoryMaker /usr/lib/boa/boa_indexer
3)DefaultType text/plain 
改成:
DefaultType text/html
4)#AddType application/x-httpd-cgi cgi 
改成:
AddType application/x-httpd-cgi cgi
5)ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
改成:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/。下面是配置开发板的环境:
cd /home/rootfs
Mkdir ./etc/boa
cp boa.conf ./etc/boa
mkdir ./var/log/boa
mkdir ./var/www
mkdir ./var/www/cgi-bin/
在/var/www中放置一个index.html文件cp /etc/mime.types ./etc
把spcaview目录下http-java-applet拷贝到/home/rootfs/var/www/下(实现网页远程监控)需要修改文件夹的权限chmod -R 755 /home/rootfs/var/www/http-java-applet就可以了。
安装java插件:
1.linux下java插件
Download 
jre-xx-linux-i586-rpm.bin;mkdir /usr/local/java;cp ./jre-xx-linux-i586-rpm.bin /usr/local/java
chmod +x ./jre-xx-linux-i586-rpm.bin;./jre-xx-linux-i586-rpm.bin;在执行过程中需要选择输入yes就可以了。
进入fixfore插件目录。我的系统是red flag;cd /usr/lib/fixfore/plugins;创建软连接ln -s /usr/java/jre1.5.0_09/plugin/i386/ns7/libjavaplugin_oji.so libjavaplugin_oji.so

在浏览器中输入about:plugins查看。

windows下java插件:

下载好软件双击就好了,

到这里所以软件已经安装好了,下面就可以启动开发板,进行相关的测试和配置。

x86配置:

1)启动tftp服务service xinted restart;netstat -au(查看有没有启动)

2)启动nfs服务service portmap restart;service nfs restart

开发版配置:

启动开发板瞬间安键盘空格自己启动内核的方式,我通过网络下载。

 net  tftp 192.168.1.88 0x30008000 zImage(192.168.1.88是tftp服务器,zImage是内核镜像,0x30008000是开发板的内存空间地址)

Boot ram(从内存启动)

通过nfs挂在文件系统。

到此在开发版上的linux跑起来了。

挂载摄像头驱动模块,insmod gspca.ko会打印摄像头的信息。

mknod /dev/video0 c 81 0(建立摄像头设备)

启动boa服务器输入boa &(查看/home/rootfs/var/log/boa/error_log里面的信息有没有启动成功)

启动视频采集服务器输入servfox -g -d /dev/video0 -s 320x240 -w 7070 &(-d 表示设备,-s表示大小 -w端口)如果摄像头驱动成功话了,会提示等待连接的信息。

x86环境:

输入 spcaview -g -w 192.168.1.77:7070(192.168.1.77 &是视频服务器的地址,即是开发板的地址)如果没有问题,就可以看到图像了。

通过客户端浏览器的网页中监视:

前提是安装java插件,

http://192.168.1.77/java/index-sample.html

4 实验用途

 

 Web服务器连接到局域网,然后接入Internet,给web服务器分配一个IP地址。在用户终端 ,在浏览器的地址栏中直接输入视频服务器的地址 ,即可在浏览器页面中播放远程实时稳定、流畅的图像,取得了良好的监控效果。  基于嵌入式Linux视频的网络监控系统的Web服务器直接连入网络,没有线缆长度和信号衰减的限制,同时网络是没有距离概念的,彻底抛弃了地域的概念,扩展了布控区域。又由于视频压缩和Web功能集中到一个体积很小的设备内,直接连入局域网或广域网,即插即看,系统的实时性、稳定性、可靠性大大提高,无需专人管理,非常适合于无人值守的环境。随着计算机技术、网络技术的迅速发展,人们对视频监控系统的要求会越来越高。相信该系统在电子商务、视频会议、远程监控、远程教学、远程医疗、水利和电力监控等方面有广阔的应用前景。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5 参考文献

网络文献

[1] 杨勇. Linux内核特点及移植. 成都大学学报(自然科学版). 2008第1期

[2] 徐峰. 浅谈我国嵌入式Linux技术的发展现状与发展动向. 硅谷. 2008第6期

[3] 李际峰 李正明 孙俊. 构建基于ARM920T的嵌入式Linux系统. 电子产品世界. 2008第4期

[4] 胡维,张方樱. 构建嵌入式Linux的根文件系统的busybox方法

. 广州大学学报(自然科学版). 2008第3期

[5] 杨洋.嵌入式Linux操作系统中数据采集程序设计. 柳钢科技. 2008第2期

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

致谢

转眼间半年多的实习时间就结束了,即将踏上离开母校的列车,回忆这三年的时间,感觉那么的飞快,在这里我先感谢下我大一的班主任宫鼎老师,谢谢您领着我们迈出走进大学的第一步,让我很快的融进了大学的生活和学习中去。还要感谢我大一的网页老师李岩老师,谢谢您在上机课将我赶出机房(因为我当时玩个小游戏),谢谢你的严厉的教育。感谢米洪米老师给我提供去机房去学习的机会,在机房工作两年学到很多东西,也很荣幸的认识吴士力吴老师,刘奇刘老师等,在吴老师和刘老师指点与帮助下,我对Linux兴趣增强,在我感到迷茫、艰难时,总给我耐心且正确的教导,使我很快找到学习的方法与思路,获得显著的成长,相信不管走到哪里,都是受用一生的我会在以后的人生路上牢记您的教诲。还有现在班主任张毓秋张老师,宋维堂宋老师,孙丹东孙老师等,谢谢你们对我这三年以来的帮助。还有很多老师就不一一列举名字了。在学校不仅仅是学习书本知识,更重要的是学会做人和做事。也许很多人感叹没有学到知识,只是我们没有发现而已。

从选题到这次毕业论文能够最终顺利完成,首先要感谢各位老师三年来对我的教育和关怀,使我能将我所学到的知识在论文中表达出来,谢谢我的指导老师吴老师的支持和帮助才使得我的毕业论文最终顺利完成。最后,我向信息系全体老师们再次表示衷心感谢:谢谢你们!