1、 1 陕西理工学院 课题名称 基于 ARM的 远程监控系统 设计 专 业 电子信息工程 姓名学号 王 辉 1113014139班 级 电子 1104 指导教师 贾建科 2 摘 要 随着工业技术的不断发展,以及人对安全防范意识的逐渐加强,视频监控 系统已经成为人们在生产、生活中必不可少的一个部分。特别是近年来,随着 计算机技 术的发展、宽带的普及、图像处理技术的提高,视频监控在越来越广 泛地渗透到教育、娱乐、医疗、运动等各个领域。视频监测系统已经成为当今 可视化领域的一个新的开发热点。许多应用领域对于视频监控系统提出了更高 更新的要求,如何经济有效地实现特定环境所需的监控功能,给我们提出了新 的
2、课题。 本文设计和实现了基于 ARM9 和 Linux 操作系统的嵌入式视频监控系统, 实现视频图像的采集、压缩和传输。文章结合嵌入式技术、图像压缩技术和网 络技术,设计了一种基于嵌入式的网络视频监控系统。 本文首先研究了视频监 控系统的发展现状及今后发展趋势,详细分析了嵌 入式监控系统的基本原理和性能要求,提出了系统的设计的总体方案。在硬件 设计方面,系统采用三星公司的 $3C2410A 作为嵌入式处理器,配合外围硬件电 路构成嵌入式核心板。系统采用模块化设计方案,将硬件划分为三大模块:主 控器与储存器模块;电源时钟复位电路模块;外围接口电路模块。在论文中对 各个部分进行了详细的介绍。完成了
3、核心板的硬件设计后,接下来介绍如何构 建嵌入式监控系统的软件平台,包括成功的移植 Linux 操作系统;嵌入式 Linux 下 USB 接口摄像头驱动的接口 和实现。最后在基于嵌入式 Linux 系统的平台 上完成应用程序的设计,完成视频图像的采集、压缩、传输,这部分主要完成 的工作有:如何使用 Vide04Linux API 库函数实现图像采集;如何实现视频的 软件压缩;如何保证视频流数据的实时传输。 本文实现了一种体积小、成本低廉、数字化的监控解决方案。该系统可满 足监控系统对数据传输可靠性和实时性的要求,具有广泛的应用价值。 3 1.绪论 当今社会是一个高速发展的社会,信息获取的方便快捷
4、可以使我们领先一步并创造出巨大的利益,而我们 或许信息的一个重要途径就是眼睛。在人的感官中有 80%是来自是觉 1。图像时客观事物的形象、生动的描绘,是直观而具体的信息表达方式,是人类重要的信息载体。随着科学技术的快速发展和人民物质生活水平的提高,视频监控系统以其直观、方便和信息内容丰富的特点,日益受到人们的青睐,并在各行各业得到了广泛的应用。生活中有电梯监控,门禁,车库监控等等。电讯行业有基站监控,银行系统又柜员机监控,林业部门有火情监控,交通方面有违章监控和流量监控等。 1.1 嵌入式系统简介 嵌入式系统 (Embedded System)是计算机的一 种应用形式,通常指嵌入在宿主设备中的
5、微处理机系统。它所强调的是:隐藏计算机的常见形式,辅助寄 宿主设备,使宿主设备的功能智能化。据此,通常把嵌入式系统定义为一种以应用为中心,以计算机为基础,软硬件可以剪裁,适用于系统对功能、可靠性、 成本、体积、功耗有严格要求的专用计算机系统 011。嵌入式系统有如下共同点: (1)功能专一:专门为某一特定应用系统而设计; (2)结构紧凑:嵌入式系统结构必须特别的紧凑,从而达到小体积,高性能, 低成本,低功耗; (3)智能灵活及实时性:要对不同的情况做出不同的反应,同时必须实 时地 给出计算的结果并进行实时控制。 (1)硬件环境 硬件环境是整个嵌入式操作系统和应用程序运行的硬件平台,不同的应用
6、通常有不同的硬件环境。在做嵌入式设计的时候要根据不同的性能需求设计不 同的底层硬件。 (2)嵌入式操作系统 嵌入式操作系统控制着应用程序编程与硬件的交互作用,保证系统的运行以 及各种操作的实现。它为应用程序提供了一个软件平台。嵌入式操作系统具有相对不变性。 4 (3)嵌入式应用程序 运用程序运行于操作系统之上,利用操作系统提供的机制完成特定功能的 嵌入式应用。不同的系统需要设计不同的嵌 入式应用程序。 1.2 课题背景 课题来源于电梯网络视屏监控系统,电梯网络视频监控系统由位于控制柜中的服务器、客户端组成,实现一个具有视频采集压缩及传输功能的可以直接接入以太网的网络摄像机基本过程是:电梯发生故
7、障时,维护人员在客户端上拨号接通服务器,由于服务器实时采集电梯内的视频图像,并通过以太网传送给客户端,维护人员可以通过监控客户端来实现电梯内的监控。 1.3 论文主要内容和结构安排 针对监控系统中的关键技术进行分析,本文将重要研究一下内容 ( 1)嵌入式操作系统的实现 在 ARM 微处理器上运行嵌入式操作系统,可以为上层软件的开发提供统一的接口,方便系统功能的进一步扩展升级。 ( 1)图像信号的采集与压缩 通过伸向头采集视频数据后,再进行视频图像压缩。选用合适的视频图像压缩方式对远程监控的效果有很大的影响。 MJPEG 视频压缩方式对视频数据信号采用帧内压缩,而不进行帧间压缩,容易实现,成本较
8、低 6。 ( 1) 视频数据的网络传输 嵌入式 Linux 系统具有完整的 TCP/IP 协议,因此,可以采用 socket 编程建立一个基于 TCP/IP 的嵌入式视频服务器 。 全文结构安排如下: 第一章:综合论述了视频监控系统的现状和发展情况。 第二章:提出了本系统的整体结构,介绍了 S3C6410 的体系结构。 第三章:研究嵌入式 Linux 在 ARM 上的裁减和移植。 第四章:简单介绍了基于 V4L 的视频采集程序以及图像压缩理论 第五章:视屏传输的实现。介绍了建立连接的相关内容并对本系统连接测试。 5 第六章:对本文的工作进行总结,并提出展望。 2.系统整体结构 2.1 视屏监控
9、系统的结构设计 基于嵌入式技术的监控系 统前端采用摄像头采集视频流,然后通过网络传输到接受者。整体结构如图 2.1.1 所示。 该系统采用基于 ARM11 的 S3C6410X微处理器,通过在处理器上运行 Linux操作系统,构建嵌入式服务器,接受来自摄像头的视频流,再进行压缩编码,再传送实现监控 7。 2.2 ARM 处理器简介 ARM( Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对微处理器的通称,还可以认为是一种技术的名字。 ARM 处理器是一个 32位元 精简指令集 (RISC)处理器架构 ,其 广泛地使用在许多嵌入式系统设计。 ARM 处理
10、器具有以下特点 8: 1、体积小、低功耗、低成本、高性能; 2、支持 Thumb( 16 位) /ARM( 32 位)双指令集 ,兼容性好。 6 3、大量使用寄存器,指令执行速度更快; 4、大多数数据操作都在寄存器中完成; 5、寻址方式灵活简单,执行效率高; 2.3 S3C6410 体系结构 S3C64xx 系列的应用处理器芯片是三星主推的,三星目前推出了 S3C6400和 S3C6410,都是基于 ARM11架构的,而且硬件管脚兼容,应该说大致的功能基本相同, 比较明显的区别就是 S3C6410带有 2D/3D 硬件加速 9。 S3C6410是一个强大的应用处理器,该芯片架构如图 2.3.1
11、: 7 3. 嵌入式系统软件平台 3.1 Linux 操作系统简介 Linux 是一种自由和开放源码的类 Unix 操作系统。目前存在着许多不同的Linux,但它们都使用了 Linux 内核。 Linux 可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。 Linux 是一个领先的操作系统,世界上运算最快的 10台超级计算机运行的都是 Linux 操作系统。严格来讲, Linux 这个词本身只表示 Linux 内核,但实际上人们已经习惯了用 Linux 来形容整个基于 Linux 内核,并且使用 GNU 工程各种工具和数据库的操作系统。
12、Linux 得名于计算机业余爱好者 Linus Torvalds。 10 Linux 可以运行在多种硬件平台上,如具有 x86、 680x0、 SPARC、 Alpha 等处理器的平台。此外 Linux 还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。 2001 年 1 月份发布的 Linux 2.4 版内核已经能够完全支持 Intel 64位 芯片架构。同时 Linux 也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。 ARM 技术和 Linux 成功的结合充分满足了各类应用对嵌入式平台高性能、低功耗和低价格的要求,通过开发环境、开源社区和 ARM 的商业伙伴的有时
13、为嵌入式开发停工了灵活的选择 11。 3.2 交叉编译环境的建立 通常嵌入式系统的软件编译和执行是两个不同平台上进行的。编译时在宿主机上进行的,执行是在目标机,及嵌入式系统的硬件平台。一般是在宿主机通过跨平台交叉编译器把源文件编译成目标平台可执行的文件在通过串口、并口或者网络下载 至目标凭条的 FLASH 或者其他存储介质,然后由目标机来运行这些软件。 本系统采用基于 ARM11 的 S3C6410,可以使用常用的 ARM 交叉编译器,要成功构建完整的交叉编译环境,余姚在宿主机上创建一系列的工具,包括C/C+编译器、汇编器、连接器、嵌入式系统的标准 C 库和 GDB 代码调试器,成功建立好后便
14、可以用这些工具进行嵌入式系统开发了 16。 8 3.3 嵌入式 Linux 移植 BootLoader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而 将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像 BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 BootLoader 来完成。比如在一个基于 ARM7TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址 0x00000000 处开始执行,而在这
15、个地址处安排的通常就是系统的BootLoader 程序。 专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux系统从 软件 的角度看通常可以分为四个层次 12: 1、 引导加载程序。包括固化在 固件 (firmware)中的 boot 代码 (可选 ),和BootLoader 两大部分。 2、 Lniuxn 内核 。特定于嵌入式板子的定制内核以及内核的启动参数。 3、 文件系统。包括根文件系统和建立于 Flash 内存 设备之上文件系统。通常用ramdisk 来作为 rootfs。 4、 用户 应用程序 。特定于用户的应用程序。有时在用户应用程序和内核层之间
16、可能还会包括一个嵌入式 应用程序 。常用的嵌入式 GUI 有: MicroWindows 和MiniGUI 等。 引导加载程序是系统加电后运行的第一段 软件代码 。 PC 机中的引导加载程序由 BIOS(其本质就是一段固件程序 )和位于硬盘 MBR 中的 OS BootLoader(比如, LILO 和 GRUB 等)一起组成。 BIOS 在完成硬件检测和资源分配后,将硬盘 MBR中的 BootLoader读到系统的 RAM中,然后将控制权交给 OS BootLoader。BootLoader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动 操
17、作系统 。 通常, BootLoader 是严重地依赖于硬件而 实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 BootLoader 几乎是不可能的。尽管如此,我们仍然可以对 BootLoader归纳出一些通用的概念来,以指导用户特定的 BootLoader 设计与实现。 9 Boorloader 的实现以来与 CPU 的体系结构,一般来说启动过程分为两个阶段 13: 第一阶段以来于 CPU 的体系结构大代码,比如设备初始化代码等。这个阶段完成的任务如下: ( 1) 硬件设备初始化 ( 2)为第二阶段准备 RAM 空间 ( 3) 复制 Bootloader 的第二阶段代码到 R
18、AM 空间中 ( 4) 设置好堆栈并跳转 到第二阶段的 C 程序入口点 第二阶段则通常用 C 语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可持续性和移植性。这个阶段的主要任务有: ( 1)初始化本阶段要使用的硬件设备 ( 2) 检测系统内存映射 ( 3)将内核映像和根文件系统从 FLASH 读到 RAM 中 ( 4)为内核设置启动参数 3.4 Linux 平台下 mjpg-streamer 移植 本系统选用嵌入式 Linux 作为目标机操作系统,一方面由于 Linux 是一款免费的操作系统,能很好的见底成本,同时 Linux 的开发应用现在应经成为热门,有大量的资源可 供学习与使用
19、,并且 Linux 系统具有良好的可移植性和可裁剪性,能自动支持多任务管理。本系统采用 ARM 开发平台,所以依赖 ARM 硬件平台的代码都在 arch/arm 下面。根目录下面只需要修改 Makefile 文件,该文件主要任务是产生 vmLinux 文件盒内核模块,对该文件的修改主要是设置目标平台和制定交叉编译器 14 在 /opt/mini6410 目录下创建目录 webcamera 来作为我们本次移植工作的工作目录,输入以下命令创 建: # mkdir p /opt/mini6410/webcamera 进入 webcamera 目录下,通过 SVN 下载最新的 mjpg-streame
20、r - mini2440 项目源代码: # cd /opt/mini6410/webcamera/ # svn checkout http:/mjpg -streamer - 10 mjpg-streamer - mini2440 -read -only 输入以下命令进行 mjpg-streamer - mini2440 -read -only 目录: # cd mjpg-streamer - mini2440 -read -only 根据以下指示修改: 1) 用 vi 编辑 start_uvc_yuv.sh, 将内容: ./mjpg_streamer -o “output_http.so
21、-w ./www“ -i “input_uvc.so -y“ 修改成 ./mjpg_streamer -o “output_http.so -w ./www“ -i “input_uvc.so -y -d /dev/video2“ 2) 用 vi 编辑 Makefile a) 在 clean:处删除 make -C plugins/input_s3c2410 $ b) 再删除以下内容: input_s3c2410.so: mjpg_streamer.h utils.h make -C plugins/input_s3c2410 all CC=$(CC) cp plugins/input_s3c
22、2410/input_s3c2410.so . c) 再到 package: 处删除以下两行 : input_s3c2410.so start_s3c2410.sh 3.5 交叉编译 mjpeg-stream 执行以下命令进行编译并打包: # cd /opt/mini6410/ webcamera/ mjpg-streamer - mini2440 -read -only / # export CC=arm-linux-gcc # make # make package 在当前目录下会生成 mjpg-streamer - mini2440 -bin.tar.gz, 将它拷入 SD 卡备用。 Mini6410 上的摄像头 Bin”目录下找到我们编译好的可执行文件,文件名为 mjpg-streamer - mini6410 -bin.tar.gz 。