《基于嵌入式linux的图像监控系统--大学毕业论文.doc》由会员分享,可在线阅读,更多相关《基于嵌入式linux的图像监控系统--大学毕业论文.doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、莫炳全 基于嵌入式Linux的图像监控系统莫 炳 全基于嵌入式Linux的图像监控系统曾繁政讲 师1311767666709206181012007级通信工程物理与电子信息工程系20112732010275 独 创 性 声 明贺州学院本科毕业论文独 创 性 声 明本人郑重声明:所呈交的毕业论文(设计)是本人在指导老师指导下取得的研究成果。除了文中特别加以注释和致谢的地方外,论文(设计)中不包含其他人已经发表或撰写的研究成果。与本研究成果相关的所有人所做出的任何贡献均已在论文(设计)中作了明确的说明并表示了谢意。签名: 年月日授权声明本人完全理解贺州学院有关保留、使用本科生毕业论文(设计)的规定
2、,即:学院有权保留并向国家有关部门或机构送交毕业论文(设计)的复印件和磁盘,允许毕业论文(设计)被查阅和借阅。本人授权贺州学院可以将毕业论文(设计)的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编论文(设计)。本人论文(设计)中有原创性数据需要保密的部分为(无):签 名: 年月日指导教师签名: 年月日I基于嵌入式Linux的图像监控系统摘 要图像监控系统是一门集计算机技术、通信技术和多媒体技术于一体的综合系统。它以直观、方便、信息内容丰富等特性被广泛地应用于各个方面。随着嵌入式技术和图像处理技术的发展,使得监控图像和视频的网络实时传输和控制成为现实。本系统是
3、基于嵌入式Linux的图像监控系统。本系统采用Linux系统作为服务器端平台,以ARM9内核的S3C2440作为服务器平台处理器,以USB摄像头作为图像采集设备,用开源软件mjpg-streamer对图像视屏数据流进行MJPG压缩处理,并且通过以太网传输。着重于实现一个易搭建,易配置,通用性好,能用于临时性监控的网络图像视频监控服务器,可让客户机通过浏览器实时监控远程目标摄像头,并实现远程共享摄像头的图像监控系统。论文首先简要介绍了图像监控系统的国内外现状和本系统的课题背景和意义所在,分析了以s3c2440微处理器为核心的图像监控系统的硬件方案的设计,然后详细描述基于linux系统平台的构建,
4、再者重点分析应用软件的程序和设计流程,并深入分析图像采集过程和网络传输图片视频的技术以及算法,以求达到处理监控图像视屏的作用。关鍵词:图像监控;linux系统;S3c2440;mjpg-streamer;网络远程监控。ABSTRACTImage monitoring system is an integrated system combined with computer technology, communtication technology and multimedia technology. It takes intuitive, easy and abundant informati
5、on and other features to be widely used in various aspects. With the development of embedded technology and image processing technology ,making network monitoring real-time image and video transmission and control become a reality.The system is based on embedded Linux image monitoring system. The sy
6、stem uses the Linux system as a server-side platform, and S3C2440 ARM9 core processor as a server platform , using USB camera as image acquisition devices, using open source software Mjpg-streamer, to deal with the image screen MJPG compressed data stream ,and transmitted via Ethernet.Focused on del
7、ivering an easy to build, easy configuration, common good, can be used for temporary monitoring network image video surveillance server,Allowing clients real-time monitor by a browser remote target camera, and share remote video surveillance camera system.The paper introduct briefly Firstly and Imag
8、e Monitoring System Current Status and the system background and significance of the subject, analyzed to s3c2440 microprocessor core image monitoring system hardware in the design.Then detailed description of the construction based on linux platform, also analysis application software key procedure
9、s and processes, and in-depth analysis algorithm for image processing and network transmission technology in order to achieve image screen deal with the role of monitor screen image.Key words:Image monitoring;linux system;S3c2440;mjpg-streamer;Remote Monitoring Network.莫炳全 基于嵌入式Linux的图像监控系统目 录摘 要IAB
10、STRACTII1 绪 论11.1 课题背景和意义11.2 监控系统国内外现状11.2.1 传统模拟闭路视监控系统(CCTV)11.2.2 基于“PC多媒体卡”数字视频监控系统(DVR)21.2.3 基于IP网络视频监控系统(IPVS)21.3 本文的研究内容和主要工作31.3.1 本文的主要工作31.3.2 本文的拟解决的主要问题31.3.3 本系统方案的优点42 系统设计和硬件平台的建立42.1 系统总体设计42.2 硬件选型52.2.1 系统硬件整体设计52.2.2 硬件模块选型52.3 硬件接口设计52.3.1 SDRAM和FLASH接口设计52.3.2 网络模块接口设计62.3.3
11、USB模块接口设计72.3.4 电源模块和RS232模块接口设计72.4 本章小结83 嵌入式LINUX系统平台的搭建83.1交叉编译环境的建立和Bootloader的移植83.1.1 交叉编译环境的建立83.1.2 Bootloader的移植83.2 linux-2.6.32.2内核的移植93.3 文件系统的制作113.4 本章小结124 系统设备的驱动程序的编写和移植124.1 系统软件设备架构134.2 网络驱动程序144.2.1 网络设备驱动程序的体系结构144.2.2 DM9000发送和接收数据包过程154.3 USB摄像头的驱动154.3.1 主机侧USB驱动总体结构164.3.2
12、 urb处理流程164.4 本章小结175 系统的图像采集和传输175.1 图像采集的实现175.1.1 图像采集的过程175.1.2 系统获得采集的图像数据的关键函数185.2 监控系统的网络传输的实现195.2.1 系统采用基于TCP/IP协议来实现网络传输195.2.2 图像采集后的传输算法举例205.3 本章小结216 系统测试217 总结和展望22参考文献23附 录245贺州学院本科毕业论文1 绪 论1.1 课题背景和意义嵌入式技术是计算机技术、半导体技术和微电子技术等多种先进技术的融合,在后PC时代,网络技术和通信技术的飞速发展,使得嵌入式技术也得到了飞速的发展和广泛应用。随着计算
13、机应用的不断深入以及芯片技术和计算机技术的发展,嵌入式系统已经发展到以芯片技术和Internet技术为标志的嵌入式片上系统,即嵌入式技术与Internet技术的结合正推动嵌入式技术的快速发展。随着嵌入式技术的快速发展,产生了基于嵌入式系统的远程图像视频监控系统,为信息产业,管理行业、监控行业提供了快捷、高效、廉价的服务。丰富的网络功能为我们提供了实现这些应用的可能性,各种视频传输编码技术的发展使我们的视频传输效率越来越高,未来的监控可以通过移动通信设备手机、PDA随时随地随心所欲的对交通、公共建筑、私人住宅等进行远程监控。但是就目前状况而言,虽然拥有了搭建这些应用服务的基本技术支持,但是目前国
14、内网络视频还存在应用不够广泛,形式单一,功能简单,应用软件普及率低等特点。还有以下几个方面成为阻碍:一是服务商不提供相应支持,应为服务器负荷大,成本居高不下,回报不乐观;二是可用软件不多,有效搭建服务器的难度大方法少;三是系统扩展性差,不能支持不同型号的摄像头。再加上在很多实际应用中并不一定需要进行实时活动的图像传输,只要在相隔一定时间内传输一幅静止的图片或者有意义有必要的时刻传输静止图像在来供监控人员分析即可。因此本文将设计一种基于嵌入式Linux的图像监控系统,即在嵌入式设备端上完成图像和视频的采集、并通过网络传输,能用于临时性监控的网络图像视频监控服务器,可让客户机通过浏览器实时监控远程
15、目标摄像头,适用各种USB接口的摄像头,并实现远程共享摄像头的图像监控系统。1.2 监控系统国内外现状监控系统发展从技术角度出发大概划分为三个阶段:第一代模拟视频监控系统(CCTV),到第二代基于“PC多媒体卡”数字视频监控系统(DVR),到第三代完全基于IP网络视频监控系统(IPVS) 1。1.2.1 传统模拟闭路视监控系统(CCTV)传统模拟闭路视监控系统,依赖摄像机、缆、录像机和监视器等专用设备。例如,摄像机通过专用同轴缆输出视频信号2。缆连接到专用模拟视频设备,系统中的信号采集、传输、存储均为模拟形式。虽然具有良好的实时性和图像质量。但是有以下几个局限性:(1)有限监控能力,只支持本地
16、监控,受到模拟视频缆传输长度和缆放大器限制。因此模拟监控只适合小范围的监控使用,使用的范围在一两千米范围内。 (2)录像负载重,用户必须从录像机中取出或更换新录像带保存,且录像带易于丢失、被盗或无意中被擦除。录像质量随拷贝数量增加而降低。(3)系统扩展性差,对于已经建好的监控系统,增加或者修改新的监控点,整个系统都需要进行改动。(4)形成不了有效的联动报警,由于模拟监控系统的各部分是独立动作,彼此间的协议和动作难以实现联动。1.2.2 基于“PC多媒体卡”数字视频监控系统(DVR)现今用的较多的“模拟-数字”监控系统(DVR):以数字硬盘录像机DVR为核心半模拟-半数字方案,从摄像机到DVR
17、仍采用同轴缆输出视频信号,通过DVR同时支持录像和回放,并可支持有限IP网络访问3。这类监控系统功能较强,便于现场操作。但由于DVR产品五花八门,没有标准,所以这一代系统是非标准封闭系统,DVR系统仍存在大量局限: (1)复杂布线,“模拟-数字”方案仍需要在每个摄像机上安装单独视频缆,导致布线复杂性。 (2)有限可扩展性,DVR典型限制是一次最多只能扩展16个摄像机。 (3)功耗和成本较高,视频前端较为复杂,并且需要独立服务器、独立管理软件和多人值守来控制多个DVR或监控点。 (4)有限远程监视/控制能力,您不能从任意客户机访问任意摄像机。您只能通过DVR间接访问摄像机。 1.2.3 基于IP
18、网络视频监控系统(IPVS)基于IP网络视频监控系统,这是未来的监控系统潮流。与前面两种方案相比存在显著区别。该系统优势是摄像机内置Web服务器,采用嵌入式实时操作系统,并直接提供以太网端口。这些摄像机生成JPEG或MPEG4 数据文件,可供任何经授权客户机从网络中任何位置访问、监视、记录并打印,而不是生成连续模拟视频信号形式图像。网络上用户可以直接使用浏览器观看Web服务器上的图像信息,还可以通过授权的方式控制远程目标摄像头。基于IP网络视频监控系统具有视频编码处理、网络传输通信、支持远程网络控制,因此使得监控系统上升了一个新的台阶。基于IP网络视频监控系统克服了上述两种监控系统的局限性,拥
19、有下述优点:(1)不受距离限制,利用网络传输数据,距离不受限制,网络覆盖的地方即可。信号不易受干扰,提高了图像的质量和稳定性。(2)易于升级与全面可扩展性,能够利用现有局域网基础设施,轻松添加更多摄像机,网络带宽可复用,避免重新布线。(3)全面远程监视,任何经授权客户机都可直接访问任意摄像机。(4)成本和功耗低,服务器采用低廉的嵌入式处理器,客户端只需通过浏览器即可进行监控。目前,国内外的监控系统技术正朝着网络数字化方向快速发展。由于在集成电路、图像压缩技术及数字通信的发展,欧美国家在这行业领域中占有比较明显的领先优势。例如,瑞典的Axis,澳大利亚的Digiguard。他们的监控系统智能程度
20、很高,医疗精密监控,车牌及特征识别,运动轨迹判断,人脸体态识别等。国外的这些产品功能强大,但价格昂贵,在我国普遍推广不开。而国内在网络视频监控方面相对落后,在高端摄像机等核心技术较薄弱,科技含量较高的产品以进口为主,国内代表性的公司中兴,丰林等研发的系统可靠性差,网络传输实时性差。国内图像视频监控市场充满了机会,2010年,国内图像视频监控市场的总体市场规模为110亿美金,年增长率为31%,其中基于IP网络视频监控系统的占有率越来越大,越来越受用户青睐4。1.3 本文的研究内容和主要工作1.3.1 本文的主要工作本文在设计基于嵌入式Linux的图像监控系统过程中,主要做了以下几个工作:(1)交
21、叉编译环境的建立和Bootloader的移植。 (2)linux内核的移植。 (3)linux网络设备驱动程序的编写和USB驱动程序的移植。 (4)实现USB摄像头的采集图像程序的编写。 (5)实现TCP/IP网络协议传输模块的移植。(6)通过分析采集到的图片进行环境监控。1.3.2 本文的拟解决的主要问题(1)通用USB摄像头的驱动程序的编写和移植。(2)实现网络传输和远程控制和MJPG协议算法传输。(3)通过分析采集到的图片进行环境监控。1.3.3 本系统方案的优点 本文设计的基于嵌入式Linux的图像监控系统与其他远程监控系统相比,有以下几个优点:(1)搭建系统难度小,不需要专门的大型服
22、务器,只需使用嵌入式微处理器ARM9组成的轻量级流服务器。(2)扩展性强,可适用市场上的通用USB摄像头,可适用通用的浏览器实现网络传输和远程控制。(3)通过分析采集到的视频进行图片环境监控,只需进行有意义的图片的分析,不需要存储大量视频信息。(4)成本和功耗低,采用开源的linux系统,使用功耗极低但性能优越的ARM9处理器,使系统的成本和功耗降到了最低。2 系统设计和硬件平台的建立 2.1 系统总体设计错误!链接无效。图2-1系统总体设计整个系统总体设计如图2-1所示,整体分为两大部分:系统前台和系统后台。系统前台包括用户、客户端主机(浏览器)、服务器网页这三部分;剩下的都划分为系统后台。
23、服务器以Linux内核2.6.32.2作为视频服务器核心,内有三个主要服务组件,其中APACHE服务器负责与用户通过HTTP通信,用户要使用浏览器处理视频,只需要登录浏览器便可,在这里最好是使用FIRFOX,因为它对HTTP视频流支持最好。MJPG-STREAMER视频服务器主要负责架设服务,进行配置(端口,各种显示参数等),而摄像头的识别则由相应的驱动程序完成。2.2 硬件选型2.2.1 系统硬件整体设计本系统选择三星公司的S3C2440作为核心处理器,负责整个系统的运行,采用USB摄像头实现数据采集,通过网络进行图像的实时传输,系统硬件整体结构如图2-2所示。错误!链接无效。图2-2 系统
24、硬件整体结构图2.2.2 硬件模块选型微处理器采用三星公司的S3C2440,S3C2440是一款内部集成了ARM公司ARM920T内核的16/32位RISC嵌入式处理器,主要面向高性能、低功耗的应用。带有内存管理单元(MMU),采用0.13微米工艺和AMBA新型总线结构。为了处理图像数据,CPU工作频率可达400MHz。有完善的网络功能。2.3 硬件接口设计2.3.1 SDRAM和FLASH接口设计(1) SDRAM:系统外接了两片64M bytes的SDRAM芯片(型号为HY57V561620FTP),一般称之为内存,并接在一起形成32bit的总线宽度,其物理启始地址为0x30000000。
25、其接口电路如图2-3所示。图2-3 SDRAM接口图(2)FLASH:系统采用NAND Flash,型号为K9F1G08,大小为128M。NAND Flash不具有地址线,它有专门的控制接口与CPU相连,数据总线为8-bit。其接口电路如图2-4所示。图2-4 NAND Flash接口图2.3.2 网络模块接口设计系统采用DM9000网卡芯片,它可以自适应10/100M网络,使用内部包含耦合线圈的RJ45连接头,不必另接网络变压器,使用普通网线连接即可。100M网络接口如图2-5所示。图2-5 DM9000的100M网络接口图2.3.3 USB模块接口设计系统采用USB Host接口,使用US
26、B2.0协议,与普通USB接口一致。USB Host接口如图2-6所示。图2-6 USB Host接口图2.3.4 电源模块和RS232模块接口设计(1)电源模块:本系统电源系统设计简单,直接使用外接5V电源,分别通过降压芯片LM1117-33、LM1117-1.8、MAX8860EUA18产生整个系统所需的三种电压:3.3V、1.8V、1.25V。(2) RS232模块:直接从CPU引出后,使用RS232进行电平转换,使用直连线与PC机相互通信,用于下载调试程序使用。2.4 本章小结在本章中,首先从总体上架构了整个监控系统的框架图,并针对系统硬件做出了整体设计以及各个外围模块之间的联系,最后
27、一一介绍了系统外围六个模块的接口电路设计。3 嵌入式LINUX系统平台的搭建3.1交叉编译环境的建立和Bootloader的移植3.1.1 交叉编译环境的建立由于嵌入式系统不是通用的计算机系统,硬件资源受到很大的限制,因此运行于嵌入式系统裁剪和定制之前,需要在强大的宿主机上建立一个交叉编译环境,用于目标机5。本系统采用的交叉编译环境为arm-linux-gcc-4.4.3。下载源代码并解压到根目录下,运行gedit /root/.bashrc,然后把编译器路径加入系统环境变量中。3.1.2 Bootloader的移植BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序
28、,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。由于BootLoader 的实现依赖于 CPU 的体系结构,因此Bootloader在stage1和stage2 需要做的工作如下。(1)stage1通常包括以下步骤(以执行的先后顺序): 硬件设备初始化。 为加载 Boot Loader 的 stage2 准备 RAM 空间。 拷贝 Boot Loader 的 stage2 到 RAM 空间中。 设置好堆栈。 跳转到 stage2 的 C 入口点。 (2)stage2通常包括以下步骤(以执行的先后顺序): 初始化本
29、阶段要使用到的硬件设备。 检测系统内存映射(memory map)。 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。 为内核设置启动参数。 调用内核。 本系统采用的BIOS是基于三星公司原来的bootloder修改而来的Supervivi。3.2 linux-2.6.32.2内核的移植本系统采用linux-2.6.32.2内核。本系统的核心电路和SMDK2440基本一样,而Linux-2.6.32.2内核对SMDK2440的支持已经十分丰富,所以只需根据我们的目标平台做细微的差别调整即可。以下是移植内核的步骤(1)获取linux内核源代码,解压内核源代码。(2)
30、指定交叉编译变量:修改总目录下的Makefile原来为:export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= $( SUBARCH) CROSS_COMPILE ?=修改为:export KBUILD_BUILDHOST := $(SUBARCH) ARCH ?= arm CROSS_COMPILE ?= arm-linux-其中,ARCH是指目标平台为arm, CROSS_COMPILE是指交叉编译器。然后执行:#make s3c2410_defconfig#make (3)克隆建立自己的目标平台:修改机器码:进入linux-2.6.32.2/arch/
31、arm/tools/mach_types文件中把机器码修改为1999。修改时钟源频率:进入linux-2.6.32.2/arch/arm/mach-s3c2440/ mach-mini2440.c文件中的原SMDK2440目标版上的晶振从原来的16.9344MHz改为12MHz。修改Nand Flash分区:# gedit arch/arm/plat-s3c24xx/common-smdk.cstatic struct mtd_partition smdk_default_nand_part = 0 = .name = supervivi, ;这里是bootloder所在分区.size = 0
32、x00040000,.offset = 0,1 = .name = param, ;这里是supervivi参数区.size = 0x00040000,.offset = 0x00020000,2 = .name = Kernel,.offset = 0x00060000, ;内核所在分区,大小为5M.size = 0x00500000,3 = .name = root, ;文件系统分区,本系统用来存放yaffs2文件系统内容.offset = 0x00560000,.size = 1024*1024*1024,4 = .name = nand, ;此区域代表整片nand flash,做预留使
33、用.offset = 0x00000000,.size = 1024*1024*1024,;从SMDK2440到MINI2440:使用批处理命令修改mach-mini2440.c中的字样为mini2440。编译测试:在根目录下执行: #make mini2440_defconfig #make zImage ;编译内核,最后生成zImage。(4)配置内核:针对配置内核做主要的作为介绍。执行#make menuconfig General setup - ;配置目标版体系 S3C2440 Machines - MINI2440 development board Device Drivers
34、- ;配置DM9000网卡驱动 Network device support - Ethernet(10 or 100Mbit) - DM9000 Device Drivers - ;配置USB摄像头 Multimedia devices - Multimedia support - Video capture adapters (NEW)- V4L USB devices (NEW) - GSPCA based webcams - 选择所有的摄像头类型 -把所有结构设备添加到目标平台设备集中:Static struct platform_device *mini2440_devices_in
35、itdata = &s3c_device_usb, &s3c_device_rtc, &s3c_device_wdt, &s3c_device_i2c0, &s3c_device_iis, &mini2440_device_eth, &s3c_device_nand,(5)配置编译新内核:首先以ROOT身份进入系统,然后对它进行编译,得到内核映像文件zImage。3.3 文件系统的制作嵌入式linux系统可使用的文件系统有多种,比如CRAMFS、JFFS2、YAFFS2等6。YAFFS2类似于JFFS和JFFS2的专为flash设计的嵌入式文件系统。虽然功能少,但速度快,占用内存少,并自带na
36、nd flash芯片驱动 。其移植过程为:(1)解压YAFFS2。(2)建立YAFFS2目录,复制解压后的代码到目录下。(3)修改fs/Kconfig,添加:source “fs/yaffs2/kconfig”。(4)修改fs/Makefile,添加:obj-$(CONFIG_YAFFS2_FS) +=yaffs2/。(5)配置内核时选中MTD支持和YAFFS2支持。(6)编译内核并将下载到开发板的flash。3.4 本章小结在本章中,简单叙述了系统基于嵌入式linux系统平台的搭建,包括交叉编译环境的建立和Bootloader的移植,还有以Linux内核2.6.32.2作为视频服务器核心的配
37、置和移植,最后介绍了根文件系统的制作流程。这样,就构建好了系统所需的linux系统平台。4 系统设备的驱动程序的编写和移植在嵌入式系统中,设备驱动充当了硬件和应用软件之间的纽带。对于功能较简单,控制不复杂的系统,并不需要多任务、文件系统和内存管理等复杂功能,用单任务构架可以很好地支持。对于本系统相对复杂的软件系统,需要具有操作系统的设备驱动来完成多任务并发。4.1 系统软件设备架构错误!链接无效。图4-1 系统软件设备架构本系统软件设备架构如图4-1所示,详细模块功能如下:(1)前台功能:在网络上的客户端进行对服务器的视频数据请求,通过通用的浏览器进行图片监控,视频监控。(2)应用层功能:在应
38、用层上,主要负责处理网站发布接收访问等基于HTTP协议的活动。基于HTTPD服务器发布的数据放在数据业务中的www文件夹中,进行数据转换,成为客户端真正能浏览到的图片和视频。(3)数据业务层功能:该层主要使用开源软件mjpg-streamer模块,该软件利用共享库来处理输入输出,input_file.so处理文件输入,可输入图片和视频文件,output_http.so和output_file.so等是以HTTP视频数据服务流形式输出,为高层图像提供较友好的数据接口。mjpg-streamer软件依赖libjpeg和libjpeg-devel库的支持。利用input_uvc.so文件接收摄像头,
39、利用YUV格式,适当减少图片帧数让视频流畅,该模块会让数据进入数据缓冲器进行数据中转,由输出模块output_http.so模块进行HTTP数据流的处理。www文件夹存放网页开发包,为了与应用层交换,内嵌有本系统浏览数据的页面。(4)驱动层功能:在此主要是驱动USB摄像头和网络芯片DM9000。为上述功能提供可能。4.2 网络驱动程序4.2.1 网络设备驱动程序的体系结构Linux网络设备驱动程序的体系结构从上到下分为4层3,一次为网络协议接口层、网络设备接口层、设备驱动功能层和网络设备与媒介层,其流程图如图4-2所示。(1)网络协议接口层:向网络层协议提供统一的数据包收发接口,通过dev_q
40、ueue_xmit()函数发送数据,并通过netif_rx()函数接收数据。(2)网络设备接口层:向协议接口层提供net_device,用来描述具体网络设备属性和操作的结构体。(3)设备驱动功能层:各函数是网络设备接口层net_device数据结构的具体成员,驱使网络设备硬件完成相应的动作,通过hard_start_xmit()函数启动发送操作,通过网络设备上的中断触发接收操作。(4)网络设备与媒介层:完成数据包发送和接收的物理实体。包括网络适配器和具体的传输媒介等。错误!链接无效。图4-2 网络设备驱动程序的体系结构4.2.2 DM9000发送和接收数据包过程(1)DM9000发送数据包过程
41、,如图4-3所示:向控制寄存器TXCMD寄存器写入发送命令。将发送数据长度写入TXLENG寄存器。读取PacketPage空间内的BUSST寄存器,配置其状态为准备发送状态。在PORT0寄存器循环写入要发送的数据。错误!链接无效。图4-3 DM9000发送数据包过程图 图4-4 DM9000接收数据包过程图(2)DM9000接收数据包过程,如图4-4所示:接收到网络适配器产生的中断,查询中断状态队列端口,判断中断类型是否为接收中断。读PORT0寄存器依次换得接收状态rxStatus,接收数据长度rxLength。循环继续对PORT0寄存器读取rxLength次,直到获得整个数据包4.3 USB
42、摄像头的驱动在linux系统中,提供了主机侧和设备测的USB驱动框架3。从主机侧的角度而言,需要编写的USB驱动程序包括主机控制器驱动和设备驱动两类,USB主机控制器驱动程序控制插入其中的USB设备,而USB设备驱动程序控制设备如何作为从设备与主机通信。本系统研究的是主机侧USB驱动。在linux-2.6.32.2内核中配置和修改开源驱动spca5xx/gspca,就基本实现了通用的主流USB摄像头的支持。为了识别不同的V4L1和V4L2芯片的摄像头,安装GSPCAV1来支持V4L1,用UVCVIDEO来支持V4L2。4.3.1 主机侧USB驱动总体结构错误!链接无效。图4-5 主机侧USB驱
43、动总体结构图USB采用树形拓扑结构,总体结构图如图4-5所示。要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何与主机通信。USB核心负责USB驱动管理和协议处理的主要工作,包括:通过定义一些数据接口、宏和功能函数,向上为设备驱动提供编程接口,向下为USB主机控制器驱动提供编程接口;通过全局变量维护整个系统的USB设备信息;完成设备热插拔控制、总线数据传输控制等。4.3.2 urb处理流程在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次3。设备通常有一个或多个配置;配置通常有一个或多个接口;接口通常有一个或多个设置
44、;接口有零或多个端点。而USB设备中的每个端点都处理一个urb队列,在队列被清空之前,一个urb的生命周期如下,如图4-6所示:(1)被一个USB设备驱动创建,由usb_alloc_urb()函数创建。(2)初始化,被安排给一个特定USB设备的特定端点。(3)被USB设备驱动提交给USB核心。在完成第(1)、(2)步的创建和初始化后,usr便可以提交给USB核心,通过usb_submit_urb()函数来完成。(4)提交由USB核心指定的USB主机控制器驱动。(5)被USB主机控制器处理,进行一次到USB设备的传送。(6)当urb完成,USB主机控制器驱动通知USB设备驱动。错误!链接无效。图4-6 urb处理流程图4.4 本章小结本章首先从整体上描述了本系统软件设备架构,然后介绍了架构中各模块层的功能。接着再详细介绍了本系统中关于网络驱动程序的编写流程和USB摄像头驱动程序的移植。5 系统的图像采集和传输 系统调用V4L1和V4L2的API函数,通过USB摄像头来采集视频图像数据,完成视频图像数据的采集后,作为服务器端的嵌入式系统后台等待客户端通过浏览器进行连接,然后进行对摄像头监控,服务器就把采集到的图像数据传输到远程客户端PC机上。因为系统采用的是MJPEG协议,也就是把视频镜头