(计算机应用技术专业论文)嵌入式网络视频监控系统的研究与实现(1).pdf_第1页
(计算机应用技术专业论文)嵌入式网络视频监控系统的研究与实现(1).pdf_第2页
(计算机应用技术专业论文)嵌入式网络视频监控系统的研究与实现(1).pdf_第3页
(计算机应用技术专业论文)嵌入式网络视频监控系统的研究与实现(1).pdf_第4页
(计算机应用技术专业论文)嵌入式网络视频监控系统的研究与实现(1).pdf_第5页
已阅读5页,还剩90页未读 继续免费阅读

(计算机应用技术专业论文)嵌入式网络视频监控系统的研究与实现(1).pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0i l 王0t , h p 泽 k i 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均己在论文中作了明 确的说明并表示谢意。 签名:耋金盗 日期:。年f 月巧丑 论文使用授权 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:捡盏导师签名: 图2 4 改进的b s 模式 在此系统结构中,服务器端分为w e b 服务器和视频服务器两部分。客户端通 过w e b 服务器获得包含视频播放控件的w e b 页面作为操作界面。视频服务器则负 责从u s b 摄像头采集视频图像数据,对图像进行编码、压缩及发送。嵌入在客户 端浏览器中的视频播放控件负责接收、解码和播放视频图像。在此结构中,视频 图像数据在服务器和客户端之间不再通过h t r p 协议进行发送,而是采用适合流 媒体数据传送的r t p r t c p 协议,这样的方式减小了数据传输的时延,也减轻了 w 曲服务器的负担。 在客户端,通过w e b 页面提供用户登陆,控制监控启停,观看视频图像,控 制云台方向的功能。视频播放采用a c t i v e x 技术实现视频数据的获取、解压缩和显 示。 整个系统可以分为以下几个模块: 1 、用户操作显示界面。操作显示界面是使用h t m l 和j a v a s c r i p t 编写的h t m l 界面,在该h t m l 页面中,嵌入了用于播放视频的a c t i v ex 控件。当在i n t e m e t 浏览器中输入w e b 服务器的口地址时,页面由浏览器下载到p c 客户端。 2 、视频播放a c t i v ex 控件。控件分为r t p 数据包接收、m p e g 4 解码和视频 图像显示三部分。控件还具有控制视频播放的开始和停止的功能。可以将开始和 停止命令发送到视频服务器相应端口。 3 、w e b 服务器。w e b 服务器接收并解析浏览器发送的h t t p 请求,请求命令 包括获取w e b 页面和运行接口程序,w e b 服务器根据请求返回指定的w e b 页面或 运行指定的接口程序。 1 4 第二章系统总体设计方案 4 、视频服务器程序。视频服务器程序的重要模块包括视频采集模块、视频压 缩模块和网络传输发送模块。服务器通过监听指定端口接收用户开始和停止监控 的命令,启动和停止上述三个模块的工作。 5 、服务器端c g i ( 通用网关接口) 程序。由于系统提供用户远程登陆、用户 管理、控制云台功能,在b s 模式中,通过由w e b 服务器调用c g i ( 通用网关接 口) 程序的方式来完成相关处理。 , 图2 5 系统总体软件结构 下面,对整个系统的主要动作,各重要模块的交互模式进行分析和描述。 l 、服务器上电启动后,自动启动w e b 服务器和视频服务器程序; 2 、w e b 服务器监听h 1 t 端口; 3 、视频服务器主进程完成初始化工作后,监听指定端口等待用户命令; 4 、用户通过w e b 浏览器请求监控页面,浏览器使用h r r p 协议向w e b 服务 器发送请求。用户需要先登陆系统,只有授权用户才能观看监控图像。w e b 服务 器模块接收到请求后,首先通过c g i 程序验证用户身份。对合法用户的请求,返 回包含视频播放a c t i v ex 控件的w e b 页面给浏览器; 5 、用户在客户端的播放控件中选择开始监控,命令被发送到视频服务器模块 的监听端口;视频服务器模块启动视频采集,对采集到的图像进行压缩编码,通 过r t p 协议将图像发送到客户端的指定端口; 6 、客户端播放控件模块接收服务器传过来的r t p 数据包,进行解码并显示; 1 5 电子科技大学硕士学位论文 7 、用户在播放控件中选择停止监控,命令被发送到视频服务器模块监听的端 口,视频服务器停止对该用户发送视频流。 2 4开发环境搭建 本文研究的网络视频监控系统分为服务器和客户端两个部分。由于采用b s 模式,客户端的开发主要是w e b 页面和用于视频播放的a c t i v ex 控件的制作,制 作h t m l 页面通常使用普通的编辑软件或d r e a m w a v e r 等工具即可,制作a c t i v ex 控件需要使用微软的v i s u a lc + + 工具。服务器端采用嵌入式系统,嵌入式系统的开 发模式与普通系统不同,以下进行详细介绍。 2 4 1 交叉编译环境的建立 普通的软件开发通常都在本机上直接进行开发、调试和运行。但嵌入式系统 往往针对性强,硬件资源都是很有限的,不像p c 机一样丰富,要在上面建立一套 完整的开发、调试系统几乎是不可能的。因此,嵌入式软件的开发不可能采取本 地开发的模式,而需要采取一种交叉开发【l l 】【1 2 】的模式,简单地说,就是在一个平 台上生成另一个平台上的可执行代码。在这种模式中,开发平台建立在一台硬件 资源丰富的p c 机上,称为宿主机( h o s t ) ,程序的编辑、编译、链接等过程都在宿 主机上完成。程序的最终运行平台是嵌入式设备,称为目标机( t a r g e t ) 。宿主机 和目标机通过串口或者以太网接口进行通信,在宿主机上生成程序的可执行代码 后,将可执行代码下载到目标机上运行。交叉开发环境如图2 - 6 所示。 图2 - 6 交叉开发环境 在本系统中,嵌入式操作系统内核的编译、应用软件的开发和调试都需要借 1 6 第二章系统总体设计方案 助宿主机完成。通常,宿主机和目标机在软件和硬件上都有很大区别,如c p u 的 类型和运行的操作系统都是不同的。由于可执行代码与硬件平台是强相关的,要 使在宿主机上生成的可执行代码在目标机上能够运行,程序在宿主机上进行编译 时,就必须使用针对目标机硬件平台的特定的编译工具,这样的工具称为交叉编 译【1 3 】工具。 本系统服务器端硬件采用的a r m 处理器,操作系统是嵌入式l i n u x 系统, l i n u x 系统下的编译调试工具主要有: g c c :g n u 编译器集,包括g n uc 编译器; g + + :c + + 编译器,是g c c 的一部分; g d b :源代码级的调试器。 完整的l i n u xg e e 编译工具链是一套工具,通常包括g c c 、b i n u t i l s 、g l i b c 三个部 分,g c c ( g n uc o l l e c tc o m p i l e r ) 主要完成的工作任务是“预处理 和“编译 ,以 及提供了与编译器紧密相关的运行库的支持。b i n u t i l s 二进制连接器是g c c 的辅助 工具,提供了一系列用来创建、管理和维护二进制目标文件的工具程序。g l i b c 是 g n u 发布的l i b c 库,也即c 函数链接库。g l i b c 是l i n u x 系统中最底层的a p i ,几乎 其它任何的运行库都会倚赖于g l i b c 。g l i b c 除了封装l i n u x 操作系统所提供的系统 服务外,也提供了其他一些功能的实现。 因此,我们需要在宿主机上单独安装和使用针对a r m 架构的g c c 编译工具链 来编译程序。出于通用性考虑,宿主机选用r e d h a t9 0 作为操作系统。交叉编译工 具选用2 9 5 3 版本的a r m l i n u x g c c 工具链,a l t l l 1 i n u x g c c 工具链中包含了适用于 a r m 结构的g c e 、b i n u t i l s 和g l i b c 。宿主机和目标机通过串口建立连接关系。 作为开源的g n u 项目之一,绷一l i n u x g c c 编译工具链的源码包 a n l l l i n u x g c c 2 9 5 3 t a r b z 2 可以免费从网上下载。下载后需要在宿主机平台上进行 编译和安装,具体安装过程如下: 1 、在宿主机的u s r l o c a l 目录下建立名为a l m 的目录; 2 、复制a r m - l i n u x g c c 2 9 5 3 t a r b z 2 到a n n 目录下,并解压; 3 导出u s r l o c a l a r m 2 9 5 3 b i n 到环境变量,在e t c p r o f i l e 最后添加 p 舢= $ p 棚:u s r l o c a l a r m 2 9 5 3 b i n 。 4 、保存对p r o f i l e 的修改后,执行s o u r c e e t c p r o f i l e 命令。 安装成功以后,用a r m 1 i n u x g c c 来指定交叉编译器即可编译目标机操作系统 内核或其他应用程序。 1 7 电子科技大学硕士学位论文 2 4 2l i n u x 启动流程 嵌入式l i n u x 系统的启动过程 1 4 】大致可以分为三个阶段【1 5 】:引导加载程序 ( b o o t l o a d e r ) ,l i n u x 内核,文件系统。b o o t l o a d e r 是系统启动或复位以后执行 的第一段程序,它主要用来初始化处理器及其他硬件设备,然后引导l i n u x 内核 启动运行。l i n u x 内核在完成系统的初始化之后挂载某个文件系统做为根文件系 统。根文件系统是l i n u x 系统的核心组成部分,可以作为l i n u x 系统中文件和数 据的存储区域,通常它还包括系统配置文件和运行应用软件所需要的库。下面详 细介绍启动的各个阶段的工作流程: 1 、b o o t l o a d e r 不同处理器上电或复位后执行的第一条指令地址可能不m t l 6 l ,a r m 处理器的 地址为0 x 0 0 0 0 0 0 0 0 。嵌入式系统通常把f l a s h 等存储设备映射到这个地址,然后 将b o o t l o a d e r 存放于该存储器的最前端,这样系统上电或复位后执行的第一段程 序便是b o o t l o a d e r 。b o o t l o a d e r 需要完成的最基本的功丹p - 匕v , 即是初始化环境,启动 l i n u x 内核。通常b o o t l o a d e r 的都具有以下几方面的功能: ( 1 ) 初始化r a m l i n u x 内核一般在r a m 中运行,所以在调用l i n u x 内核之前b o o t l o a d e r 需要设置和初始化r a m ,为调用l i n u x 内核做好准备。初始化r a m 的任务包 括设置c p u 的控制寄存器参数,以便能正常使用r a m 以及检测r a m 大小等。 ( 2 ) 初始化串口 宿主机和目标机之间可以用串口连接,b o o t l o a d e r 和l i n u x 在启动过程中可 以将信息通过串口输出以及从串口终端读取用户指令。一般的b o o t l o a d e r 都会在 执行过程中初始化一个串口做为调试端口。 ( 3 ) 检测处理器类型 b o o t l o a d e r 在调用l i n u x 内核前必须检测系统的处理器类型,并将其保存到 某个常量中提供给l i n u x 内核。 ( 4 ) 设置l i n u x 启动参数 b o o t l o a d e r 在执行过程中会设置和初始化l i n u x 的内核启动参数。l i n u x 内 核在启动过程中根据该启动参数进行相应的初始化工作。 ( 5 ) 调用l i n u x 内核映像 b o o t l o a d e r 完成的最后一项工作便是调用l i n u x 内核。大部分b o o t l o a d e r 都 包含本地加载和远程下载两种引导模式。本地加载是指l i n u x 内核存放在f l a s h 中, 第二章系统总体设计方案 b o o t l o a d e r 将内核拷贝到r a m 中,然后跳转到r a m 中去执行的加载方式。 b o o t l o a d e r 一般存放在f l a s h 芯片上,l i n u x 内核映像和文件系统也可存放在 f l a s h 上。通常,需要把f l a s h 分成几个区来使用,如图2 7 所示。 图2 7f l a s h 分区 b o o t l o a d e r 通常放在第一个分区,使b o o t l o a d e r 的入口位于处理器上电执 行第一条指令的位置。然后是参数区,保存b o o t l o a d e r 使用的相关参数。接下 来是操作系统内核映像区,存放操作系统的内核映像文件。b o o t l o a d e r 引导l i n u x 内核,就是要从这个地方把内核映像文件解压到r a m 中去,设置内核启动参数, 然后再跳转到r a m 中的内核入口开始执行。最后一个分区是文件系统区。l i n u x 内核启动后,将加载文件系统。 2 、l i n u x 内核启动流程 在b o o t l o a d e r 将l i n u x 内核映像拷贝到r a m 以后,b o o t l o a d e r 通过 c a l l1 i n u x 0 调用来启动l i n u x 内核,并将检测出来的处理器类型,存放启动参数的 r a m 地址作为参数传递给内核。l i n u x 内核映像有两种:一种是非压缩内核 ( i m a g e ) ,另种是压缩内核( z l m a g e ) 。z l m a g e 是i m a g e 经过压缩形成的,需 要解压缩之后才能执行,因此执行速度比i m a g e 慢。但采用z l m a g e 可以占用较 少的存储空间,因此一般的嵌入式系统均采用压缩内核的方式。 解压后的内核的入口叫h e a d a r m v s ,由于该段程序与具体体系结构有关,所 以一般均用汇编语言编写。该段程序主要完成查询处理器类型、查询系统架构类 型、设置m m u 和临时内核页表、映射初始化所需的r a m 空间到虚拟地址,以及 初始化b s s ( 全局变量区域) ,保存系统相关信息的功能。初始化结束后,跳转到 s t a r t 函数开始内核的初始化工作。kernel() s t a r tk e r n e l 0 主要完成剩余与硬件平台相关的初始化工作,调用第一个用户进 程i n i t 进程并等待用户进程的执行,这样整个l i n u x 内核便启动完毕。该函数所 做的具体工作有: ( 1 ) 进行与体系结构相关的初始化工作。它首先通过检测出来的处理器类型进 行处理器内核的初始化,然后进行内存结构的初始化,最后开启m m u ,创建内 1 9 电子科技大学硕士学位论文 核页表,映射所有的物理内存和i o 空间; ( 2 ) 创建异常向量表和初始化中断处理函数; ( 3 ) 初始化系统核心进程调度器和时钟中断处理机制; ( 4 ) 初始化串口控制台; ( 5 ) 创建和初始化系统c a c h e ,为各种内存调用机制提供缓存,包括动态内存 分配,虚拟文件系统和页缓存; ( 6 ) 初始化内存管理,检测内存大小及被内核占用的内存情况; ( 7 ) 初始化系统的进程间通信机制; 当以上工作结束后,s t a r t数会调用 i 数创建系统的第一个k e m e l o i n r e s t n i t o 函 进程i n i t 进程来结束内核的启动。k n i t 进程首先进行一系列的硬件初始化,然后挂 载根文件系统。最后i n i t 进程会执行以下几个进程之一:s b i n i n i t 、e t c i n i t 、b i n i n i t 、 b i n s h 。当所有的初始化工作结束后,c p ui数会被调用来使系统处于闲置状dleoin 态并等待用户程序的执行。至此,整个l i n u x 内核启动完毕。 分析完l i n u x 系统的启动过程,下面开始进行系统的移植,主要分为 b o o t l o a d e r 的移植和l i n u x 内核的移植两部分进行介绍。 2 4 3b o o t l o a d e r 的移植 b o o t l o a d e r 基于特定的硬件平台,与处理器的体系结构和开发板的配置有很 大的关系。在嵌入式系统中应用最多的b o o t l o a d e r 主要有u - b o o t 和v i v i 两种。 u - b o o t 支持的处理器体系较多。本系统采用的是v i v i ,它是韩国m i z i 公司专门为 a r m 9 处理器设计的。v i v i 的源码可以从网上下载,需要根据开发板的具体硬件 情况,对源码进行配置和编译,最后烧入开发板上的n a n df l a s h 中。具体过程如下: 1 、将m i z i 工具包的v i v i m i z i t a r b z 2 拷贝到工作目录下并解压,生成v i v i 目 录。 2 、修改v i v i m a k e f i l e 里的一些变量设置: l i n u xi n c l u d ed i r 一交叉编译器的i n d u d e 文件夹 c r o s sc o m p i l e一交叉编译器的可执行文件的路径 a r mg c cl i b s一交叉编译器的1 i b 库文件的路径 3 、在a r c h s 3 c 2 4 1 0 s m d k c 中修改n a n df l a s h 的分区信息: m t d _ p a r t i t i o n td e f a u l t _ m t d _ p a r t i t i o n s 】= 2 0 第二章系统总体设计方案 n a m e :”v i v i ”, o f f s e t :0 , s i z e :o x 0 0 0 2 0 0 0 0 , ) , n a m e :”p a r a m ”, o f f s e t :0 x 0 0 0 2 0 0 0 0 , s i z e :o x 0 0 0 10 0 0 0 , ) ,( n a m e :”k e r n e l ”, o f f s e t :0 x 0 0 0 30 0 0 0 , s i z e :o x 0 010 0 0 0 0 , ) , n a m e : r o o t ”, o f f s e t :0 x 0 0 1 3 0 0 0 0 , s i z e :0 x 0 14 0 0 0 0 0 , ) ) ; 4 、在a r c h s 3 c 2 4 1 0 s m d k c 中修改l i n u x 启动参数,指定根文件系统位置: c h a rl i n u x c m d 】= ”n o i n i t r dr o o t = d e v m t d b l o c k 3i n i t = l i n u x r cc o n s o l 例y s o ”; 5 、根据硬件环境,使用m a k em e n u c o n f i g 命令在图形界面中对v i v i 进行相关 配置,需要启用n a n df l a s h 支持。 6 、使用m a k ev i 、r i 命令编译,生成v i v i 的二进制映像文件。 7 、利用j t a g 将订访的映像文件烧写到目标板的n a n df l a s h 上,重新启动目 标板,v i 访的移植工作就完成了。 2 4 4 l i n u x 内核的移植 l i n u x 系统优秀的结构设计和开源的特点使得其非常适合应用于嵌入式系统。 移植l i n u x 到目标板的第一步是根据目标硬件平台的特点选择合适的l i n u x 版本。 目前,针对目标平台对m m u ( 内存管理) 的支持与否有不同的l i n u x 版本。l i n u x 本身对m m u 支持很好,对不支持m m u 的处理器可以选择u c l i n u x 系统。本系 统的处理器是a r m9 体系,支持m m u ,可以将l i n u x2 6 版本的内核经过配置和 2 1 电子科技大学硕士学位论文 修改,移植【1 7 】到目标平台上。 l i n u x 系统中,使用文件系统来组织系统中的文件和设备,为用户程序和设备 提供统一的访问接口。也只有在存储设备上建立起文件系统,才能对其进行文件 相关的操作访问,满足操作系统和应用程序的需要。如上节所述,l i n u x 内核启动 后,需要装载根文件系统才能正常工作。嵌入式l i n u x 支持多种文件系统,需要根 据具体的存储介质来选择和构建。在本系统中,采用n a n df l a s h 作为存储介质。 目前支持f l a s h 的文件系统有可读写文件系统j f f s 2 、y a f f s 2 和只读文件系统:c r a m f s 、 r o m f s 。y a 舔2 是专门为嵌入式系统广泛使用的n a n d 型存储器设计的一种文件系 统。它不支持数据压缩,读写速度快,挂载时间短,占用内存小。y a f f s 2 自带n a n d 芯片的驱动,提供了可以直接访问文件系统的a p i 。因此本系统采用y a f f s 2 做为 根文件系统。 l i n u x 内核和文件系统移植的过程可分为三个步骤:内核的配置修改、根文件 系统的制作、内核和文件系统的烧写。 第一步:对内核进行配置和修改,并加入对y a f f s 文件系统的支持。首先下载 并解压内核源码包l i n u x 一2 6 3 2 2 t a r b z 2 和y a f f s 的补丁c v s r o o t t a r g z 。进入解压后 的补丁目录,执行p a t c h - k e r s h l i n u x 2 6 l i n u x - 2 6 3 2 2 。这个补丁在内核的f s 目 录下创建y a f f s 2 目录,将y a f f s 2 源码包中的配置文件和源代码复制到新建的目录 中,在内核的配置菜单中增加了y a f f s 2 的支持选项。内核的配置方法如下: ( 1 ) 修改内核m a k e f i l e 。 a r c h ? = a r m c r o s s c o m p i l e ? = u s r l o c a l a r m 3 4 1 b i n a r m l i n u x 一 ( 2 ) 修改n a n df l a s h 分区使之与啊、,i 中设置一致。l i n u x 2 6 3 2 2 a r c h a r m p l a t s 3 c 2 4 x x c o m m o n s m d k c ,其中有一个结构体s m d kd e f a u l tn a n dp a r t ,即n a s h 分区。 ( 3 ) 配置内核,使用m a k em e n u c o n f i g 命令进入配置界面,根据需要配置内核 选项,选择支持y a f f s 2 文件系统和m t d 。 编译内核,首先用m a k ed e p 命令读取配置过程生成的配置文件创建依赖关系, 决定哪些模块需要编译。然后用m a k ed e a n 命令清除以前编译生成的目标文件。 最后执行m a k ez l m a g e 命令即可在a r c h a r m b o o t 目录下生成内核映像文件z i m a g e 。 第二步,利用相关工具制作出系统要使用的根文件系统。 b u s y b o x 是l i n u x 系统的一个系统工具集,可以使用b u s y b o x 来制作l i n u x 的 根文件系统。b u s y b o x 集成了大部分常用的l i n u x 命令和软件,可以通过自定义配 1 1 习 : k 务铄 。:m 擎 套 鬟 : :,簟 、 第二章系统总体设计方案 置来制作需要的根文件系统。b u s y b o x 可以进行文件优化,制作的根文件系统很 适合嵌入式系统应用。可以从网上下载b u s y b o x ,制作方法如下: 1 、修改b u s y b o x 根目录下面的m a k e f i l e 文件,指定交叉编译器: a r c h = a r l n c r o s s c o m p i l e = a l t l l l i n u x - 设置p r e f i x 路径为生成的根文件系统存放路径。 2 、执行m a k em e n u c o n f i g 命令,对s u s y b o x 进行定制。配置编译b u s y b o x 时 按静态连接库编译,加入对i n i t t a b 文件的支持,去掉对2 2 和2 4 内核的支持。 3 、执行m a k e 命令编译b u s y b o x 。编译结束在p r e f i x 设置的路径下生成了一个 根文件系统。根文件系统文件夹下只有b i n 、s b i n 、u s r 三个文件夹,需要使用m k d i r 命令手动创建其他目录结构,女 i d e v 、e t c 、1 1 0 m e 、h o m e u s r 、1 i b 、m n t 、v a r 、 t m p 、p r o e 、o p t 等。 4 、利用y a f f s 镜像制作工具m k y a f f s i m a g e 将根文件制作成镜像。使用 m k y a f f s i m a g e _ i n s t a l lr o o t i m g 命令得到根文件系统的镜像文件。 第三步:将前面两步生成的内核映像文件和根文件系统映像下载写入目标板 f l a s h ,使用v i v i 引导系统启动成功,完成l i n u x 系统的移植工作。 电子科技大学硕士学位论文 第三章w e b 服务器的建立 本文研究的网络视频监控监控系统基于b s 模式,用户的操作界面是w e b 浏 览器,各h t m l 页面以及嵌入到页面中的视频播放控件,都要通过h t t p 协议从 前端服务器上的w e b 服务器程序获得,因此,首先需要在前端服务器上建立起w e b 服务器。 3 1h t t p 协议及w e b 服务器工作原理 万维网w w w 是建立在因特网【1 8 】上的一个大规模的信息存储空间,这个空间 中的一个事物称为一个“资源 ,由一个唯一的“统一资源标识符”( u r l ) 标识。 万维网也可以理解为一个透过网络存取的互连的超级文件系统。万维网以客户服 务器方式工作。客户是需要某个w w w 文档的程序,服务器则是存储万维网文档, 可以向客户提供文档的程序。客户程序向服务器程序发出请求,服务器程序将客 户所请求的万维网文档返回给客户程序,客户程序再对文档进行显示。一个客户 机可以向多个不同的服务器发出请求,一个服务器也可以向多个不同的客户机提 供服务。万维网客户程序又称为浏览器,运行服务器程序的计算机称为w e b 服务 器。万维网上的资源页面都使用超文本标记语言h t m l 为标准来编写,由浏览器 对其进行解析。w e b 服务器和浏览器之间通过超文本传送协议h t t p ( h y p e r t e x t t r a n s f e rp r o t o c 0 1 ) 【1 9 】进行交互,它定义了客户机如何请求和服务器如何应答。 h t t p 是应用层协议,下层使用t c p 协议进行连接。h t y p 协议是无状态、无 连接的协议。无状态是指服务器不会记忆访问过的客户的信息,一个客户多次访 问同一服务器时服务器响应总是与第一次相同。无连接是指完成一次请求响应后, 客户和服务器的连接将断开。h t t p 报文分为客户发给服务器的请求报文和服务器 的响应报文。请求报文包含方法、请求资源的u r l 、h t t p 协议的版本,以及一 些用于说明浏览器、服务器或实体相关信息的首部行。其中,方法是指该请求要 进行的操作,主要包含g e t 、p o s t 、h e a d 、p u t 、d e l e t e 等。h t t p 响应报 文主要包含协议版本号、状态码、解释状态码的简短语句,以及一个类m i m e 的 实体,状态码用来表示请求完成的状态,可以是成功、重定向、客户或服务器错 误等。 2 4 第三章w e b 服务器的建立 w e b 服务器程序默认监听8 0 端口,当监听到有客户端浏览器发出的建立t c p 连接请求后,与浏览器建立连接,然后浏览器就向服务器发送请求报文。服务器 接收到请求后,根据请求报文中的方法字段和u r l 字段进行处理,并将结果页面 返回给浏览器,最后释放t c p 连接,如图3 1 所示。 图3 1w e b 服务器和浏览器的交互 服务器对请求的处理过程分为两种情况。第一种是客户请求的是静态页面。 静态页面是指预先制作好的页面,在用户浏览过程中,其内容不会改变,这种页 面不具有交互性。另一种与之对应的是动态文档,动态文档是指根据用户的请求 或用户提交的数据动态生成的页面。这种类型的请求就需要增加一个应用程序来 创建动态页面,或处理浏览器发送过来的数据并据此创建动态页面,另外,w e b 服务器还要能够启动这个程序,将浏览器发送过来的数据传递给它,并将程序输 出的h t m l 页面返回给浏览器。在这类程序中可以访问数据库,或者实现其他复 杂的业务功能。目前关于动态页面的技术已经有很多种,如c g i 、p h p 、a s p 和 j a v as e r v l e t 等。总结起来,支持动态文档的w e b 服务器的工作原理如图3 2 所示。 图3 - 2 支持动态页面的w e b 服务器 电子科技大学硕士学位论文 3 2嵌入式w e b 服务器b o a 的移植 目前,已经实现的w e b 服务器程序的种类很多,我们要选择适合嵌入式系统 使用的、支持c g i 或类似接口程序功能的w e b 服务器。由于嵌入式设备资源一般 都比较有限,并且视频监控系统的应用场景也决定了在此系统中w e b 服务器不需 要同时处理很大数量的用户请求,因此,不需要使用常用于大型w 曲应用的如 a p a c h e 等服务器,而使用一些专门为嵌入式设备设计的小型w e b 服务器即可。这 类w e b 服务器的存储空间和运行时占用的内存空间通常都较小,非常适合于嵌入 式系统的应用场合。 在嵌入式l i n u x 中,常用的w e b 服务器有:b o a ,t h t t p d ,h t t p d ,其中h t t p d 只支持静态页面,不适合高级应用,t h t t p d 和b o a 所提供的功能基本一样,但是 t h t t p d 在运行过程中所需要的资源要远大于b o a ,因此我们选择b o a 作为该嵌入 式系统的w e b 服务器。b o a 是一个非常小巧的w e b 服务器【2 0 1 2 1 1 ,可执行代码只 有约6 0 k b ,占用系统的资源少,而且响应速度快、安全性和性能都很好。它是一 个单任务的w e b 服务器,不支持并发处理多个用户的连接请求,只能依次处理。 但它支持c a i ( 公用网关接口) 技术,能够为c g i 程序建立一个进程来执行。b o a 源代码开放,可以从网上获得。对b o a 的移植和配置过程如下: 1 、解压源码包并进入源码目录的s r c 子目录,执行c o n f i g u r e 命令生成m a k e f i l e 文件。 2 、由于是交叉编译,需要修改m a k e f i l e 文件,在m a k e f i l e 找到c c = g c e ,将 其改成c c = a r m - l i n u x g c c ,再找到c p p = g c c e ,将其改成c p p = a r m l i n u x g c c 。 3 、执行m a k e 命令进行编译,得到的可执行程序为b o a ,使用a r i a l i n u x s t r i p 命令将调试信息剥去,得到的最后程序只有约6 0 k b 大小。 4 、将生成的可执行程序放在目标板根文件系统的b i n 中。 5 、修改b o a 的配置文件。 ( 1 ) 修改b o a 的源码目录下的配置文件b o a c o n f o 通常根据实际情况设置工 作用户和工作组、各种日志文件的保存目录和h t m l 文档的主目录等。 c g i 方面首先需要将c g i 这个文件扩展名和m i m e 类型中的 a p p l i c a t i o n x - h t t p d c g i 类型关联起来,可以在b o a e o n f 文件中直接指明关联,也可 以使用m i m e t y p e s 文件来指明各种文件扩展名对应的m i m e 类型。另外,还需要 配置c g i 脚本存放的实际路径,在b o a e o n f 中用s c r i p t a l i a s 来指明,所有的c g i 脚本都要放在这个路径里。 第三章w e b 服务器的建立 ( 2 ) 根据上一步中的配置,在目标板的根文件系统中对应位置创建h t m l 文 档主目录、日志文件目录、c g i 脚本目录,如果使用m i m e t y p e s 文件来指明类型 关联则需要在根文件系统的e t e 下存放m i m e 类型文件。最后将配置好的b o a c o n f 放在目标板根文件系统的e t c b o a 目录下。 此时,在目标板上执行b o a 命令即可运行b o a 服务器。将h t m l 静态页面存 放在文档主目录下,将c g i 程序放在c g i 脚本目录中,b o a 服务器便可以根据浏 览器请求的u r l 返回指定的静态页面或调用相应的c g i 程序。在本系统中,要求 系统启动后能够自动运行w e b 服务器程序。根据上一章中所分析的l i n u x 的启动流 程可以知道,在l i n u x 启动的最后阶段,系统会执行存于e t c r c d r c 1 0 c a l 中的命令。 所以,在r e 1 0 c a l 文件中加入后台运行b o a 的命令:b i n b o a & ,b o a 就可以在系 统启动后在后台自动运行。 3 3c g i 程序的应用及实现 3 3 1c g i 标准介绍 c g i 意为通用网关接n 1 2 2 ,它是一种标准,它定义了w e b 服务器与其脚本程 序之间的接口标准。c g i 规定了w e b 服务器调用其他可执行程序的接口协议标准, 提供给w e b 服务器一个执行外部程序的通道。c g i 程序属于一个外部程序,需要 编译成可执行文件,以便在服务端运行。c g i 程序大大增强了w e b 服务的交互性。 在传统模式下服务器只能提供静态页面给供用户浏览,有了c g i 程序,用户可以 保存数据到服务器,服务器也能够提供更多实时性的服务,实现更为复杂的业务。 c g i 程序内部和普通程序无异,唯一的区别就是它是一种脚本程序【2 3 】【2 4 】。它从w e b 服务器接收浏览器发送来的数据作为输入,生成的h t m l 页面输出给w e b 服务器, 由服务器返回给客户。 用户发送数据给服务器主要通过h t m l 页面中的“表单”项目,表单在h t m l 文档中用 标签表示。 标签有两个属性,一个是a c t i o n ,一般 是一个u r l ,它表示这个表单要提交给哪个c g i 程序处理。另外一个属性叫 m e t h o d ,表示对表单所采用的方法,即数据在浏览器和服务器之间是如何传送 的。m e t h o d 通常分为g e t 和p o s t 两种,使用g e t 时,将表单中所有变量和 它们的值附加在u r l 的后面,中间用“? 隔开;而使用p o s t 时,表单中的变 量和值被放在h t t p 报文的主体中。 电子科技大学硕士学位论文 w e b 服务器接收到请求后,将调用u r l 中指定的c g i 程序,并将浏览器发过 来的参数传递给c g i 程序。服务器传递参数没有采用一般的命令行方式,而是将 这些参数信息置于一些环境变量中。再由c g i 程序根据需要从环境变量中将参数 值提取出来。比如说,当使用g e t 方法请求时,w e b 服务器将附加在u r l 后面 的“? 之后的字符串放在环境变量q u e r ys t r i n g 中,在c g i 程序中,通过 读取q u e r ys t r i n g 的值来获取浏览器发送的参数信息。当使用p o s t 方法时, w e b 浏览器将请求主体中的参数字符串的长度放在环境变量c o n t e n tl e n g t h 中。使用p o s t 方法时,w e b 服务器通过s t d i n ( 标准输入) 向c g i 程序传送数据。 服务器在数据最后没有使用e o f 字符标记,因此c g i 程序为了正确读取数据,必须 先从c o n t e n tl e n g t h 获得字符串的长度,然后通过s t d i n 标准输入读取参数 字符串。 c g i 程序完成数据的处理,将生成的h t m l 页面代码写到其重定向后的标准 输出。服务器在确认c g i 程序输出的报文首部正确无误后,加上h t t p 首部信息, 返回给浏览器。c g i 程序与服务器的交互如图3 3 所示。 目前可用于在l i n u x 下编写c g i 程序的语言有很多种,如s h e l l 脚本、p e r l 、 c c + + 等。但是嵌入式l i n u x 系统不支持p e r l ,而c 语言编写的c g i 程序具有执行 速度快、安全性高等特点,本系统采用c 语言编写c g i 程序。 3 3 2c g i 程序实现 本系统中,使用c g i 程序来实现用户验证、用户管理和云台方向控制的功能。 在系统中有两种用户,普通用户和管理员用户,普通用户可以观看视频、修改自 己的密码,管理员用户除此之外还可以实现用户的管理,包括增加、删除用户, 以及对云台方向的控制。针对以上三个功能模块分别编写了三个c g i 程序: u s e r c h e c k c g i 用于验证用户身份。在客户端,用户通过h t m l 页面中的表 单输入用户名和密码,表单的a c t i o n 属性设置为a c t i o n = c g i - b i n u s e r ”,_ c h e c kc g i m e t l l o d 属性设置为p o s t ,提交表单时采用p o s t 方法将数据发给w e b 服务器。 u s e r _ m a n a g e c g i :用于用户修改密码,以及管理员用户增加、删除用户;客 户端请求方式与u s e r 类似,通过 方法发送数据。c h e c kc g i p o s t c a m e r a _ c o n t r 0 1 c g i 用于控制云台方向。客户端采用u r l 直接加参数的方法, 这是一种不使用表单就可以向c g i 程序传递信息的方法,它把要传递给c g i 的信 息直接追加在c g i 程序的u r l 地址的后面,信息和u r l 地址之间用“? ”分隔。 第三章w e b 服务器的建立 图3 - 3c g i 程序与w e b 服务器的数据交互 在客户端的h t m l 页面中,将向上的按钮链接到h r e f = - c ,g i b i n c a m e r ac o n t r 0 1 c g i ? o p t i o n - - u p ”,其余按钮类似,只是o p t i o n 值不同。这种方法实际上是采用的h t t p 中的g e t 方法向w e b 服务器发送请求,w e b 服务器收到请求后将“? ”后面的值 保存到环境变量q u e r ys t r i n g 中,再调用c a m e r ac o n t r 0 1 c g i 。 一个c g i 程序通常可以分为接收数据,u r l 解码,处理数据,输出结果四个 步骤,以下分别介绍各步骤的实现方法: 1 、数据接收 ( 1 ) 、p o s t 方法 h t m l 页面中用户通过提交表单对u s e r _ c h e c k c g i 和u s e r m a n a g e e g i 的请求使 用的是p o s t 方法,此时w e b 服务器向c g i 程序的标准输入s t d i n 传送客户发送 过来的数据,数据的长度保存在环境变量c o n t e n tl e n g t h 中。 这两个c g i 程序首先检查r e q u e s tm e t h o d 环境变量确定该请求是否采 用的p o s t 方法,然后获取环境变量c o n t e n t l e n g t h 的值。由于w e b 服务器 并不以文件结束符来终止输出,所以c g i 程序只能通过c o n t e n t _ l e n g t h 的值从 它的标准输入,也就是w e b 服务器的标准输出读取正确长度的数据。 i n tc o n t e n t _ l e n g t h ; c h a r * p o

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论