基于ARM9视频监控系统的设计_课程设计论文.docx

上传人:小小飞 文档编号:3919741 上传时间:2019-10-10 格式:DOCX 页数:33 大小:1.10MB
返回 下载 相关 举报
基于ARM9视频监控系统的设计_课程设计论文.docx_第1页
第1页 / 共33页
基于ARM9视频监控系统的设计_课程设计论文.docx_第2页
第2页 / 共33页
基于ARM9视频监控系统的设计_课程设计论文.docx_第3页
第3页 / 共33页
基于ARM9视频监控系统的设计_课程设计论文.docx_第4页
第4页 / 共33页
基于ARM9视频监控系统的设计_课程设计论文.docx_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《基于ARM9视频监控系统的设计_课程设计论文.docx》由会员分享,可在线阅读,更多相关《基于ARM9视频监控系统的设计_课程设计论文.docx(33页珍藏版)》请在三一文库上搜索。

1、专业实训课程设计论文 基于ARM9视频监控系统的设计摘 要:本文首先综合论述什么是ARM9监控系统,接着阐述实现ARM9监控系统的原理及实现ARM9监控系统所需的硬件及软件。其次,列出实现的具体步骤和部分截图。最后附录部分重要源代码。关键词:VMware虚拟机 Linux操作系统 交叉编译 TQ2440开发板 第一章 ARM监控系统简述1.1 什么是ARM监控系统ARM9监控系统是一种典型的嵌入式系统。嵌入式操作系统(Embedded Operating System,简称:EOS)是指用于嵌入式系统的操作系统。嵌入式操作系统是一种用途广泛的系统软件,通常包括与硬件相关的底层驱动软件、系统内核

2、、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前在嵌入式领域广泛使用的操作系统有:嵌入式Linux、Windows Embedded、VxWorks等,以及应用在智能手机和平板电脑的Android、iOS等。在嵌入式领域中广泛应用的是ARM系列的处理器,ARM公司引发了嵌人式领域的一场革命,在低功耗、低成本的嵌入式应用领域确立了其市场领导地位,是目前32位市场中使用最广泛的微处理器。以ARM为架构的嵌入式技术具有非常广阔的前景。在A

3、RM 微处理器平台上移植嵌入式Linux 操作系统,完成视频采集任务,并以服务器方式将图像发送到网络,从而实现远程监控。系统以ARM9 微处理器AT91RM9200 为主处理器,采用普通USB 摄像头作为图像采集设备,构建了一种可靠性好、价格低廉和使用方便的网络视频监控系统。视频监控系统由实时控制系统、监视系统和管理信息系统三部分组成。仅发展了短短二十几年时间,从19世代80年代的第一代模拟监控到第二代基于“PC+多媒体卡”的数字式视频监控系统再到第三代完全基于IP的网络视频监控系统,就发生了翻天覆地变化。本系统基于 ARM9 处理器和嵌入式Linux 操作系统,利用USB 接口摄像头实现数字

4、图像采集任务。1.2 ARM监控系统实现原理如图1-1为ARM监控系统整体设计原理框图NANDFLASHSDRAM以太网USB摄像头DA9161E接口USB控制器 MCU单元 S3C2440AMCU单元 S3C2440ARS232串口PC机图1-1 ARM监控系统整体设计原理框图视频监控系统是安全防范系统的组成部分,它是一种防范能力较强的综合系统。视频监控以其直观、方便、信息内容丰富而广泛应用于许多场合。嵌入式视频监控系统是以应用为中心、软硬件可裁减的、适应应用系统对功能、可靠性、成本、体积等综合性严格要求的专用计算机系统,亦即为监控系统量体裁衣的专用计算机系统。嵌入式视频监控系统主要由嵌入式

5、处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成,它是集软硬件于一体的可独立工作的“器件”。在视频监控上的嵌入式应用将是视频监控领域的一个重要发展方向。该系统的处理器采用的是三星公司的ARM9芯片S3C2440,它采用ARM920T内核的32位处理器。主频为400MHz,最高可频率可达到533MHz,通过在目标机上运行Linux操作系统,搭建嵌入式视频服务器,接收摄像头采集的视频数据,进行数据压缩和编码,再由DM9000E以太网控制器发送至远程客户端,实现视频数据的网络传输。1.3 ARM监控系统所需的硬件及软件1.3.1 硬件配置1.串行接口:一个五线异步串行口、一个UART扩展接口

6、2. Samsung S3C2440A(CPU处理器)3. 在板64M SDRAM4. 一个USB Host接口5. 一个USB Slave B 型接口6. JTAG 接口7USB摄像头接口8. IIC接口9.DA1961E以太网接口10.USB摄像头1.3.2 软件配置1. VWware虚拟机软件2.linux操作系统2.交叉编译(cross-compilation)环境3. linux设备驱动程序4. bootloader(引导加载程序)第二章ARM监控系统实现步骤及部分截图2.1 在PC机Windows操作系统下安装VWware虚拟机虚拟机是指通过软件模拟的具有完整硬件系统功能,并且能运

7、行在一个完全隔离的环境中完整的计算机系统。通过虚拟机软件,可以在一台物理计算机上模拟出一台或多台虚拟的计算机,这些虚拟机完全就像真正的计算机,可以在虚拟机中安装操作系统、应用程序、也可以通过虚拟机访问网络资源等等。对于用户而言,它只是运行在个人PC上的一个应用程序,而对于在虚拟机中运行的应用程序而言,它就是一台真正的计算机。安装宿主机上的操作系统可以有两种方式。第一种方式是直接在“裸机”上安装Fedora Core 10,安装完成后计算机上只有Fedora Core 10操作系统。这种方式下Fedora Core 10直接操控计算机的硬件,系统的任何反应都是Fedora Core 10的直接反

8、应。但是,对于习惯Windows的用户而言,这种方式操作起来会有些困难,毕竟Fedora Core 10与Windows是两种完全不同的操作系统。第二钟方式是现在计算机上安装Windows操作系统,再在Windows下安装虚拟计算机软件,如VWware等,然后在虚拟机下安装Fedora Core 10。这种方式安装完成后,Fedora Core 10只隶属于Windows下的一个软件,启动虚拟机之前的所有操作与Windows下的其他操作都是一样的。鉴于Windows的盛行,本文选择后一种方式。具体步骤:新建虚拟机自定义workstation 6linux:other linux 2.6.X K

9、ernel命名该虚拟机并选择安装位置处理器数量:1内存大小推荐512M使用桥接网络I/O适配器的选择创建两个新的虚拟磁盘选择磁盘类型:IDE设定磁盘大小:8G/5G设定磁盘文件的名字完成。此事就完成了VMware12的安装。本文以2.6版本的linux为平台安装fedora 10操作系统,安装完成后如图 2-2所示:图 2-1 安装虚拟机图 2-2 虚拟机安装完成后的界面2.2 安装及配置操作系统Fedora Core 10完成虚拟机安装后,选择Linux平台开发工具包中的文本文档readme并选择如图2-3中的两行粘贴到Redhat9的下载列表中。启动虚拟机,如图2-4。向虚拟机中倒入Lin

10、ux。如图2-5选择适当linux版本作为目标平台,如图2-6选择适当虚拟机内存,设置网络为桥接。在虚拟机设置完成后会进行linux自动安装,但要终止安装进行其他设置。在新建一磁盘用于存放数据如图2-7,之后启动虚拟机进行Fedora Core 10的安装。添加所有系统自带软件,添加完成后会出现如图2-8所示界面。图 2-3 选择位置图 2-4 启动虚拟机界面1.将所需要的工具instsrv.exe和srvany.exe放在一个文件夹内,在这我放在d:tools中吧。2.需要了解vmware.exe的安装路径,以本机为例:D:VMware Workstationvmware.exe要启动的虚拟

11、机配置文件路径,我的2003虚拟机的配置文件windows2003.vmx的路径是D:vmarewindows2003windows server 2003.vmx3.新建服务假设服务名为vm_autostart,所以我的命令行是:instsrv VM_AutoStart D:toolssrvany.exe4.注册服务在注册表中,定位到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesvm_autostart新建项:Parameters在Parameters项里面,新建字符串Application,字符串的值:D:VMware Workstati

12、onvmware.exe -x D:vmarewindows2003windows server 2003.vmx图 2-5 选择linux:other linux 2.6版本本系统选择linux:other linux 2.6版本,如图2-5,点击下拉菜单,找到linux:other linux 2.6版本,选择该版本。图 2-6 设置虚拟内存图2-6用于设置虚拟机管理的磁盘大小。为了给虚拟机留出足够的磁盘空间,我们设定磁盘大小为20G,设置情况如图2-6.注意:内存:为虚拟机设置的内存大小不要小于实际的物理内存大小。图 2-7 磁盘分区图 2-8 操作系统安装完成重新登陆后修改系统文件,如

13、图2-8图 2-8 修改系统文件之后重新登录进行虚拟机的工具安装,如图2-9,以完成Fedora Core 10与Windows之间的信息传递图 2-9 虚拟机的工具安装按如图2-9进行Fedora Core 10网络功能的测试,测试完成后出现如图2-10界面,即完成Fedora Core 10的安装。图 2-9 网络功能的测试图 2-10 Fedora Core 10安装完成2.3 建立交叉编译环境交叉编译是指在某个主机平台上(比如PC上)生成可在其他平台上(比如ARM上)运行的可执行代码而要进行交叉编译,就必须要在宿主机平台上安装对应的交叉编译工具链(cross compilation t

14、ool chain),然后用安装好的交叉编译工具链编译源代码,最终生成可在目标机上运行的可执行程序。本系统是在Linux PC上,使用arm-linux-gcc编译器,编译出针对Linux内核的 ARM平台上的可执行文件。下面是建立交叉编译环境的步骤:在Linux PC上,打开终端,使用命令#tar xvfj EABI_4.3.3_EmbedSky_.tar.bz2将下载好的交叉编译工具解压,然后使用#gedit /etc/profile打开并修改profile文件,添加如图2-11的第21句,使用#source /etc/profile使交叉编译器生效: 图2-11 建立交叉编译环境2.4

15、移植引导加载程序bootloader(引导加载程序)是系统加电后运行的第一段代码。嵌入式系统中的bootloader相当于PC机中的BIOS。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。大多数bootloader都包含两种不同的操作模式,一种是启动加载(bootloading)模式,在这种模式下,bootloader从目标机上的某个固态存储器设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是boot- loader的正常工作模式,另一种是下载(downloading)模式。

16、在这种模式下,目标机上的bootloader将通过串口或网络等通信手段从开发主机(host)上下载内核映像和根文件系统映像等到RAM中。然后可以再被bootloader写到目标机上的固态存储介质上。# tar xvfj /mnt/hgfs/Linux/u-boot-1.1.6.tar.bz2 -C /解压u-boot源码,在U-Boot的顶层目录的Makefile文件中定义了所有开发板的配置选项,首先应该为开发板添加新的配置选项,参照TQ2440的配置,加入如下语句:tq2440_config:unconfig$(MKCONFIG)$(:_config=) arm arm920t tq2440

17、 NULL s3c24x0开发板配置选项中各项的含义如下:arm:表示CPU的架构是ARM体系结构。arm920t:表示CPU的内核类型,对应cpu、arm920t子目录。NULL:这位用于表示开发商者或经销商。S3c24x0:片上系统定义。使用#make tq2440_config配置u-boot。配置好后使用make CROSS_COMPILE=arm-linux- 命令编译得到u-boot.bin的镜像文件,将其烧写到开发板。2.5 移植linux内核嵌入式操作系统Linux用C语言写成,技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系

18、统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统Linux内核移植:执行#tar xvfj /mnt/hgfs/Linux/Linux-2.6.30.4.tar.bz2 -C /解压下载好的内核文件,其中/mnt/hgfs/Linux是虚拟机与PC的共享文件。解压后进入到内核源码,修改Makefile文件添加对ARM的支持,具体如下:ARCH=armCROSS_COMPILE=arm-linux-CC=arm-linux-gcc使用#make menuconfig命令进入配置单添加对EABI的支持,修改后保存为.config文件,修改完成后执行

19、#make zImage编译内核源码,编译完成后,在内核源码的arch/arm/boot/目录下会生成镜像文件zImage,将这个文件烧写到开发板。Linux内核移植完成后将出现如图2-12所示界面。图2-11 Linux内核移植2.6 配置驱动程序TQ2440开发板支持市面上常见的中芯微芯片的USB摄像头,当接入USB摄像头后。终端会显示出如图2-12信息,同时在“/dev”目录下会出现设备名“/dev/v4l/ video0”但应该注意:操作系统Linux使用虚拟文件系统作为统一的操作接口来处理文件和设备。与普通的目录和文件一样,每个设备也使用一个VF-Sinode来描述。对设备的操作也是

20、通过对文件操作的file-operation结构体来调用驱动程序的设备服务子程序。所以,在进行Linux内核配置时应修改相应设备管理目录下的摄像头文件,使其处于可见状态。图2-12 接入USB摄像头后出现的界面摄像头属于视频设备,在Linux内核中,Video for Linux(简称V4L)是关于视频设备的驱动标准18。这个标准为应用程序定义了一系列的接口函数,内核、驱动和应用程序都是依靠这个标准来进行交流。摄像头的I/O控制是依靠V4L提供的read、open、ioctl19等应用程序接口实现。在编译器部分,将Linux下的摄像头驱动程序中Makefile文件中相关行修改为CC=optho

21、starmv41binarmv41unknowngcc1inux,修改Con-figin文件,这样在配置内核的时候才可以看见驱动程序的名称。同时对下列与处理器相关的部分进行修改,即可实现对S3C2440A的USB驱动的移植。在PC的终端执行#make menuconfig命令添加对ZC301P摄像头的支持: ZC3XX USB Camera Driver USB ZC301P Images Procession and Control Chip support 修改后使用#make zImage重新编译内核镜像,将内核镜像移植到开发板。 实现视频采集后,还需要把采集到的图像数据压缩后经由网络传

22、送出去,所以还要在此基础上建立基于socket的网络服务器,用来完成客户端与服务器二者之间的数据通信。该系统中视频数据的网络传输是基于TCP协议来实现,前端嵌入式机作为视频服务器负责视频采集并建立好TCP服务器,等待客户端的连接;客户端做好一系列初始化工作后,主动连接服务器,得到应答后建立连接接收压缩视频数据并实时显示,同时可以根据用户的要求进行实时或定时保存图像或者视频文件。最后,在虚拟机中打开用户终端,输入设备驱动程序后将会启动摄像头采集视频信息,即完成视频监控,如图2-13所示。图2-13 监控系统采集到的视频信息第三章 设计总结通过历时两周的生产实习这门课程的学习,给我最大的感受就是要

23、在老师的指导下学会学习。刚开始我觉得ARM对于我们这一组来说纯粹是零基础,以前都没有学习过。但是在我们不断到图书馆查找相关知识和网上学习后,我们逐渐学会了嵌入式操作系统和TQ2440A的使用,并可以完成视频监控。本文将嵌入式系统技术应用到网络视频监控系统中,设计了一款基于Linux和S3C2440A的低成本的网络视频采集传输系统,主要完成了arm开发板外围电路的设计;Bootloader的启动分析以及在开发板上的移植;嵌入式Linux在arm9平台上的剪裁和移植;USB摄像头在Linux下的驱动配置;基于V4L的视频采集程序的设计。服务器程序和客户端程序的设计;实现了数据的网络传输;对视频数据

24、进行编解码,并进行连续播放;对系统在实验环境下进行整体测试。Internet 的发展为嵌入式系统的发展提供了一个良好的机会, 也提出了许多严峻的挑战。网络能力将会成为未来嵌入式系统的必需。各种嵌入式的网络应用软件将会广泛使用。嵌入式系统的发展又为嵌入式操作系统的发展提供动力10。基于Internet 的视频图像传输系统现在在各个领域正发挥着重要的作用, 并有来越多的厂商投身于这个领域, 随着视频压缩技术的发展、网络传输能力的不断增强, 网络视频的优越性会逐步体现,相信嵌入式网络视频服务器的应用会更为广泛。参考文献 1 何鹏举, 陈明, 段磊强, 等. 基于嵌入式Web 服务器的远程视频监控系统

25、 J . 测控技术, 2004 2 何梅. Java Applet 编程实例M . 北京: 清华大学出版社, 2003. 3 耿祥义. Java 基础教程M . 北京: 清华大学出版社, 2004. 4 刘六彬. 嵌入式视频监控系统中Linux 应用的研究 J . 科技广场, 2005, 2( 2) : 4 - 7.LIU Liu-bin . The research of uClinux application in embedded-video-system J . Science Mosaic, 2005, 2( 2) : 4 -7.5 陈俊宏Embeded Linux嵌入式系统原理与实

26、务M北京:中国铁道出版社,20046 西刹子安防天下:智能网络视频监控技术详解与实践M 北京:清华大学出版 社,2010-027 吴明晖基于ARM的嵌入式系统开发与应用M北京:人民邮电出版社,20048 段群杰零基础学ARM9嵌入式Linux系统开发M北京:机械工业出版社,2010-109 程昌南、方强ARM Linux入门与实践M北京:航空航天大学出版社,2008-1010 田荣华、杨健、 唐振明. ARM接口编程M电子工业出版社,2012-0611 达内IT培训集团. ARM嵌入式系统移植实战开发.M北京:航空航天大学出版社, 12 天嵌科技基于linux的视频采集M2006附录程序源代码

27、:mjpg_streamer.c#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include utils.h#include mjpg_streamer.h/* globals */static globals global;/*Description.: Display a help messageInput Value.: argv

28、0 is the program name and the parameter prognameReturn Value: -*/void help(char *progname) fprintf(stderr, -n); fprintf(stderr, Usage: %sn -i | -input parametersn -o | -output parametersn -h | -help .: display this helpn -v | -version .: display version informationn -b | -background.: fork to the ba

29、ckground, daemon moden, progname); fprintf(stderr, -n); fprintf(stderr, Example #1:n To open an UVC webcam /dev/video1 and stream it via HTTP:n %s -i input_uvc.so -d /dev/video1 -o output_http.son, progname); fprintf(stderr, -n); fprintf(stderr, Example #2:n To open an UVC webcam and stream via HTTP

30、 port 8090:n %s -i input_uvc.so -o output_http.so -p 8090n, progname); fprintf(stderr, -n); fprintf(stderr, Example #3:n To get help for a certain input plugin:n %s -i input_uvc.so -helpn, progname); fprintf(stderr, -n); fprintf(stderr, In case the modules (=plugins) can not be found:n * Set the def

31、ault search path for the modules with:n export LD_LIBRARY_PATH=/path/to/plugins,n * or put the plugins into the /lib/ or /usr/lib folder,n * or instead of just providing the plugin file name, use a completen path and filename:n %s -i /path/to/modules/input_uvc.son, progname); fprintf(stderr, -n);/*D

32、escription.: pressing CTRL+C sends signals to this process instead of just killing it plugins can tidily shutdown and free allocated ressources. The function prototype is defined by the system, because it is a callback function.Input Value.: sig tells us which signal was receivedReturn Value: -*/voi

33、d signal_handler(int sig) int i; /* signal stop to threads */ LOG(setting signal to stopn); global.stop = 1; usleep(1000*1000); /* clean up threads */ LOG(force cancelation of threads and cleanup ressourcesn); global.in.stop(); for(i=0; iglobal.outcnt; i+) global.outi.stop(global.outi.param.id); usl

34、eep(1000*1000); /* close handles of input plugins */ dlclose(&global.in.handle); for(i=0; iglobal.outcnt; i+) /* skip = 0; DBG(about to decrement usage counter for handle of %s, id #%02d, handle: %pn, global.outi.plugin, global.outi.param.id, global.outi.handle); for(j=i+1; jglobal.outcnt; j+) if (

35、global.outi.handle = global.outj.handle ) DBG(handles are pointing to the same destination (%p = %p)n, global.outi.handle, global.outj.handle); skip = 1; if ( skip ) continue; DBG(closing handle %pn, global.outi.handle); */ dlclose(global.outi.handle); DBG(all plugin handles closedn); pthread_cond_d

36、estroy(&global.db_update); pthread_mutex_destroy(&global.db); LOG(donen); closelog(); exit(0); return;/*Description.: Input Value.: Return Value: */int control(int command, char *details) switch(command) case CONTROL_CMD_RECONFIGURE_INPUT: printf(will reload input plugin: %sn, details); break; defau

37、lt: LOG(unknown control command receivedn); return 0;/*Description.: Input Value.: Return Value: */int main(int argc, char *argv) char *input = input_uvc.so -resolution 640x480 -fps 5 -device /dev/video0; char *outputMAX_OUTPUT_PLUGINS; int daemon=0, i; size_t tmp=0; output0 = output_http.so -port 8

38、080; global.outcnt = 0; global.control = control; /* parameter parsing */ while(1) int option_index = 0, c=0; static struct option long_options = h, no_argument, 0, 0, help, no_argument, 0, 0, i, required_argument, 0, 0, input, required_argument, 0, 0, o, required_argument, 0, 0, output, required_argument, 0, 0, v, no_argument, 0, 0, version, no_argument, 0, 0, b, no_argument, 0, 0, background, no_argument, 0, 0, 0, 0, 0, 0 ; c = getopt_long_only(argc, argv, , long_options, &option_index); /* no more options to parse */ if (c = -1) break; /* unrecognized option */

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1