当前位置: 首页 > >

基于ARM嵌入式的视频监控系统

发布时间:

毕 业 设 计(论 文)
课题名称 基于 ARM 嵌入式远程视频监 控系统

学生姓名 蔡明俊 学 专 班 号 0815022114 业 通信工程 级 08通信本1班 教授

指导教师 张洪涛 2012 年 5月

1

The Remote Video Surveilance Based On ARM Embedded System

By Samuel Cai June 2012

2

毕业设计(论文)任务书
系 部 电气信息系 蔡明俊 指导教师 专业班级 张洪涛 通信工程(一) 职 学 称 号 教授 0815022114

学生姓名 论文题目

基于 ARM 嵌入式远程视频监控系统 论文要求: 基于 Linux *台的 ARM 系统的实现; 通过内核移植与软件移植实现视频 信号的采集和压缩,基于 TCP/IP 技术的视频的网络传输。

论文要求完成远程视频实时监控实例,并描述开发过程。 进度安排: 论 文 内 容 目 标 及 进 度 要 求 2012.1.11 布置毕业论文,选定毕业论文题目《基于 ARM 嵌入式远程 视频监控系统》 2012.1.12-02.28 收集资料, 资料来源主要来自图书馆、校园网电子图书期 刊资料,撰写主要 参考文献的摘要,翻译外文参考资料。 2012.3.1-7 2012.2-3 月 2012.3-4 月 2012.5.1-9 2012.5.10-20 2012.5.21-30 2012.5.31 2012.6.上旬 撰写开题报告 修改开题报告和论文提纲,开题报告定稿 撰写论文初稿 上交毕业论文初稿,指导老师检查论文初稿,提出修改意见 修改论文初稿,完成并上交毕业论文二稿 修改论文二稿,完成并上交毕业论文三稿 完成论文定稿并打印装订 论文答辩 指导教师签名:张洪涛 年 月 日

系 审

部 核

3

毕业设计(论文)学生开题报告
课题名称 课题类型 学生姓名 蔡明俊 基于 ARM 嵌入式远程视频监控系统 DX 学 号 081502211 4 指导教师 专业班级 张洪涛 教授 08 通信本一班

本课题的研究现状、研究目的及意义

当今社会是一个高速发展的社会, 信息获取的方便快捷可以使我们领先一步 并创造出巨大的利益, 而我们或许信息的一个重要途径就是眼睛。在人的感官中 有 80%是来自是觉[1]。图像时客观事物的形象、生动的描绘,是直观而具体的 信息表达方式, 是人类重要的信息载体。随着科学技术的快速发展和人民物质生 活水*的提高,视频监控系统以其直观、方便和信息内容丰富的特点,日益受到 人们的青睐,并在各行各业得到了广泛的应用。生活中有电梯监控,门禁,车库 监控等等。 电讯行业有基站监控, 银行系统又柜员机监控, 林业部门有火情监控, 交通方面有违章监控和流量监控等。 自从摄像机和电视出现后,最初的模拟监控系统出现了。经过较长时间的发 展和应用,已经非常成熟,性能也十分稳定,但由于系统中模拟图像信息为主, 对图像的处理和传送都才采用模拟技术,不紧图像质量差,而且系统资源浪费严 重,不易组成复杂的网络结构,主要是一种单功能、单向、集总方式的信息采集 网络,监控功能可扩展性差。因此系统尽管已发展到很高的水*,已无潜力可以 发掘,局限性大。 随着计算机应用的普及,网络通信技术及图像压缩技术的快速发展,在视屏 监控领域中,数字化和网络化成为一种趋势。上世纪末,基于 pc 的数字化网络 视频监控技术迅速发展,部分取代了视频矩阵图像分割器、录像机为核心,辅助 以其他设备的模拟视频监控系统。数字化的的视频通信在图像质量、传送距离、 抗干扰能力等方面都要优越于传统的模拟通信系统,并且图像处理更加方便。因 此,数字化网络视频监控系统将不然取代传统的模拟监控系统[2]。但随着基于 PC 的视频监控系统的发展,在实际工程应用中也暴露出一些不足之处,主要是 系统工作的实时性不高、稳定性差,而且成本较高;PC 需要专门人管理,操作 较为繁琐;兼容性差,采用的视频压缩对数据进行处理,因此系统一般只支持一 种编码格式,无法提供其他编码方式的支持。 进入 21 实际,嵌入式技术、多媒体图像处理技术的进一步发展,为嵌入式网 络视频监控系统的繁重提供了技术条件。嵌入式系统是以应用为中心,软硬件可

4

以裁减的,具有高可靠性,低成本、严要求、综合性强的专用计算机系统,它主 要有嵌入式微处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成, 集软硬件于一体,能够独立工作。嵌入式系统具有实时性好、稳定性高等特点, 在网络视频监控中的快速发展。

课题类型: (1)A—工程实践型;B—理论研究型;C—科研装置研制型;D—计算机软件型; E—综合应用型 (2)X—真实课题;Y—模拟课题; (1)(2)均要填,如 AY、BX 等。 、

5

已查阅的主要参考文献 [1]文峻,网络视频的零距离沟通,市场报,2002.9(13)

[2]刘富强,数字视频监控系统开发及应用,北京:机械工业出版社,2003

[3]李小*等,多媒体通信技术,北京航空航天大学出版社,2004

[4]陈俊宏,嵌入式系统原理与务实,中国铁道出版社,2004

[5]吴明晖,基于 ARM 的嵌入式系统开发与应用,人民邮电出版社,2004

[6]S3C6410 32-bit RISC MICROPROCESSOR USERS MANUAL.Samsung Electronics Semiconductors ,Revision1.2

[7]杨凯,基于 S3C6410 的多媒体数字终端的研究与实现

[8]杜春雷,ARM 体系结构的与编程,清华大学出版社,2003

[9]朱珍民,隋雪青,嵌入式实时操作系统及应用开发,北京邮电大学出版社,2006

[10]Craig Hollabaugh 嵌入式 Linux 电子工业出版社,2003

[11]王学龙,嵌入式 Linux 系统设计与应用,清华大学出版社

[12]于明,范书瑞等,ARM9 嵌入式系统设计与开发教程,电子工业出版社,2006

[13]马忠梅,ARM&Linux 嵌入式系统教程,北京航空航天大学出版社,2004

[14]李巨光,ARM 应用系统开发详解,清华大学出版社,2003

[15]赵炯,Linux 内核完全注释,机械工业出版社,2005

[16]李善*,Linux 内核分析及编程,电子工业出版社,2005

[17]孙天泽等,嵌入式设计及 Linux 驱动开发指南一基于 ARM9 处理器,电子工业出版 社,2005
6

指导教师意见

指导教师签名: 年





毕业设计(论文)学生申请答辩表
课 题 名 称 指导教师(职称) 申 请 理 由 学生所在系部 电气信息系 基于 ARM 嵌入式远程视频监控系统 张洪涛 教授 学分已修满,论文已完成,申请答辩 专业班级 通信工程 (一) 学号 0815022114

学生签名:

日期:

毕业设计(论文)指导教师评审表
序号 1 2 3 4 5 6 评分项目(理工类) 工作量 文献阅读与外文翻译 技术水*与实际能力 研究成果基础理论与专业知识 文字表达 学*态度与规范要求 总 分 满分 15 10 25 25 10 15 100 评分

7

(是否同意参加答辩)





指 导 教 师 签 名 :

另附《毕业设计(论文)指导记录册》







8

毕业设计(论文)评阅人评审表
学生姓名 设计(论文)题目 评阅人 序号 1 2 3 4 5 6 评分项目(理工类) 工作量 文献阅读与外文翻译 技术水*与实际能力 研究成果基础理论与专业知识 文字表达 学*态度与规范要求 总 分 蔡明俊 专业班级 通信工程 (一) 学号 0815022 114

基于 ARM 嵌入式远程视频监控系统 评阅人职 称 满分 15 10 25 25 10 15 100 评分





评阅人签名: 年 月 日

9

毕业设计(论文)答辩表
学生姓名 设计(论文)题目 序号 评审项目 蔡明俊 专业班级 通信工程 (一) 学号 0815022114 基于 ARM 嵌入式远程视频监控系统 指 标 满分 评 分

1

报告内容

思路清晰;语言表达准确,概念清楚,论点正确;实验 方法科学,分析归纳合理;结论有应用价值。 准备工作充分,时间符合要求。 对前人工作有改进或突破,或有独特见解。 回答问题有理论依据,基本概念清楚。主要问题回答准 确,深入。 总 分

40

2 3 4

报告过程 创 答 新 辩

10 10 40 100

答 辩 组 评 语
答辩组组长(签字) : 年 月 日

答辩 委员会 意见

答辩委员会负责人(签字) :







10

毕业设计(论文)答辩记录表
学生姓名 蔡明俊 专业班级 通信工程 (一) 学号 0815022114

设计(论文)题目

基于 ARM 嵌入式远程视频监控系统

答辩时间

答辩地点

答辩委员会名单 问题: 回答(要点) :

问题 1 提问人:

问题: 回答(要点) : 问题 2 提问人:

问题: 回答(要点) : 问题 3 提问人:

记录人签名

11

问题: 回答(要点) : 问题 4 提问人:

问题: 回答(要点) : 问题 5 提问人:

问题: 回答(要点) : 问题 6 提问人:

问题: 问题 7 提 问 回答(要点) : 人 :

问题: 问题 8 提问人: 回答(要点) :

记录人签名

12

毕业设计(论文)成绩评定总表
学生姓名:蔡明俊 专业班级: 通信工程(一) 毕业设计(论文)题目:基于 ARM 嵌入式远程视频监控系统

成绩类别

成绩评定

Ⅰ指导教师评定成绩

Ⅱ评阅人评定成绩

Ⅲ答辩组评定成绩

总评成绩 Ⅰ×40%+Ⅱ×20%+Ⅲ×40%

评定等级

注:成绩评定由指导教师、评阅人和答辩组分别给分(以百分记),最后按“优(90--100)” 、 “良(80--89)”“中(70--79)”“及格(60--69)”“不及格(60 以下)”评定等级。其中, 、 、 、 指导教师评定成绩占 40%,评阅人评定成绩占 20%,答辩组评定成绩占 40%。

13

学位论文原创性声明
本人郑重声明: 所呈交的学位论文是本人在导师的指导下独立进行研究所取 得的研究成果。 除了文中特别加以标注引用的内容外,本论文不包含任何其他个 人或集体已经发表或撰写的成果作品。 本人完全意识到本声明的法律后果由本人 承担。 作者签名:蔡明俊 2012 年 6 月 1 日

学位论文版权使用授权书
本学位论文作者完全了解学院有关保管、使用学位论文的规定,同意学院保 留并向有关学位论文管理部门或机构送交论文的复印件和电子版, 允许论文被查 阅和借阅。 本人授权省级优秀学士学位论文评选机构将本学位论文的全部或部分 内容编入有关数据库进行检索, 可以采用影印、缩印或扫描等复制手段保存和汇 编本学位论文。 本学位论文属于 1、保密 2、不保密 作者签名:蔡明俊 导师签名: □√,在 10 年解密后适用本授权书。 □。 (请在以上相应方框内打“√” ) 2012 年 6 月 1 日 年 月 日

14





本文分析了一种基于 ARM 嵌入式技术的网络视频监控系统。系统以嵌入式 L inux 和嵌入式微处理器 S3C6410为核心*台,通过嵌入式*台建立的基于 TCP/I P 协议的视频服务器,将 usb 摄像头采集来的图像数据压缩后,经过网络传输, 完成对监控现场的网络视频监控任务。 论文首先阐述了嵌入式网络视频的监控系统的发展状况,以及整体构建,然 后介绍了嵌入式 Linux 操作系统以及 ARM 处理器的发展情况, 分析了主要外围电 路的设计, 以及如何在 ARM 硬件*台上进行嵌入式 Linux 内核的编译与移植,介 绍了 Bootloader 的启动原理及运行过程,并对在 Linux 操作系统下的 USB 驱动 程序进行了研究。 本文重点讨论了图像采集、 编码和网络通信程序的设计原理与实现。最后以 提供的例子进行了系统整体测试,并提出了进一步开发设想。 本文的研究结果具有较大的工程实际意义,并对基于 IP 技术的各种视屏通 信应用具有一定的参考价值。 关键词:ARM S3C6410 嵌入式 Linux 视频监控

15

Abstract
In this thesis,a resolution of network video surveillance system based on the embedded Linux and S3C6410 has been successfully developed ,according to the requirements of building elevator video surveillance system,The system builds a video sever based on TCP/IP protocol which can capture video signal form USB digital camera and transport the signal to client through Internet. Firstly,the construction of embedded network video surveillance system is put forward and discussed .Secondly,some embedded operation system and the situation of ARM processor are introduced ,the design methods of main hardware circuits are analyzed ,the theory of Bootloader is introduced, the driver of USB device is researched ,and then the transplantation of embedded Linux on the ARM platform is accomplished ,Further this thesis focused on discussing how to design image collecting ,image coding ,and net work communication program .Finally ,the system is tested and the plan of further development is proposed . Result of this research was provided with great signality of practical engineering and a valuable reference of application of video communication based on IP technology. Keywords: ARM S3C6410 embedded system Linux video surveillance

16

(请在以上相应方框内打“√” ............................................................................................... 14 )

17

18

1.绪论
当今社会是一个高速发展的社会, 信息获取的方便快捷可以使我们领先一步 并创造出巨大的利益, 而我们或许信息的一个重要途径就是眼睛。在人的感官中 有 80%是来自是觉[1]。图像时客观事物的形象、生动的描绘,是直观而具体的 信息表达方式, 是人类重要的信息载体。随着科学技术的快速发展和人民物质生 活水*的提高,视频监控系统以其直观、方便和信息内容丰富的特点,日益受到 人们的青睐,并在各行各业得到了广泛的应用。生活中有电梯监控,门禁,车库 监控等等。 电讯行业有基站监控, 银行系统又柜员机监控, 林业部门有火情监控, 交通方面有违章监控和流量监控等。

1.1 视频监控系统的发展
自从摄像机和电视出现后, 最初的模拟监控系统出现了。经过较长时间的发 展和应用,已经非常成熟,性能也十分稳定,但由于系统中模拟图像信息为主, 对图像的处理和传送都才采用模拟技术,不紧图像质量差,而且系统资源浪费严 重,不易组成复杂的网络结构,主要是一种单功能、单向、集总方式的信息采集 网络,监控功能可扩展性差。因此系统尽管已发展到很高的水*,已无潜力可以 发掘,局限性大。 随着计算机应用的普及,网络通信技术及图像压缩技术的快速发展,在视屏 监控领域中,数字化和网络化成为一种趋势。上世纪末,基于 pc 的数字化网络 视频监控技术迅速发展,部分取代了视频矩阵图像分割器、录像机为核心,辅助 以其他设备的模拟视频监控系统。数字化的的视频通信在图像质量、传送距离、 抗干扰能力等方面都要优越于传统的模拟通信系统,并且图像处理更加方便。因 此,数字化网络视频监控系统将不然取代传统的模拟监控系统[2]。但随着基于 PC 的视频监控系统的发展,在实际工程应用中也暴露出一些不足之处,主要是 系统工作的实时性不高、稳定性差,而且成本较高;PC 需要专门人管理,操作 较为繁琐;兼容性差,采用的视频压缩对数据进行处理,因此系统一般只支持一 种编码格式,无法提供其他编码方式的支持。 进入 21 实际,嵌入式技术、多媒体图像处理技术的进一步发展,为嵌入式网 络视频监控系统的繁重提供了技术条件。嵌入式系统是以应用为中心,软硬件可 以裁减的,具有高可靠性,低成本、严要求、综合性强的专用计算机系统,它主

19

要有嵌入式微处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成, 集软硬件于一体,能够独立工作。嵌入式系统具有实时性好、稳定性高等特点, 在网络视频监控中的刀快速发展[3]。嵌入式网络视屏监控与其他监控系统又的 比较有如下特点[4];

(1)布控区域广阔。嵌入式视频监控也可以直接接入网络,没有线缆产度和信 号衰减的闲置,同时网络是没有距离概念的,彻底抛弃了地域的限制,扩展了布 控区域。

(2)系统具有无限的无缝扩展能力。所有设备都可以用 IP 地址进行标示,增加 设备只是意味着 IP 地址的扩充。

(3)可组成非常复杂的监控网络。采用局域嵌入式视频监控设备为核心的监控 系统,在组网方式上与传统的模拟监控和基于 PC *台的监控方式有极大不同, 犹豫嵌入式视频监控设备的输出以往车了模拟到数字的转换并压缩, 采用同意的 协议在网络上传输[5]。

(4)性能更稳定,无需专人管理。嵌入式视频监控设备实际上基于嵌入式计算 机技术, 采用嵌入式多任务操作系统,又由于视频采集和数据处理功能都集中到 一个体积很小的设备内,直接连入局域网或广域网,即插即看,系统的实时性、 稳定性、可靠性大大提高,也无需专人管理,非常适合于无人值守的环境。

因此加强对嵌入式网络视频监控系统的研究, 对我国监控行业今后的发展有 着重要的意义。

1.2 课题背景
课题来源于电梯网络视屏监控系统, 电梯网络视频监控系统由位于控制柜中 的服务器、 客户端组成, 实现一个具有视频采集压缩及传输功能的可以直接接入 以太网的网络摄像机基本过程是:电梯发生故障时,维护人员在客户端上拨号接 通服务器, 由于服务器实时采集电梯内的视频图像, 并通过以太网传送给客户端,
20

维护人员可以通过监控客户端来实现电梯内的监控。

1.3 论文主要内容和结构安排
针对监控系统中的关键技术进行分析,本文将重要研究一下内容

(1)嵌入式操作系统的实现

在 ARM 微处理器上运行嵌入式操作系统,可以为上层软件的开发提供统 一的接口,方便系统功能的进一步扩展升级。

(2)图像信号的采集与压缩

通过伸向头采集视频数据后,再进行视频图像压缩。选用合适的视频图像 压缩方式对远程监控的效果有很大的影响。MJPEG 视频压缩方式对视频数据信 号采用帧内压缩,而不进行帧间压缩,容易实现,成本较低[6]。

(3)视频数据的网络传输

嵌入式 Linux 系统具有完整的 TCP'/IP 协议,因此,可以采用 socket 编程 建立一个基于 TCP/IP 的嵌入式视频服务器。

全文结构安排如下:

第一章:综合论述了视频监控系统的现状和发展情况。

第二章:提出了本系统的整体结构,介绍了 S3C6410 的体系结构。

第三章:研究嵌入式 Linux 在 ARM 上的裁减和移植。

21

第四章:简单介绍了基于 V4L 的视频采集程序以及图像压缩理论

第五章: 视屏传输的实现。 介绍了建立连接的相关内容并对本系统连接测试。

第六章:对本文的工作进行总结,并提出展望。

2.系统整体结构
2.1 视屏监控系统的结构设计
基于嵌入式技术的监控系统前端采用摄像头采集视频流,然后通过网络传输 到接受者。整体结构如图 2.1.1 所示。

该系统采用基于 ARM11 的 S3C6410X 微处理器, 通过在处理器上运行 Linux 操作系统,构建嵌入式服务器,接受来自摄像头的视频流,再进行压缩编码,再 传送实现监控[7]。

2.2 ARM 处理器简介
ARM(Advanced RISC Machines) ,既可以认为是一个公司的名字,也 ARM 处理 可以认为是对微处理器的通称, 还可以认为是一种技术的名字。

器是一个32位元精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统
22

设计。ARM 处理器具有以下特点[8]: 1、体积小、低功耗、低成本、高性能; 2、支持 Thumb(16 位)/ARM(32 位)双指令集,兼容性好。 3、大量使用寄存器,指令执行速度更快; 4、大多数数据操作都在寄存器中完成; 5、寻址方式灵活简单,执行效率高;

2.3 S3C6410 体系结构
S3C64xx 系列的应用处理器芯片是三星主推的,三星目前推出了 S3C6400 和 S3C6410,都是基于 ARM11架构的,而且硬件管脚兼容,应该说大致的功能 基本相同,比较明显的区别就是 S3C6410带有2D/3D 硬件加速[9]。 S3C6410是 一个强大的应用处理器,该芯片架构如图2.3.1:

23

24

3. 嵌入式系统软件*台
3.1 Linux 操作系统简介
Linux 是一种自由和开放源码的类 Unix 操作系统。目前存在着许多不同的 Linux,但它们都使用了 Linux 内核。Linux 可安装在各种计算机硬件设备中,从 手机、*板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算 机。Linux 是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都 是 Linux 操作系统。严格来讲,Linux 这个词本身只表示 Linux 内核,但实际上 人们已经*惯了用 Linux 来形容整个基于 Linux 内核,并且使用 GNU 工程各种 工具和数据库的操作系统。Linux 得名于计算机业余爱好者 Linus Torvalds。[10]

Linux 可以运行在多种硬件*台上,如具有 x86、680x0、SPARC、Alpha 等处理 器的*台。此外 Linux 还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒 或游戏机上。2001 年 1 月份发布的 Linux 2.4 版内核已经能够完全支持 Intel 64 位芯片架构。同时 Linux 也支持多处理器技术。多个处理器同时工作,使系统性 能大大提高。ARM 技术和 Linux 成功的结合充分满足了各类应用对嵌入式*台 高性能、低功耗和低价格的要求,通过开发环境、开源社区和 ARM 的商业伙伴 的有时为嵌入式开发停工了灵活的选择[11]。

3.2 交叉编译环境的建立
通常嵌入式系统的软件编译和执行是两个不同*台上进行的。 编译时在宿主 机上进行的,执行是在目标机,及嵌入式系统的硬件*台。一般是在宿主机通过 跨*台交叉编译器把源文件编译成目标*台可执行的文件在通过串口、 并口或者 网络下载至目标凭条的 FLASH 或者其他存储介质,然后由目标机来运行这些软 件。 本系统采用基于 ARM11 的 S3C6410,可以使用常用的 ARM 交叉编译器, 要成功构建完整的交叉编译环境,余姚在宿主机上创建一系列的工具,包括 C/C++编译器、汇编器、连接器、嵌入式系统的标准 C 库和 GDB 代码调试器, 成功建立好后便可以用这些工具进行嵌入式系统开发了[16]。

25

3.3 嵌入式 Linux 移植
BootLoader 是在操作系统内核运行之前运行的一段小程序。通过这段小程 序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境 带到一个合适状态, 以便为最终调用操作系统内核准备好正确的环境。在嵌入式 系统中,通常并没有像 BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内嵌 一段短小的启动程序) ,因此整个系统的加*舳挝窬屯耆 BootLoader 来完 成。比如在一个基于 ARM7TDMI core 的嵌入式系统中,系统在上电或复位时通 常都从地址 0x00000000 处开始执行,而在这个地址处安排的通常就是系统的 BootLoader 程序。 专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。 一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次[12]: 1、 引 导 加 载 程 序 。 包 括 固 化 在 固 件 (firmware) 中 的 boot 代 码 ( 可 选 ) , 和 BootLoader 两大部分。 2、 Lniuxn 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3、 文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用 ramdisk 来作为 rootfs。 4、 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间 可能还会包括一个嵌入式应用程序。常用的嵌入式 GUI 有:MicroWindows 和 MiniGUI 等。 引导加载程序是系统加电后运行的第一段软件代码。PC 机中的引导加载程 序由 BIOS(其本质就是一段固件程序)和位于硬盘 MBR 中的 OS BootLoader(比 如,LILO 和 GRUB 等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬 盘 MBR 中的 BootLoader 读到系统的 RAM 中, 然后将控制权交给 OS BootLoader。 BootLoader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转 到内核的入口点去运行,也即开始启动操作系统。 通常,BootLoader 是严

重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一 个通用的 BootLoader 几乎是不可能的。尽管如此,我们仍然可以对 BootLoader 归纳出一些通用的概念来,以指导用户特定的 BootLoader 设计与实现。

26

Boorloader 的实现以来与 CPU 的体系结构, 一般来说启动过程分为两个阶段[13]: 第一阶段以来于 CPU 的体系结构大代码,比如设备初始化代码等。这个阶段完 成的任务如下: (1)硬件设备初始化 (2)为第二阶段准备 RAM 空间 (3)复制 Bootloader 的第二阶段代码到 RAM 空间中 (4)设置好堆栈并跳转到第二阶段的 C 程序入口点 第二阶段则通常用 C 语言来实现,这样可以实现复杂的功能,而且代码会 具有更好的可持续性和移植性。这个阶段的主要任务有: (1)初始化本阶段要使用的硬件设备 (2)检测系统内存映射 (3)将内核映像和根文件系统从 FLASH 读到 RAM 中 (4)为内核设置启动参数

3.4 Linux *台下 mjpg-streamer 移植
本系统选用嵌入式 Linux 作为目标机操作系统, 一方面由于 Linux 是一款免 费的操作系统,能很好的见底成本,同时 Linux 的开发应用现在应经成为热门, 有大量的资源可供学*与使用,并且 Linux 系统具有良好的可移植性和可裁剪 性,能自动支持多任务管理。本系统采用 ARM 开发*台,所以依赖 ARM 硬件 *台的代码都在 arch/arm 下面。根目录下面只需要修改 Makefile 文件,该文件 主要任务是产生 vmLinux 文件盒内核模块,对该文件的修改主要是设置目标* 台和制定交叉编译器[14] 在 /opt/mini6410 目录下创建目录 webcamera 来作为我们本次移植工作的

工作目录,输入以下命令创 建: # mkdir – p /opt/mini6410/webcamera 进入 webcamera 目录下,通过 SVN 下载最新的 mjpg-streamer - mini2440 项目 源代码: # cd /opt/mini6410/webcamera/ # svn checkout http://mjpg -streamer - mini2440.googlecode.com/svn/trunk/

27

mjpg-streamer - mini2440 -read -only

输入以下命令进行 mjpg-streamer - mini2440 -read -only 目录: # cd mjpg-streamer - mini2440 -read -only 根据以下指示修改: 1) 用 vi 编辑 start_uvc_yuv.sh, 将内容: -y"

./mjpg_streamer 修改成 ./mjpg_streamer /dev/video2" 2)

-o "output_http.so -w ./www" -i "input_uvc.so

-o "output_http.so -w ./www" -i "input_uvc.so

-y

-d

用 vi 编辑 Makefile make -C plugins/input_s3c2410 $@

a) 在 clean:处删除

b) 再删除以下内容: input_s3c2410.so: mjpg_streamer.h utils.h make -C plugins/input_s3c2410 all CC=$(CC) cp plugins/input_s3c2410/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 在当前目录下会生成 用。 Mini6410 上的摄像头\ Bin”目录下找到我们编译好的可执行文件,文件名为 mjpg-streamer - mini6410 -bin.tar.gz 。 mjpg-streamer - mini2440 -bin.tar.gz, 将它拷入 SD 卡备

28

4. 基于 V4L 的视频采集程序以及图像压缩理论
4.1 V4L2
Video for Linux two(Video4Linux2)简称 V4L2,是 V4L 的改进版。V4L2是 linux 操作系统下用于采集图片、视频和音频数据的 API 接口,配合适当的视频 采集设备和相应的驱动程序, 可以实现图片、 视频、 音频等的采集。 在远程会议、 可视电话、视频监控系统和嵌入式多媒体终端中都有广泛的应用。 在 Linux 下,所有外设都被看成一种特殊的文件,成为“设备文件”,可以象 访问普通文件一样对其进行读写。一般来说,采用 V4L2驱动的摄像头设备文件 是/dev/v4l/video0。为了通用,可以建立一个到/dev/video0的链接。V4L2支持 两种方式来采集图像:内存映射方式(mmap)和直接读取方式(read)。V4L2在 include/linux/videodev.h 文件中定义了一些重要的数据结构,在采集图像的过程 中,就是通过对这些数据的操作来获得最终的图像数据。Linux 系统 V4L2的能 力可在 Linux 内核编译阶段配置,默认情况下都有此开发接口。V4L2从 Linux 2.5.x 版本的内核中开始出现[15]. V4L2规范中不仅定义了通用 API 元素(Common API Elements),图像的格 式(Image Formats),输入/输出方法(Input/Output),还定义了 Linux 内核驱动处 理视频信息的一系列接口(Interfaces),这些接口主要有: 视频采集接口——Video Capture Interface; 视频输出接口—— Video Output Interface; 视频覆盖/预览接口——Video Overlay Interface; 视频输出覆盖接口——Video Output Overlay Interface; 编解码接口——Codec Interface。

4.2 应用程序通过 V4L2进行视频采集的原理
V4L2支持内存映射方式(mmap)和直接读取方式(read)来采集数据,前者一 般用于连续视频数据的采集, 后者常用于静态图片数据的采集,本文重点讨论内 存映射方式的视频采集。 应用程序通过 V4L2接口采集视频数据分为五个步骤: 首先,打开视频设备文件,进行视频采集的参数初始化,通过 V4L2接口设

29

置视频图像的采集窗口、采集的点阵大小和格式; 其次, 申请若干视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到 用户空间,便于应用程序读取/处理视频数据; 第三,将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集; 第四, 驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲 区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视 频数据; 第五,停止视频采集。

4.2.1 视频采集的参数初始化
在 Linux 下,摄像头硬件已经被映射为设备文件“/dev/video0”,用 open 函 数打开这个设备文件,获得其文件描述符 fd_v4l2,然后对这个文件描述符进行 参数初始化。 (1) 设置视频的采集窗口参数 设置采集窗口就是在摄像头设备的取景范围之内设定一个视频采集区域。 主 要是对结构体 v4l2_crop 赋值,v4l2_crop 由一个 v4l2_buffer_type 枚举类型的 type 和 v4l2_rect 类型的结构体 c 构成, 来描述视频采集窗口的类型和大小。 type 设置为视频采集类型 V4L2_BUF_TYPE_VIDEO_CAPTURE。 是表示采集窗口 c 的大小的结构体,它的成员 Left 和 Top 分别表示视频采集区域的起始横坐标和 纵坐标,width 和 height 分别表示采集图像的宽度和高度。赋值后,用 ioctl 函数 通过这个结构体对 fd_v4l2进行设置。 struct v4l2_crop { enum v4l2_buf_type type; struct v4l2_rect c; }; (2)设置视频点阵格式和点阵大小 主要是对结构体 v4l2_format 进行赋值,它由 type 和联合体 fmt 构成,来描 述视频设备当前行为和数据的格式。 把 type 赋值为视频采集类型 V4L2_BUF_TYPE_VIDEO_CAPTURE,表示 定 义 了 一 个 视 频 采 集 流 类 型 的 buffer 。 fmt 中 , pix 为 表 示 图 形 格 式 的 v4l2_pix_format 型结构体。需要设定 pix 里的几个变量,pixelformat 表示采集

30

格式,设置为 V4L2_PIX_FMT_YUV420;width、height 表示图像的宽度、高度, 以 字 节 为 单 位 ;sizeimage 表 示 图 像 所 占 的 存 储 空 间 大 小 , 以 字 节 为 单 位;bytesperline 表示每一行的字节数。赋值后,用 ioctl 函数通过这个结构体对 fd_ v4l2进行设置。 struct v4l2_format { enum v4l2_buf_type type; union { struct v4l2_pix_format pix; // V4L2_BUF_TYPE_VIDEO_CAPTURE struct v4l2_window win; // V4L2_BUF_TYPE_VIDEO_OVERLAY __u8 raw_data[200]; // user-defined } fmt; }; (3)设置视频采集的帧率 结构体 v4l2_streamparm 来描述视频流的属性,它由 type 和联合体 parm 构成。type 同上,由于选的是 V4L2_BUF_TYPE_VIDEO_CAPTURE,所以仅 需设定 parm 中的 v412_capture 型结构体 capture 即可。在其中, v4l2_fract 型结构体 timeperframe 表示*均每一帧所占的时间,由其元素 numerator 和 denominator 共同决定, 该时长为 numerator/denominator;而 capturemode 则表 示采集模式,采集高质量图片值为1,一般设为0。赋值之后,用 ioctl 函数通过 这个结构体对 fd_ v4l2进行设置。 struct v4l2_streamparm { enum v4l2_buf_type type; union { struct v4l2_captureparm capture; struct v4l2_outputparm output; __u8 raw_data[200]; /* user-defined */ } parm; };

4.2.2 申请并设置视频采集的帧缓冲区
31

前期初始化完成后, 只是解决了一帧视频数据的格式和大小问题,而连续视 频帧数据的采集需要用帧缓冲区队列的方式来解决, 即要通过驱动程序在内存中 申请几个帧缓冲区来存放视频数据。 应用程序通过 API 接口提供的方法(VIDIOC_REQBUFS)申请若干个视频数 据的帧缓冲区,申请帧缓冲区数量一般不低于3个,每个帧缓冲区存放一帧视频 数据,这些帧缓冲区在内核空间。 应用程序通过 API 接口提供的查询方法(VIDIOC_QUERYBUF)查询到帧缓 冲区在内核空间的长度和偏移量地址。 应用程序再通过内存映射方法(mmap),将申请到的内核空间帧缓冲区的地 址映射到用户空间地址,这样就可以直接处理帧缓冲区的数据。 (1)将帧缓冲区在视频输入队列排队,并启动视频采集 在驱动程序处理视频的过程中,定义了两个队列:视频采集输入队列 (incoming queues)和视频采集输出队列(outgoing queues),前者是等待驱动存 放视频数据的队列,后者是驱动程序已经放入了视频数据的队列。如图2所示。 应用程序需要将上述帧缓冲区在视频采集输入队列排队(VIDIOC_QBUF), 然后可启动视频采集。 (2)循环往复,采集连续的视频数据 启动视频采集后, 驱动程序开始采集一帧数据,把采集的数据放入视频采集 输入队列的第一个帧缓冲区, 一帧数据采集完成,也就是第一个帧缓冲区存满一 帧数据后, 驱动程序将该帧缓冲区移至视频采集输出队列,等待应用程序从输出 队列取出。驱动程序接下来采集下一帧数据,放入第二个帧缓冲区,同样帧缓冲 区存满下一帧数据后,被放入视频采集输出队列。 应用程序从视频采集输出队列中取出含有视频数据的帧缓冲区, 处理帧缓冲 区中的视频数据,如存储或压缩。 最后,应用程序将处理完数据的帧缓冲区重新放入视频采集输入队列,这样 可以循环采集,如图4.2.1所示[16]:

32

图4.2.1 视频采集输入和输出队列示意图 (3)最终停止采集,释放内存帧缓冲区

4.3 用 V4L2采集视频的程序流程和相关 API
V4L2采集视频操作基本按照打开视频设备、设置视频格式、启动视频采集, 循环处理视频数据、停止视频采集、关闭视频设备,具体操作通过 ioctl 等函数 来实现。一般操作流程如下: (1)打开视频设备文件。int fd=open("/dev/video0",O_RDWR); (2)查询视频设备的能力,比如是否具有视频输入,或者音频输入输出等。 ioctl(fd_v4l, VIDIOC_QUERYCAP, &cap) (3)设置视频采集的参数 设置视频的制式, 制式包括 PAL/NTSC, 使用 ioctl(fd_v4l, VIDIOC_S_STD, &std_id) 设置视频图像的采集窗口的大小,使用 ioctl(fd_v4l, VIDIOC_S_CROP, &crop) 设置视频帧格式,包括帧的点阵格式,宽度和高度等,使用 ioctl(fd_v4l, VIDIOC_S_FMT, &fmt) 设置视频的帧率,使用 ioctl(fd_v4l, VIDIOC_S_PARM, &parm) 设置视频的旋转方式,使用 ioctl(fd_v4l, VIDIOC_S_CTRL, &ctrl) (4)向驱动申请视频流数据的帧缓冲区 请 求 / 申 请 若 干 个 帧 缓 冲 区 , 一 般 为 不 少 于 3 个 , 使 用 ioctl(fd_v4l, VIDIOC_REQBUFS, &req) 查询帧缓冲区在内核空间中的长度和偏移量 VIDIOC_QUERYBUF, &buf)
33

ioctl(fd_v4l,

(5)应用程序通过内存映射,将帧缓冲区的地址映射到用户空间,这样就可 以直接操作采集到的帧了,而不必去复制。 buffers[i].start = mmap (NULL, buffers[i].length, PROT_READ | PROT_WRITE, MAP_SHARED, fd_v4l, buffers[i].offset); (6)将申请到的帧缓冲全部放入视频采集输出队列,以便存放采集的数据。 ioctl (fd_v4l, VIDIOC_QBUF, &buf) (7)开始视频流数据的采集。 ioctl (fd_v4l, VIDIOC_STREAMON, &type) (8) 驱动将采集到的一帧视频数据存入输入队列第一个帧缓冲区,存完后将 该帧缓冲区移至视频采集输出队列。 (9)应用程序从视频采集输出队列中取出已含有采集数据的帧缓冲区。ioctl (fd_v4l, VIDIOC_DQBUF, &buf) ,应用程序处理该帧缓冲区的原始视频数据。 (10)处理完后, 应用程序的将该帧缓冲区重新排入输入队列,这样便可以循环 采集数据。ioctl (fd_v4l, VIDIOC_QBUF, &buf) 重复上述步骤8到10,直到停止采集数据。 (11)停止视频的采集。ioctl (fd_v4l, VIDIOC_STREAMOFF, &type) (12)释放申请的视频帧缓冲区 unmap,关闭视频设备文件 close(fd_v4l)。 以上的程序流程, 包含了视频设备采集连续的视频数据的逻辑关系。而在实 际运用中,往往还要加入对视频数据进行处理(如压缩编码)的工作,否则,视频 流数据量相当大,需要很大的存储空间和传输带宽。 上述过程中, 每一个帧缓冲区都有一个对应的状态标志变量,其中每一个比 特代表一个状态 V4L2_BUF_FLAG_UNMAPPED 0B0000 V4L2_BUF_FLAG_MAPPED 0B0001 V4L2_BUF_FLAG_ENQUEUED 0B0010 V4L2_BUF_FLAG_DONE 0B0100 缓冲区的状态转化如图2.所示[17]:

34

图4.3.1 缓冲区的状态标志转化图

5.视屏传输的实现
要实现现场监控,出了完成视屏采集的过程,还需要吧视频图像数据通过 网络传输出去, 因此需要在完成视频采集的基础上建立网络服务器,实现客户端 和服务器之间的数据通信。

5.1 TCP/IP 协议简介
Transmission Control Protocol/Internet Protocol 的简写,中译名为传输 控制协议/因特网互联协议,又名网络通信协议,是 Internet 最基本的协议、 Internet 国际互联网络的基础,由网络层的 IP 协议和传输层的 TCP 协议组成。 TCP/IP 定义了电子设备如何连入因特网, 以及数据如何在它们之间传输的标准。 协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己 的需求。通俗而言:TCP 负责发现传输的问题,一有问题就发出信号,要求重新 传输,直到所有数据安全正确地传输到目的地。而 IP 是给因特网的每一台电脑 规定一个地址。 TCP/IP 结构对应 OSI 结构 TCP/IP 应用层 应用层 表示层 会话层 主机到主机层(TCP) (又称传输层) 传输层 OSI

35

网络层(IP) 网络接口层(又称链 路层) 网络接口层

网络层 数据链路层 物理层

物理层是定义物理介质的各种特性: 1、机械特性。 2、电子特性。 3、功能特性。 4、规程特性。

5.2 socket 网络编程
socket 的英文原义是“孔”或“插座”。作为4BDS UNIX 的进程通信机制,取后一 种意思。通常也称作"套接字",用于描述 IP 地址和端口,是一个通信链的句柄。 在 Internet 上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都 打开一个 Socket, 并绑定到一个端口上, 不同的端口对应于不同的服务。 Socket 正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每 个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的 则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同 的服务。 根据连接启动的方式以及本地套接字要连接的目标, 套接字之间的连接过程 可以分为三个步骤:服务器监听,客户端请求,连接确认。 服务器监听:

是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实 时监控网络状态。 客户端请求:是指由客户端的套接字提出连接请求,要

连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接 的服务器的套接字, 指出服务器端套接字的地址和端口号,然后就向服务器端套 接字提出连接请求。 连接确认:是指当服务器端套接字监听到或者说接收

到客户端套接字的连接请求, 它就响应客户端套接字的请求, 建立一个新的线程, 把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好 了。 而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请 求。常用的 Socket 类型 有 两 种 : 流 式 Socket ( SOCK_STREAM ) 和 数 据 报 式 Socket
36

(SOCK_DGRAM) 。流式是一种面向连接的 Socket,针对于面向连接的 TCP 服 务应用;数据报式 Socket 是一种无连接的 Socket,对应于无连接的 UDP 服务应 用。Socket 为了建立 Socket,程序可以调用 Socket 函数,该函数返回一个类似 于文件描述符的句柄。 socket 函数原型为:int socket(int domain,int type,int protocol);domain 指明所使用的协议族,通常为 PF_INET,(其与 addrinfo 里的 AF_INET 在现在看来是相同的。 只是历史上人们曾构想将 AF (地址家族 address family)与 PF(protocol family 协议家族)分开,但实际上这种区分并未真正推广, 所以现在 AF_INET 和 PF_INET 具有相同的意义。其中 AF_INET 是基于 IPv4而 PF_INET 基于 IPv6) 表示互联网协议族 (TCP/IP 协议族) type 参数指定 socket ; 的类型:SOCK_STREAM 或 SOCK_DGRAM,Socket 接口还定义了原始 Socket (SOCK_RAW) ,允许程序使用低层协议;protocol 通常赋值0。Socket()调用 返回一个整型 socket 描述符, 你可以在后面的调用使用它。 Socket 描述符是一个 指向内部数据结构的指针,它指向描述符表入口。调用 Socket 函数时,socket 执行体将建立一个 Socket, 实际上"建立一个 Socket"意味着为一个 Socket 数据结 构分配存储空间。Socket 执行体为你管理描述符表。两个网络程序之间的一个网 络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地 址和远端协议端口。Socket 数据结构中包含这五种信息。socket 在测量软件中的 使用也很广泛。

5.3 图像传输的软件实现
要在 Linux 上实现通过 WEB 远程浏览和控制摄像头, 可以使用一个开源软 件 mjpg- streamer 来实现, 而很早之前国外就已经有爱好者将 mjpg-streamer 移植到了 mini2440 并运 行,并创建一个开源项目名为 mjpg-streamer - mini2440 在开发板的终端上输入以下命令启动 mjpeg-stream : @# cd /mjpg -streamer

@# ./start_uvc_yuv.sh 此时可以在终端看到如下的输出信息,这说明已经成功启动 mjpeg-stream 程序: MJPG Streamer Version.: 2.0
37

i: Using V4L2 device.: /dev/video2 i: Desired Resolution: 640 x 480 i: Frames Per Second.: 5 i: Format............: YUYV i: JPEG Quality......: 80 o: www-folder -path...: ./www/ o: HTTP TCP port.....: 8080 o: username:password.: disabled o: commands..........: enabled 在电脑上浏览摄像头上的图像,在电脑上,打开网页浏览器,在浏览器的 地址栏中输入:http://192.168.1.230:8080/stream_simple.html 即

可 看 到 摄 像 头 的 动 态 画 面 了 , 如 下 图 5.3.1-5.3.2 所 示 :

图5.3.1

38

图5.3.2

图 5.3.3

39





本文分析了当前嵌入式系统技术应用于网络视频监控系统, 设计了一种基于 嵌入式 Linux 和 S3C6410 的低成本的网络视频采集传输系统方案,主要完成了 一下工作: 通过大量实验熟悉了嵌入式 ARM *台下的裁减和移植;USB 摄像头在 Linux 系统下的驱动程序开发; 基于 V4L 的视频采集程序的设计, 以及图像压缩; 服务器程序和客户端实现视频数据的网络传输。 由于时间紧迫, 本系统软硬件设计还存在很多方面的不足之处,需要进一步 完善,因此本人希望在未来的工作中对一下方面加以改进:

1)使用专门的视频解码芯片对图像数据进行压缩,采用更适合网络传输的 视频压缩格式 MPEG-4 图像压缩算法已达到更好的效果。

2)在 PC 机上开发一套完整的客户端软件,以提高系统的实用性。

3)将客户端移植到 Windows 或者以 Web 方式来访问服务器以满足更多用 户的需求。

40

参考文献
[1]文峻,网络视频的零距离沟通[N],市场报,2002.9(13)

[2]刘富强,数字视频监控系统开发及应用[M],北京:机械工业出版社,2003

[3]李小*等,多媒体通信技术[M],北京:北京航空航天大学出版社,2004

[4]陈俊宏,嵌入式系统原理与务实[M],中国铁道出版社,2004

[5]吴明晖,基于 ARM 的嵌入式系统开发与应用[M],人民邮电出版社,2004

[6]S3C6410 32-bit RISC MICROPROCESSOR USERS MANUAL[J].Samsung Electronics Semiconductors ,Revision1.2

[7]杨凯,基于 S3C6410 的多媒体数字终端的研究与实现[M],清华大学出版社,2004

[8]杜春雷,ARM 体系结构的与编程[M],清华大学出版社,2003

[9]朱珍民,隋雪青,嵌入式实时操作系统及应用开发[M],北京邮电大学出版社,2006

[10]Craig Hollabaugh 嵌入式 Linux 电子工业出版社[M],2003

[11]王学龙,嵌入式 Linux 系统设计与应用[M],清华大学出版社

[12]于明,范书瑞等,ARM9 嵌入式系统设计与开发教程[J],电子工业出版社,2006

[13]马忠梅,ARM&Linux 嵌入式系统教程[M],北京航空航天大学出版社,2004

[14]李巨光,ARM 应用系统开发详解[C],清华大学出版社,2003

[15]赵炯,Linux 内核完全注释[M],机械工业出版社,2005

[16]李善*,Linux 内核分析及编程[M],电子工业出版社,2005

41

[17]孙天泽等,嵌入式设计及 Linux 驱动开发指南一基于 ARM9 处理器[M],电子工业 出版社,2005

42





首先,非常感谢我的导师张洪涛老师,在他的悉心指导下,我们的论文得以 顺利完成,在我完成毕业设计这段时间,张老师给我我们莫大的帮助与鼓舞,他 只是渊博,思维缜密,工作踏实严谨,潜移默化地熏陶着我们,鞭策着我们。在 此, 向张老师表示由衷的感谢和崇高的敬意,今后都会讲老师的谆谆教诲牢记于 心! 同时,敢接所有热情帮助过我,支持过我的所有老师同学,他们在学*和生 活上给了我莫大的帮助,让我感受到了集体的温暖与力量!

43




友情链接: hackchn文档网 营销文档网 爱linux网 爱行业网 时尚网