datasheet
超过460,000+ 应用技术资源下载
pdf

基于ARMVxWorks的Web视频监控系统的研究和设计

  • 1星
  • 日期: 2014-03-05
  • 大小: 8.94MB
  • 所需积分:1分
  • 下载次数:1
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: 基于ARMVxWorks的Web视频监控系统的研究和设计

近年来,监控系统从鲜为人知的幕后走进了前台、走进了人们的生活,监控技术己从第一代全模拟系统发展到第三代完全数字化的阶段。目前,随着微处理器技术和计算机网络技术的进步,基于嵌入式Web的网络视频监控系统逐渐得到了人们的广泛关注,以网络为基础的数字视频监控系统已经发展成为视频监控系统发展的主流。 本文在分析视频监控的现状和发展趋势之后,针对当前视频监控系统的不足,结合市场应用前景设计了一种较好的远程视频监控的应用方案。该方案是在当前非常流行的ARM微处理器上,利用强实时操作系统VxWorks与高性能开源的嵌入式Web服务器和嵌入式数据库相结合,建立高效的、可及时响应的嵌入式视频监控服务器,该系统支持USB摄像设备、文件存储、数据库管理,具有较高的性价比。 论文详细阐述了视频监控系统软硬件的总体设计,主要致力于嵌入式操作系统在S3C2410开发板上的移植,深入研究了闪存文件系统TFFS、以太网卡的工作机制、VxWorks USB协议栈,并实现了硬件上对应的驱动程序。在嵌入式操作系统成功实现后,完成了嵌入式Web服务器GoAhead和嵌入式数据库Berkeley DB的移植。同时,在软件层次上设计和实现了基于Web视频监控的前端服务CGI程序的功能模块。 本系统是ARM技术、VxWorks操作系统、网络技术在嵌入式领域的综合应用,本系统可应用于交通控制、实时探测、安全检查等领域,并对视频监控在其他领域的应用有一定的参考价值。

大连海事大学 硕士学位论文 基于ARM/VxWorks的Web视频监控系统的研究和设计 姓名:邓成文 申请学位级别:硕士 专业:计算机软件与理论 指导教师:刘朝斌 20080301 中文摘要 摘要 近年来,监控系统从鲜为人知的幕后走进了前台、走进了人们的生活,监控 技术己从第一代全模拟系统发展到第三代完全数字化的阶段。目前,随着微处理 器技术和计算机网络技术的进步,基于嵌入式Web的网络视频监控系统逐渐得到 了人们的广泛关注,以网络为基础的数字视频监控系统已经发展成为视频监控系 统发展的主流。 ’ 本文在分析视频监控的现状和发展趋势之后,针对当前视频监控系统的不足, 结合市场应用前景设计了一种较好的远程视频监控的应用方案。该方案是在当前 非常流行的ARM9微处理器上,利用强实时操作系统VxWorks与高性能开源的嵌 入式Web服务器和嵌入式数据库相结合,建立高效的、可及时响应的嵌入式视频 监控服务器,该系统支持USB摄像设备、文件存储、数据库管理,具有较高的性 价比。 论文详细阐述了视频监控系统软硬件的总体设计,主要致力于嵌入式操作系 统在¥3C2410开发板上的移植,深入研究了闪存文件系统TFFS、以太网卡的工作 机制、VxWorks USB协议栈,并实现了硬件上对应的驱动程序。在嵌入式操作系 统成功实现后,完成了嵌入式Web服务器GoAhead和嵌入式数据库Berkeley DB 的移植。同时,在软件层次上设计和实现了基于Web视频监控的前端服务CGI程 序的功能模块。 本系统是ARM技术、VxWorks操作系统、网络技术在嵌入式领域的综合应用, 本系统可应用于交通控制、实时探测、安全检查等领域,并对视频监控在其他领 域的应用有一定的参考价值。 关键词:A雕9;Vxllorkst Web服务;视频监控 英文摘要 Study and Design of Web Video Surveillance System Based on ARMⅣxWorks Abst ract .The monitoring system known little few yeas ago has entered our daily life and becomes well—known to the public nowadays.The monitoring technology has been developed into the third generation,the fully digital stage from the first generation,the fully analog system stage.As the development of the microprocessor technology and network technology,the web-based embedded network video monitoring system arouses widespread interest gradually,and the network—based digital video surveillance system has been developed into the mainstream of video surveillance system fields. Based on the analysis of the current situation and development trend of video surveillance,this thesis designed a better application programme from the market prospects to improve the inadequate existing systems.The programme desires to implement all efficient and rapid response embedded video surveillance server,which is established on the popular microprocessor ARM9,using strong real—time operating system VxWorks。研m the integration of high-performance open—Souse embedded web server and embedded database.The system Can support USB video device,IO operation in file system,database management.Therefore,it has a higllly performance—price ratio. Further more,this thesis described hardware and software framework of the video surveillance system,focused on the porting of embedded operating system VxWorks onto S3C24 1 0 board,implemented the corresponding driver after the analysis of flash file system,mechanism of Ethernet cards,USB stack protoc01.After the implementation of the RTOS VxWorks,it succeeded completing the porting of embedded Web Server GoAhead and embedded database Berkeley DB.Meanwhile,it also designed and implemented the CGI application modules.The designed programme in this thesis is a good combination application of ARM,Network and RTOS VxWorks in the embedded system which Can be used in the other areas such as traffic control,real-time detection, security checks,and it may also provide great reference value for the other fields. Key Words-ARM9;VxWorks;Web Server;Video Surveillance 大连海事大学学位论文原创性声明和使用授权说明 原创性声明 本人郑重声明:本论文是在导师的指导下,独立进行研究工作所取得的成果, 撰写成博士/硕士学位论文竺基王剑至丛&蚤墨选区墨的盟堂视频监控丕统的砑究塑遮 圯。除论文中已经注明引用的内容外,对论文的研究做出重要贡献的个人和集体, 均已在文中以明确方式标明。本论文中不包含任何未加明确注明的其他个人或集 体已经公开发表或未公开发表的成果。 ’ 本声明的法律责任由本人承担。 论文作者签名:砰】滚活巳廊乡月彳日 学位论文版权使用授权书 本学位论文作者及指导教师完全了解“大连海事大学研究生学位论文提交、 版权使用管理办法",同意大连海事大学保留并向国家有关部门或机构送交学位论 文的复印件和电子版,允许论文被查阅和借阅。本人授权大连海事大学可以将本 学位论文的全部或部分内容编入有关数据库进行检索,也可采用影印、缩印或扫 描等复制手段保存和汇编学位论文。 保密口,在 年解密后适用本授权书。 本学位论文属于: 保密口 不保密一(请在以上方框内打“√,,) …撇:苏弼P∑\ , 基于ARM/VxWorks的Web视频监控系统的研究和设计 第1章绪论 1.1选题背景及意义 .计算机领域经历了一场新的革命,它结合了现代控制技术、图形技术,随时 随地为人们提供无缝、高质量、易用、廉价的信息资源,已真正融入到人们生活 的每个角落【1】。计算机监控系统技术水平也从初期的模拟信息传输与控制飞速发展 到目前的数字化、网络化信息传输与控制。在点击率排名靠前的资讯中,视频监 控在众多行业的应用中占了相当大的比重。从大范围来看,生活中有小区安全监 控,电讯行业有机站监控,银行系统中有自动柜员机监控,林业部门有火情监控, 交通方面有违章和流量监控等;从功能上来看,视频监控不仅用于安全防范,而 且可以用于信息获取和指挥调度等多方面。例如,2006年启动的“唐山危运车辆 分批安装监控系统"将建立危货运输的跟踪、救援、调度、监控机制,遏制道路 危货运输、群死群伤事故的发生,水利系统中启动的“长江水域监控系统"针对 水情水质的视频监控、在线排污的监控为我国的水利水域安全及环保打下了坚实 的基础;新疆采用“手机监控农作物灌溉",.用手机就可以对农作物的灌溉进行全 程监控和管理,这是一种具有国际先进水平的农作物灌溉方式。还有其他广阔的 ’应用市场和案例,视频监控应用广泛、市场需求缺口大。 从技术角度来看,当前远程监控技术的主流方向是应用Intemet技术、在 TCP/IP协议和WWW规范的支持下,合理组织软件结构,使工作人员通过访问网 络服务器来迅速获取自己权限下的所有信息并及时做出响应。网络通信技术在监 控系统中的应用还渗透到传感器领域,将网络接口芯片与智能传感器集成起来, 并把通信协议固化到智能传感器的ROM中,导致了网络传感器的产生。网络传感 器继承了智能传感器的全部功能,并且能够和计算机网络进行通信,因而在现场 总线控制系统中得到了广泛的应用,成为现场级数字传感器。国外有不少仪器公 司已经研制出各种各样的网络传感器。国内在网络传感器方面的研究尚处于原理 研究阶段,还没有成型的网络化传感器出现。 监控技术的发展始终与最新技术的发展息息相关,使用者不断对远程监控的 简便性及实时性提出更高的要求。因此必须要更好地、更及时地应用最新技术, 第1章绪论 这样才能使得远程监控不断发展,不断满足人们的需求。当前,嵌入式技术迅速 发展并日趋成熟,它在远程监控领域大有用武之地,也是远程监控系统的发展方 向之一。由于嵌入式监控系统可以使信息实现本地化处理,改善服务器性能,可 以使每一个设备具备上网与服务功能,即每个设备都可以独立进行服务,从而大 大提高了监控的质量和范围。 1.2国内外研究现状 远程监控是这些年国内外研究的前沿课题,自1997年1月,由斯坦福大学和 麻省理工学院联合主办第一届基于Internet的远程监控诊断工作会议之后,国内外 各公司和研究机构都展开了广泛积极的研究。研究远程监控系统开放式体系、诊 断信息规程、传输协议以及对用户的权限的限制等。由斯坦福大学和麻省理工学 院合作开发基于Internet的下一代远程监控诊断示范系统,这项工作同时也得到了 制造业、计算机业和仪器仪表业的Sun、HP、Boeing、Intel、Ford等12家大公司 的热情支持和通力配合。之后,由这些公司共同推出了一个实验性的系统Testbed。 Testbed用嵌入式Web组网、用实时Java和Bayesian Net初步形成在Intemet范围 内的信息监控和诊断推理。 另外,许多国际组织,如MIMOSA(Machinery Information Management Open System Alliance)、SMFPT(Society for Machinery Failure Prevention Technology)、 COMADEM(Condition Monition and Engineering Management)等,也纷纷通过网 络进行设备监控与故障诊断咨询和技术推广工作,并制定了一些信息交换格式和 标准。许多大公司也在他们的产品中加入了Intemet功能,如Bently公司的计算机 在线设备运行监测系统Data Manager 2000可以通过网络动态数据交换(Net DDE) 的方式向远程终端发送设备运行状态信息;著名的National Instruments公司也在它 的产品LabWindows/CVI和LabVIEW中加入了网络通讯处理模块,从而可以通过 Www、FTP、Email方式在网络范围内进行监控数据的传送。法国“ALARM”研 究组对生产过程的智能报警和监控系统进行了长期研究,并在多个项目中进行了 应用l¨J。 国内对于远程监控技术也开展了积极的研究。目前,西安交通大学、华中科 技大学、哈尔滨工业大学、南京理工大学等高校已取得了较为先进的研究成果, 基于ARM/VxWorks的Web视频监控系统的研究和设计 如西安交通大学研制的“大型旋转机械计算机状态监测系统及故障诊断系统 RMMD"、华中科技大学开发的“汽轮机工况监测和诊断系统KBGMD"、哈尔滨 工业大学的“微计算机化机组状态监视与故障诊断专家系统MMMDES”等都是 较为杰出的研究成果。国家和政府部门在交通、水利、军事等领域启动的大型项 目中,视频监控应用广泛、耗资巨大,同时跟Web技术相结合的项目越来越多【Z】。 具体从技术的发展和应用情况来看,现阶段视频监控的研究重心已经发生了 如下几个方面的转移: 、. (1)监控方式的改变:传统的基于RS232或RS485接口组网监控方式其作用 距离短,扩展能力差,如今网络技术已经很成熟,越来越多的系统都采取 基于网络的方式进行监控l31。在嵌入式系统中基于TCP/IP构建C/S或者 基于Web服务器的B/S方式越来越多; (2)监控系统的改变:视频监控系统分为两类,模拟视频监控系统和数字视频 监控系统。近年来随着半导体产业芯片技术和视频处理技术的发展,目前 绝大多数系统均经采取数字视频监控系统【4】。 (3)软硬件平台选取的改变:目前ARM技术发展迅速,国内在嵌入式微处理 器上构建Web服务器,采取uCLinux操作系统和ARM7系列的4510、4480 芯片居多,而在主流的支持MMU的ARM9系列微处理器上成功案例为 数不多。当前基于ARM9处理器的产品与开发越来越多,研究ARM9的 技术特点以及如何实现产品从ARM7到ARM9的升级或换代是当前为嵌 入式领域的热点问题。 1.3本文主要内容和工作 本文从前文分析的视频监控技术发展中的三个趋势出发,主要研究基于 VxWorks操作系统和ARM9平台上的嵌入式Web的数字视频监控系统,在完成软 硬件平台的设计之后,致力于研究视频监控系统在VxWorks操作系统级的底层软 件和服务器软件设计和实现,主要工作包含以下几个方面: (1)基于ARM的视频监控处理解决方案的设计; (2)嵌入式微处理器和嵌入式操作系统的分析和选型; (3)嵌入式操作系统的BSP设计和开发以及操作系统的移植; .3. 第l章绪论 (4)TFFS文件系统原理研究、在Flash上建立TFFS文件系统; (5)为支持网络及USB摄像设备,分别编写网卡驱动和USB主机驱动程序; (6)选取和移植合适的嵌入式Web服务器和数据库; (7)设计监控系统软件模块,编写满足监控要求的CGI程序。 根据课题的主要工作,论文的结构安排如下: 第一章为绪论,主要介绍课题背景和意义,分析和研究视频监控系统的发展 历程和趋势,并对本文的主要工作进行概括。 第二章对嵌入式技术在硬件和软件方面的发展应用做了全面的阐述,分析基 于ARM920T核的¥3C2410微处理器的体系结构、开发板的硬件参数,研究嵌入 式实时操作系统VxWorks在视频监控系统中的应用价值,剖析视频监控中的关键 技术,并对嵌入式Web服务器、嵌入式数据库进行权衡和选取。在完成这些研究 工作之后,设计了一套基于Web的实时视频监控应用框架。 第三章到第五章是本文的核心部分,详细地描述了监控系统在各个软件环节 上的设计和实现。第三章是关于VxWorks操作系统BSP的开发以及操作系统内核 在¥3C2410处理器上的移植过程;第四章是关于在VxWorks上建立TFFS文件系 统、编写以太网卡CS8900A的驱动程序以及USB主机驱动程序;第五章主要实现 了嵌入式Web服务器GoAhead在VxWorks上的移植,并建立嵌入式实时数据库 Berkeley DB的应用环境,编写相应的CGI监控管理服务程序,使之为客户端提供 各项服务。 文章最后一部分对整个课题所做工作进行了全面的总结,并对日后的工作做 了进一步展望。 基于ARM/VxWorks的Web视频监控系统的研究和设计 第2章Web视频监控系统总体设计 2.1系统功能框架设计 在远程监控系统中,往往要求监控端主机能够同时接收一路或多路来自受控 端的监控数据并且可以同时发送一路或多路控制指令到受控端,因此如何在带宽 有限的前提条件下将多个现场的监控数据方便而又高效地通过计算机网络传送到 监控端主机是监控系统要解决的主要问题之一。 本系统设计了一个基于TCP/IP网络的嵌入式远程数字视频监控系统,由监控 客户端和监控服务端组成,系统功能结构如图2.1所示。从功能单元来看,本系统 由监控设备、嵌入式Web服务器、网络客户监控端三部分组成。 _;__i 羞:=|=Ijj 监?j k二 专 ¨.j 控i 端 誓 i {积l觜S晕朋 ",j吐自哥~II)、j’¨矾uA‘对q × ?。。a … == . _ 1 r。 ,秘f I蛘霉辜#f£÷譬:;盛删麓, ~一一 一一 拳 l o i蕾: 州“譬誊 {;ii;_ ※:蓬:翌i 。 l TcP/IP远程传输 蒌 ii,!= ‘ |_| 鼗嚣凌i;辑蝴豫务器雾;数掰壤 。目i jI { 0^ 、 { ____ ’;灞J【jj;1。=; =:j j|:噌谢箔囝j。 墓9薹争 i砖矽学■i鲞签瞽? ; |:_=。--。。 一 .i兰 摄像设备l 羞t 摄像设备n .. j it“。。。:。 。。:。 簪叠 _=:_= j。 × ij i。。糍篓.纂-{-;;囊簿零惫攀毫i霉啭蓐.i。|} ; 。 ;。 ; 。 、j| 。 孽i i i。! j 雾i__| j。。 j| 薯。寺稿矛i;;;。j jj÷j趣≯誉 .爨弹j哮■ i?i一; z=慕。’ j , -j摄像设备l ? 摄像设备融i; o耋≥_=;!|: (1)监控设备。主要是指摄像机,用来采集监控现场的音视频。考虑到RS232 和RS485总线标准的传输速率较低,为了提高视频传输速率,系统采用 了USB接口的摄像设备(USBl.1的最高数据传输率为12Mbpst5l,USB2.0 则提高到480Mbps[61)。通过USB2.0接E1,无需担心数据传输时发生的瓶 第2章Web视频监控系统总体设计 颈效应,另外使用USB数字摄像设备,不需额外的采集设备即可获得实 时的无压缩的视频数据、实现对图像的捕捉,同时还可根据产品厂商提供 的函数库进行二次开发。 (2)嵌入式Web服务器。该部分是整个监控系统的核心,包含了硬件和软件 两个方面,是课题设计和实现的重点,其具体功能结构将在下文(2.2节) 中进行描述。产品在应用时,每个服务器将拥有自己独立的Ⅲ地址,在 监控端可以通过浏览器界面访问服务器。其主要功能有如下几个方面: ①.为监控端提供Web页面的访问; ②.对监控端的访问进行有效性、安全性等检查、响应监控端的请求; ③.为监控端提供所需音视频和图像; ④.接收监控端的控制信息,经过软硬件转换后实现对摄像机进行控制。 (3) 远程监控端。它的功能则是显示现场视频,并根据用户需要向服务器发送 视频请求或摄像机控制信号。监控端可以是安装了Windows或其它通用 操作系统的主机,但上面必须有能实现Web访问的浏览器软件。 2.2系统硬件结构框架 从嵌入式系统设计者角度来看,硬件通常是第一考虑因素;而从处理器的角 度来说,流水线级别的高低是硬件性能高低的风向标,流水线的设计不同会产生 一系列的硬件差异。作为32位的RISC架构,低功耗、高性能的ARM处理器在 各个领域的应用中曰趋广泛,对传统8位和16位的处理器提出了挑战。目前市面 上ARM处理器以新一代的ARM9系列为主流,该系列处理器相对于ARM7系列 在性能方面有了很大的提升,CPU流水线从3级增加到5级,主频多半在200MHz 以上,指令周期得以改进,能够达到两倍以上于ARM7处理器的处理能力,同时, ARM9的新特性在能够满足各种新需求的同时,还可以减少产品研发时间、降低 研发费用f_71。目前,该系列处理器在手持电话、机顶盒、数码像机、GPS、PDA及 因特网设备等方面有着广泛的应用。由于许多嵌入式微处理器(如ARM7系列) 没有MMU而不支持虚拟内存瞪j,没有内存管理单元的好处是简化了芯片设计,降 低了产品成本(因为大多数的嵌入式设备没有磁盘或者只有很有限的内存空间, 所以无需复杂的内存管理机制),但这样做将导致内存空间没有受到保护,所有程 基于触巩价,xW.od(S的W.eb视频监控系统的研究和设计 序访问的地址都是实际的物理地址,因而在嵌入式系统中应用支持MMU的现代 操作系统可以增加系统的可靠性和稳定性。MMU主要包括两个功能:一是支持虚 拟/物理地址映射,二是提供不同存储器地址空间的保护机制19J。现代多用户、多 进程操作系统,都需要MMU才能使每个用户进程都拥有独立的地址空间。本系 统中选取了支持MMU的ARM920T内核的¥3C2410X处理器,结合该处理器设计 的基于嵌入式Web服务器的监控方案硬件结构如图2.2所示: 图2.2嵌入式Web服务器的硬件结构 Fig.2.2 Hardware Framework of Embedded Web Server 硬件平台主要由CPU芯片、单路或多路USB网络摄像机(或MPEG音视频 采集卡)、Flash存储器、SDRAM内存、以太网络接口、大容量存储设备(CF卡、 Flash或硬盘等)组成。根据网络带宽、拓扑结构以及对图像质量的要求,可以采 用基于MPEG-4标准的分层可扩展性编码方案,压缩后的视频数据根据需要可以 存储在大容量硬盘中,也可以通过以太网进行网络传输。若采用基于图像传感器 的摄像头,那么可以直接将编码过后的数据传递给处理器。为了实现视频存储功 能,若系统本身提供的Flash容量有限,可采用大容量的存储设备如CF卡、Nand Flash或硬盘等进行存储。 第2章Web视频监控系统总体设计 2.3系统软件设计 嵌入式Web服务器的软件设计和实现是本系统的关键,是本文的重点工作, 主要包括嵌入式操作系统及其底层驱动程序和基于Web的应用软件两个部分。 2.3.1嵌入式RTOS VxWorks 嵌入式操作系统是支持嵌入式系统应用的系统软件,是在实时性、硬件相关 性、软件固态化等方面有着突出特点的专用操作系统。用户所寻求的操作系统应 该具有的最重要的特点是,它必须具有可靠性高的实时性能、含有丰富和灵活的 可下载到最终产品板上的功能模块集、并能与综合全面的主机开发环境协同工作。 由于选用了支持MMU的微处理器,本系统采用支持MMU的嵌入式实时操作系 统VxWorks(像ucLinux操作系统就不能支持MMU),需要根据系统需要对操作 系统进行小型化裁剪。用户在开发日益复杂的32位嵌入式处理器的产品时,需要 一个用来连接产品应用程序和底层硬件的操作系统。其基本的特征‘1川主要有如下 几点: (1)具有一个支持任务快速切换、多级中断、抢占式和时间片轮转调度等的微 内核——Wnd内核。微内核的设计减少了系统开销,保证了对外部事件 快速准确的反应。 (2)具有高度的可裁剪性。开发者完全可以根据自己的需求来分配内存资源; 模块化的设计方式可以让开发者进行合理的选择和配置;同时,模块子系 统本身也是可裁剪的,使得开发者可以对应用程序进行更加优化的配置。 (3)包含综合的网络工具,支持Berkeley网络的各种特性。 (4)兼容POSIX 1003.1b实时标准。遵循POSIX 1003.1b和1003.1中有关基本 系统调用的规定,包括:过程初始化、文件与目录、]/O初始化、语言服 务、目录处理;还支持POSIX 1003.1b的实时扩展标准,主要包括:异步 I/O、计数器信号量、消息队列、信号、内存管理和调度控制。 (5)’采取板级支持包(BSP)的开发方式可以很方便的让系统移植到其他硬件 平台。 .8. 基于ARM/VxWorks的Web视频监控系统的研究和设计 2.3.2应用软件的设计 服务器的应用软件系统主要由Web服务器、CGI程序、嵌入式数据库Berkley DB、视频调度与传输模块、存储管理与调度模块、摄像机控制模块等几个重要部 分组成,结构如图2.3所示。 ,:, jf。-≯。墨孑。:j 掌ji?冬簟?’警、 鬈譬::j jj==:j誊:’j ’:。?:77 Ij:。…。节?il!;. 『j。::?置=:=篱::鍪:≯-,j鬈:,荔i‘.,!荔:-:j_孑j,■?=:。=。’ :一…-:Ii7≮, 7’ 。 y 7’ , 一 K Zj j7=-}::≯;≯”j,,嵌入式web服务器:‘:,I_-:, 簪:i 。 、HITPJTCP艘’ j。毳:霪 i::;,:,·:毒:==j孑一:”i?i;jj』:,i ji薹妻;一:ii!j,:,:i.=_:,7:一 ┃。+一■≯∥彰;::oGI应甩程謦:::7,。:,,,‘7_一1 7一, . 7 ┃专 ≥鬻 ┃戮=::l:,一:l缁撇≥¨;::=:。≮数据摩哼:≥.,7:,?1l视频黻≯爹j j渗 彰 ┃ ┃ ┃ ┃豢≥ .; jl纂 ┃ ;,j=-。’}一囊 ,?:x 7善: ┃ , : ,: 一,7 :: , 灞 ┃ ┃:爹j乏;::≯ ┃ ┃ .-∥:i::l存储管理与0: ┃ : ^ 1 ┃ R’rP^p ┃ I|I篱 ’l::,¨l:■.; ┃ : ┃ ┃§,i。:苏‘|=:…一一?,7:t‘二:::l味i二,,, ,|I嚣 ┃ ┃ ┃ ┃。I: ┃ 术 ┃ ,7j,≥j ┃ ┃;j视鞭 :,1‘ j孽 ━┫ ┃ ┃囊’一t一。: : : , ■。:。:“。~二。一~锄,mj,:。 图2.3嵌入式Web服务器的应 Fi.2.3 Applicaions Architetue of Embdde Web 2..2.1 Web服务器与 (公用网关接口)来实现动态Web技术,CGI规定了Web服务器调用可执行 包可供选择,它主要用于解决嵌入式系统开发的相关问题。同时,系统采CGI Serr软件 Seer, 控端的访问权限进行控制、过滤监控端的请求和控制信息、处理多个端的请 用程序模块的接口以及视频数据浏览界面和摄像机控制界面。此外,要对监 Web服务器通过}ITrP协议与监控端浏览器软件进行信息交互,其他应 Sver 求及控制的同步和优先级问题。尽Wind River公司本身提供Win Web 但纵观其它高性能Web服务器,另有由GoAhead公司出品的源Web 程序(CGI程序)的接口协议标准。Web服务器通过调用CGI程序实 第2章Web视频监控系统总体设计 的交互,也就是CGI程序接受浏览器发送给Web服务器的信息,进行处理,将响 应结果再回送给Web服务器及浏览器。原则上CGI程序可以用任何程序设计语言 编写,但是用C语言编写的CGI程序具有执行速度快、安全性高等特点【1¨。 2.3.2.2嵌入式数据库BerkleyDB 嵌入式远程监控系统中需对实时数据进行采集和处理,数据处理通常有两种 方式:一种是基于文件方式,另一种是基于数据库方式。对于文件方式,由用户 直接对记录所在的文件进行操作,I/O开销较大,同时由于应用程序是以独占方式 打开数据文件的,因此数据的共享性和应用软件的可重用性差,影响了系统的整 体性能;对于数据库方式,由于数据和程序相互独立,可有效地对数据进行存取、 查询等共享操作,同时借助于数据库所具有的安全性检验、完整性检查等多种安 全措施,可确保系统具有较好的整体性能¨翻。Berkeley DB是由Sleepycat Software (现已被Oracle收购)公司开发的一套开放源码的嵌入式数据库的程序库,它为 应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务flm,为数据 的存取和管理提供了一组简洁的API接13,是一个经典的C.1ibrary模式的工具集, 为程序员提供了丰富的函数集。数据库操作并不要求进程间通讯、为多种编程语 言提供了API接13,其中包括C、C++、Java、Perl、Tel、Python和PHP,所有对 数据库的操作都在程序库内部发生,多个进程或者同一进程的多个线程可同时使 用数据库。同时轻便灵活,一旦Berkeley DB被链接到应用程序中,终端用户根本 感觉不到有一个数据库系统存在。同时它具有良好伸缩性(Scalable),Bekerley DB 的数据库library十分精简(不到300KB空间),却能够管理规模高达256TB的数 据库;支持高并发度,可以让成千上万个用户同时操纵同一个数据库。可见, Berkeley DB能以足够小的空间占用量运行于有严格约束的嵌入式系统,在嵌入式 应用中比关系数据库和面向对象数据库要好,因为数据库程序库跟应用程序在相 同的地址空间中运行,数据库操作不需要进程间的通讯。在一台机器的不同进程 间或在网络中不同机器间进行进程通讯所花费的开销,要远远大于函数调用的开 销;同时Berkeley DB对所有操作都使用一组API接口,因此不需要对某种查询 语言进行解析,也不用生成执行计划,大大提高了运行效率。本系统中,用户信 息的存储,用户的登录登出,视频设备参数的存储与查询,视频文件的存储与查 基于ARM/VxWorks的Web视频监控系统的研究和设计 询等都需要一个嵌入式数据库。本系统将选用Berkley DB作为本系统的后台数据 库。 2.3.2.3视频调度与传输模块 视频调度与传输模块为监控端提供所需的实时视频信息,是服务器应用软件 中最重要的模块。该模块根据所采取的网络传输与控制协议与监控端建立连接, 监听监控端的请求;同时又根据不同的服务类型采取相应的调度策略创建视频流, 然后将视频数据分组、打包、发送到监控端,并根据路由器和监控端反馈的网络 状态信息进行差错处理和拥塞控制。 视频数据的传输一般采UDP网络通讯协议,而采用UDP.的Ⅲ传送方式有点 播、广播和组播三种,其中组播是服务器只向特定的用户组发送一个数据包,组 中的各用户可以共享这一数据包,而组外的用户却无法接收到。本系统采用口组 播方式,采用组播技术的优点有以下几点:可以让服务器承担大量客户端的视频 数据播送要求;由于数据包拷贝数量和发送目的地址少,大大减少了网络中传输 的数据总量,从而保证较高的服务质量;减小了视频数据流传输的带宽占用,减 轻了服务器的负担。 2.3.2.4存储管理与调度模块 存储管理模块的主要功能是将压缩和编码后的视频信息根据一定的策略存储 至磁盘中特定的区域,并将视频文件信息存储到嵌入式数据库中,以供检索与回 放,同时响应视频调度与传输模块的请求,按照一定的磁盘调度策略和优先级顺 序从磁盘中读取视频数据至内存缓冲区。对于存储管理,本系统采用等长分组存 储策略,即将视频信息按照时序关系分割成若干数据单元,这些数据单元称为分 组,将每个分组存储于一个大小固定的存储单元内。 2.3-2.5摄像机控制模块 摄像机控制模块主要实现对摄像机的控制。在监控端,用户通过浏览器向Web 服务器发送摄像机控制命令,控制命令经Web服务器接收和处理后,再通过CGI 程序发送给摄像机控制模块,然后被转换成相应的对摄像机控制的硬件操作指令, 从而实现对摄像机云台镜头的远程控制。 第2章Web视频监控系统总体设计 2.2本章小结 本章首先设计了视频监控系统的硬件结构,为了.更好地的支撑硬件平台,增 加系统的实时性,选取了支持MMU的嵌入式实时操作系统VxWorks,并且设计 了服务于远程视频监控的应用软件结构层次。为后续的具体研发工作提供了良好 的框架体系。 基于mm价,xWbrl(s的Web视频监控系统的研究和设计 ·第3章视频监控系统中的BSP设计 在前文的分析中,本课题选用的硬件系统是傅立叶公司提供的¥3C2410X开 发套件,在系统硬件平台准备好后,主要任务是在硬件平台上实现嵌入式实时操 作系统VxWorks的移植,主要涉及到BSP和各种驱动程序的编写。本章中将结合 其硬件环境阐述VxWorks的BSP技术及其设计和开发过程。 3.1 VxWorks的BSP技术 BSP的中文含义是板级支持包,它是介于硬件主板和VxWorks操作系统之间 的中间层软件,为VxWorks内核和硬件之间建立一个桥梁,为双方提供操作接口, 使VxWorks和硬件主板能够更好的打交道。通过图3.1可以了解VxWorks内核、 BSP与硬件之间的关系i1引。 繁瑟警?蟊薹赢磊;鬻琴彩狻 黧?:£.7系统上层斑用程謦 7’ ,l 黪}戮荔够鹈玩0一::。A_,,㈠t~o譬j§勿彩荔;,缓 匿i薹妻妻j磐警事?!?::篓荔劲《;荔荔!曼j!黪支爹寰l。i≥.;jI 孽畦:=.=!j:?≈j:.∥≯:,==,:+,玉fo, 系,统:=:=:≯篓“参ii“二i绷习黪!itzi荔巨织·,:※i,?:“0:jV.卿,%∥d档支持掣 库:≯7·:≯■t;.,:。|||I 上T 巨睦E、i 嵌!嵌jPj,P珊IP协协议议謦栈.,. j!,7习,.ja{ 上下 巨薹-『』文件系缀j鬣溺 匿荔≯胍森口;,:≥j 7霭 瞄; zf 7, ,■:,‘^ ,;,,j,:y o::,r二i7:;‘■/z,^g※-'o《≯z甜^?*艟0群群,;j#∞}:,g-■:v础。、n,矿o,一,=:7一*j.{一。地 ~ L , ; 二冀:州.■翻 移设备茏美豹驱动程序囊 鞔… ∥:?i:j j,一i々“:}麓 ∥i…7。l睁内蟛黧;譬瀚 ∥。渊萼匡动j j 7: 善.::, 。_::■: 。:: ●h—————● , ’j ::!y。。、一c:7乎7‘5F:jj¨学 一 , ■≯。。: ∥一j:。…:琴 BSP(扳级支持包> ~7 ●}—————斗 以太掰卡驱动j 0i: ,。:. 荔:毵,澎::.::。’扣j绣 ‘- , 一≯ ' …,…· ,,, , 一, ,一.. :,: 《 二。j ? 乏 、菇 ● ● ● ● ◆ ◆ ◆ ● 匿惫?sz警掣哆:!i豹霞每譬通慧繁警擘舅 匿定时譬塑——≯7,+以太网控掣器,I| l§塞≥荔}#i缮”7二““二…==!:弩冀?缪够糍 荔≯:’,底层硬件7,7缵 赛黼荔缓;裁.饬。。施。二。,≯张¥名船形:,磊翁 图3.1 VxWorks内核、BSP、硬件之间的关系 Fig.3.I Relationship between Wind Kernel、BSP and Hardware 第3章视频监控系统中的BSP设计 3.1.1 VxWorks BSP基本功能 BSP(本课题所用VxWorks操作系统版本为5.5,开发工具为WindRiver提供 的Tornad02.2)是处于操作系统和硬件之间的硬件抽象层‘博l,它的主要功能是在系 统加电后初始化目标机硬件、初始化操作系统并提供部分硬件的驱动程序,具体 功能包括: (1)前期初始化。所谓初始化是指从系统上电复位开始直到VxWorks内核使 用usrRoot()初始化应用程序前(即系统执行到usrApplnit()函数处)这一 段时间内系统所执行的过程。这个过程主要包括三个部分的动作,如图 3.2所示: ·CPU的初始化。初始化CPU内部寄存器(例如状态寄存器、控制寄存 器、高速缓存等)。 · 目标机设备初始化。初始化控制芯片的寄存器(如BUS,DMA, DRAM),I/O设备寄存器(驱动各设备),为整个软件系统提供底层硬 件环境支持。 ·操作系统资源初始化。为操作系统的正常运行做准备,进行资源初始 化(如操作系统的初始化、空间分配等)。 图3.2 BSP前期初始化流程 Hg.3.2 Preliminary Initialization Process of BSP (2)使VxWorks能够支持访问硬件驱动程序。这主要是指BSP包含部分必要 的设备驱动程序集和相关周边设备的初始化操作。 (3)在VxWorks系统中集成硬件相关的软件和其它硬件无关的软件。 3.1.2 VxWorks BSP组织结构 安装完VxWorks对应的BSP开发包之后,BSP源码会拷贝到系统 基于舢tMⅣxW.orl(s的Web视频监控系统的研究和设计 ¥(WINDBASE)\target目录之下。在编写BSP时,重点关心两个目录下的文件: \切昭贰oIlfi卧all和target\config\bspName。严格的说,前者并非BSP包的一部分, 但是所有的BSP都会引用在该目录下定义的模块。下面简要分析各目录中一些重 要文件的作用‘1同。 (1)目录target\configkAlh该目录下文件供各种BSP共享,通常不需要修改: ·configAU.h-通用的内核配置文件。 ·bootContig.c.引导ROM映像的主初始化。 ·bootInit.c.ROM初始化的第二阶段。 ·usrConfig.C.完成VxWorks映像初始化代码。 (2)目录target\config\comps\VxWorks:VxWorks内核基本组件描述文件。 (3)目录鹕眦onfig\CoInp妯rC:该目录涉及到系统内核组建的配置文件,主 要由target、configkAU中usrConfig.c中的函数调用。 (4)目录target\config\bspName:包含具体硬件对应的BSP文件。重要的有: ·Makefile:BSP编译控制文件。 ·README:BSP发布纪录、版本、总文档。 ·config.h:CPU硬板的设置和定义(includes,defmifions)文件。 ·configNet.h:网络驱动的主要设置文件。 ·romlnit.S:VxWorks Boot ROM和基于ROM映像的入口。 ·sysALib。S:程序员可以把自己的汇编函数放在该文件中,在上层调用 VxWorks Image的入口点。RAM中执行的第一个函数syslnit()在这个 文件里。 ·sysLib.c.包含一些系统相关函数,为板级的接口。 ·sysScsi.c.可选文件,用于SCSI设备设置和初始化。 ·sysSefial.C:可选文件,用于所有的串口设置和初始化。 ◆bootrom.hex:包含VxWorks Boot ROM的十六进制文件代码。 ·VxWorks:运行在目标机上、完整的、连结后VxWorks二进制文件。 3.1.3 VxWorks引导过程分析 在VxWorks系统中,内核映像可以分为三种:可加载型内核(Loadable Image)、 第3章视频监控系统中的BSP设计 带有ROM(Rom—Based Image)启动功能的内核和驻留ROM(ROM—Resident Image) 的内核,这三种类型的映像组织结构不一样,因而其启动过程也有所区别。三种 内核映像的加载过程及调用的例程大致分为三个阶段,如图3.3所示。 基于l的M和驻留ROM映像的加载过程 嚣前 黜电殿ad曼陈,a捉 b瓣嘲够 le二黧翻 蓁燃蝴JV…xWork址s睦嗣syslnfl皇Oi 初 映像的入口地址 I?删弧5甲‘{ 始 } j I mm蛾姊钧列 匕.,锨l曲◇,勿 } ’ |!{坟嘲nit.c巾露 医f。ms雠囝翻 0 系统上电初始化CPU及R AM、关闭中断和看门狗 、清除c∞he、IE置RAM 空间 拷贝RoM中内核映像相 应的段到RAM中、清除 未用RAM、解压 ’, J[_:?!『薹每.c中每基弗j-—]执行最小化内核初始化 . 量 霸 瞵戮l鹾塑 i 陟:一茜运|| 茬 配置内核数据结构 关中断、初始化硬件 . 菱 妻 囊臻 一批㈣陋攀飘面嘲 鼢*7∥“{’0~+,,…翻 ‘戚:淼枷 芸中蒜-的:攀瑟翟凋嗍 桁仵落.初治让由 ;;; 荐位薯磊用:尸累,磊W潞用样忏墅幕口il ● 口 内 使能时钟 r,,H.。, 7二”x’一习 ! 核 后 期 藉 毳 燃脚断匕o:i: 譬c,7j,,j 巧 i 誊两鳓㈠≮嘲 差 巨sys-C1kE赫”戮竺篆舅豢磊 葭I壶一。’瓣嬲序 副、 境 图3.3 VxWorks内核映像启动过程 Fig.3.3 Booting Process of VxWorks Image 可加载型内核映像首先需要执行固化在目标机上的引导代码(例如VxWorks BootRom、UBoot或其他引导程序),引导程序代码运行时加载在内存的 RAM—HIGH.ADRS处,通过串口或者网络将系统映像从宿主机上装载到目标机的 基于ARMⅣxW.or】ks的Web视频监控系统的研究和设计 RAM中RAM—LOW ADRS处的地址空间,然后继续执行。带有ROM启动功能 的内核映像可以自动执行上述拷贝和解压工作,在拷贝和解压完毕后,与可加载 型内核映像的执行流程是一样的。驻留ROM的内核与带有ROM启动功能的内核 相似,唯一的区别就是它仅仅拷贝VxWorks映像的数据段(data),而代码段(text) 仍然保留在Flash中执行。进一步分析和阐述BootRom和VxWorks映像启动过程 中用到的主要例程‘171有,romInit()、romStart()、sysInit()、usrInit()、kernellnit()、 usrRoot(),其具体功能在3.3.3节中有描述。 通过分析BSP的原理不难发现,在ARM处理器系统上电后会自动加载并运 行地址O处的指令,该指令为一跳转指令,它是CPU跳转至lJ_romlnit()(硬件初始 化的入口),完成处理器模式设置,关闭中断、看门狗、清除Cache、配置内存空 间等,romStart()将ROM映像(启动代码或者VxWorks内核映像)拷贝至RAM 中,如果ROM映像中不含内核,则由启动代码将内核载入RAM;而sysInit()为 RAM中运行的内核入口程序,完成与romInit()类似的功能后执行usrInit()(内核 的第一个C例程),usrInit()会根据BSP的配置完成整个内核的前期初始化工作, 再通过kernelInit()去激活多任务环境,安装相应的设备驱动,初始化VxWorks的 系统库,调用应用程序。 3.2 S3C241 0的BSP设计 3.2.1 S302410硬件平台 本课题中采用的开发板是西安傅立叶公司提供的FFIR410开发套件,基于三 星公司出品的S3C2410处理器,该处理器为ARM920T内核16/32位的RISC CPU, 拥有独立的16KB指令和16KB数据Cache、MMU内存管理单元、NAND Flash、 Nor Flash Bootloader,系统管理单元(SDRAM控制器等),3通道UART,4通道 DMA,4通道具备PWM功能的定时器,加口,I淝(实时时钟),8通道lO位 精度。ADC和触摸屏控制器,IIC总线接口,BS数字音频总线接口,USB主机, USB设备,SD/MMC卡控制器,集成LCD控制器(支持STN和Ⅱ∞,2通道SPI 和PLL数字锁相环,主频最高可达203MHz[181。¥3C2410开发板在此基础上外扩: 两片32MB的三星SDRAM共同组成64MB内存,一片NOR Flash(2MB),用以 第3章视频监控系统中的BSP设计 存放系统上电引导程序,一片NAND Flash(64M),可以用来构造文件系统存储 操作系统映像和其他数据。其硬件功能模块结构图3.4如下: 图3.4硬件功能模块结构 Fig.3.4 Hardware Module Architecture 3.2.2 S3C241 0 BSP的设计 为了实现操作系统内核在启动前正确初始化S3C2410的硬件设备,本文设计 该BSP主要实现目标板的如下功能[191: ·初始化工作,包括目标板硬件初始化,内存控制器初始化,堆栈初始化, 外围设备初始化; ·完成定时器、异常向量、中断处理程序;VxWorks是一个多任务的实时操 作系统,任务调度和时间计算等都是依赖定时器实现,因此定时器是操作 系统重要的环节; ·实现VxWorks对S3C2410的MMU和Cache处理; ·完成硬件底层驱动:TFFS驱动,网络驱动,USB主机驱动。 3.2.3搭建交叉开发环境 本课题的开发环境是运行于Windows XP上的Tomad02.2,配合ADS调试工 具、Ftp工具、烧写工具、仿真器等建立交叉开发环境。Tornado是嵌入式实时领 域里最新一代的开发调试环境。Tornado给嵌入式系统开发人员提供一个不受目标 机资源限制的超级开发和调试环境。Tomado包含三个高度集成的部分:运行在宿 主机和目标机上的交叉开发工具和实用程序;运行在目标机上的高性能、可裁剪 基于ARMⅣxWbrks的Web视频监控系统的研究和设计 的RTOS VxWorks;连接宿主机和目标机的多种通讯方式,如:以太网,串口线, ICE或ROM仿真器等。Target Server与Target Agent间使用WDB(Wind Debug) 协议进行通信,它好比一座桥梁将目标机与主机上的Tornado开发工具联系在一 起。所有的Tornado工具(诸如Shell、Debugger及Browser)使用WTX(Wind River Tool Exchange)协议同Target Server通讯f201,Target Server再将请求消息送往目标 机上的TargetAgent,这就避免了主机工具频繁地访问目标机。wtxregd(注册器程 序)是以进程的形式(wtxregds。exe)运行在Windows主机上。由于Tornado开发 工具并不直接访问目标机,因此由wtxregd来维护着这些开发工具与Target Server 的连接信息。Tornado协议机制及使用Tornado建立的交叉开发环境如图3.5所示。 Host宿主机Target目标机 图3.5 Tornado交叉开发环境 Fig.3.5 Tornado Cross-development Environment 3.3 S3C241 0的BSP编写过程 3。3.1 Maker.1 e控制内核 Makefile是用于控制整个BSP编译的文件,主要包括以下几个方面的描述: ·描述信息——包括CPU(CPU的类型、厂商、BSP的版本等)、TOOL(用 于选择编译工具链)、路径等的设置。 ·地址映射——定义了一些关于RAM和ROM等的重要宏。 第3章视频监控系统中的BSP设计 ·各文件和模块的编译规则。 需要在该文件中根据相应的硬件类型和存储器大小及其各段的分配地址进行 修改,可以将额外定义的模块添加到文件中。 3.3.2修改配置内核选项 通过config.h文件来配置内核,其内容组织大致依次可以进行BSP的版本和 版本D号定义、定义Cache和MMU、定义共享网络存储器配置、定义板载RAM 的起始地址和大小、定义板载ROM的起始地址和大小、定义非易失存储器的参数、 设置启动参数bootline、设置可选的定时器驱动、设定网络设备、选择WDB调试 设备等配置。内核模块是通过宏定义来增删的,将需要添加的模块用#define定义, 不需要的模块用#undefine去掉,这样可以减小内核映像的大小。定义启动行参数: #define DEFAULT BOOT_LINE”cs(0,O)host:/vxWorks h=192.168.0.2、 e=192.168.0.10:ffffff00 u-denven pw=denven m=vxWorks” 根据¥3C2410存储器空间布局‘211(如图3.6所示)来配置ROM和RAM的地 址,左侧为使用非NAND ROM启动系统的布局,右侧为使用NAND Flash来启动 的布局。 O驴FFf:FFFF a碰}809 O饿墙 蝴豳.赞∞耐 乜融毡话—簿宇车 914∞砖叠∞O 圈 axaaaa-ao∞ 铷30∞:!。饿蛙 O垃翱Da!p∞O OX2000=_.0000 oxt∞o_oooo Oxl000_0000 OX0800 0300 撇U砌 S—t^豫t.. 撇tj删 SoR^罩辛 eBAKK7.ar.;csv) SDR埘 0S,^NKS,nGcS勘 SRo囊^ (BANK5,nGCss) SRoM ∞ANK4,.Gcs4) SROM 绢IAwK文“scsa) SROM 钼A蝣灶,nGCS2) SRo觚 往}A持K'.刑3CS{, 00000_OODO 。磺f’:∞·-al,’a 硒r咖舡n口ROMn嘲 -'辩ol缸毒£f叼j NtU‰IO O日li{1:∞-_∞ 帕"●搬814ANO娌酗b船 扫∞材n口Ro■ 图3.6¥3C2410的存储器空间分布 Fig.3.6¥3C2410 Memory Map after Reset 基于舢之MⅣxW酬b的Web视频监控系统的研究和设计 本课题采用前一种方式来启动系统,根据内存的地址空间布局发现64M的 SDRAM的物理地址范围是0x30000000~Ox33FF FFTF(属于Bank 6),因此在配 Ox3㈣O 置时关于RAM和ROM的地址设定如下: #define LOCAL MEM—LoC舢L-ADRS ‘ 产物理地址的开始吖 #define LOCAL_MEM—BUS—ADRS 0x0删O #define LOCAL-MEM_SIZE AI。MEM—END—ADRS(LOCAL_MEM—LoCAL瑚RS+\ #define LoC LOCAL_MEM_LOCAL_ADRS 产物理内存大小64 Mbytes吖 ox0删O #define ROM_BASE_ADRS LOCAL MEM S亿E) ,幸ROM基地址吖 #define ROM_TEXT_ADRS ROM_BASELADRS 芦ROM中代码开始地址杉 #define ROM—SIZE Ox00200000 产ROM中保存内核映像的地址幸, #define ROM COPY SIZE ROM SIZE #define ROM_SIZE_TOTAL Ox00200000 严ROM总大小}, #define RAM—LOW_ADRS 0x30001000 产映像在RAM中的入口地址幸, #define RAM_HIGH_ADRS 0,【33e00000 产引导代码在凡气M的起始地址杉 再配置串口和网口加载方法,配置Cache模式和MMU,去除不需要的网卡驱 动,配置中断模式,配置内核其他组件(关于Cache和MMU以及内核其他组件 的配置将在3.3.4节中详细讲述)。 3.3.3内核前期初始化 通常在内核的多任务环境建立起来之前的工作称为靠内核前期初始化’’,我们 依次需要用到下列例程汪21,具体来说需要修改两个文件,即romlnit.s和sysLib.c。 ·mmlnit():配置MMU和Cache(-F一节),禁止中断并将处理器切换到 SVC模式,关闭看门狗、屏蔽中断和子中断,配置处理器时钟。 ·romStart():拷贝ROM中的映像至RAM中并跳转到映像的执行入口。 ·usrlnit():清除BSS、初始化Cache支持库、安装中断向量。 ·sysHwlnit0():初始化Cache和MMU运行库。 ·sysHwInit():安装IRQ/SVC模式的堆栈设置程序。 ·usrKernellnit():初始化类库、任务变量、配置内核任务队列,激活内核 并生成系统的根任务usrRoot()。 ·usrRoot():根任务,用来完成剩余的初始化工作,包括MMU、文件系统、 网络协议栈和网络设备以及用户程序的初始化。 在romInit.s中设定内存系统以及片子的片选,刷新周期,注意在配置刷新周 期时一定要与具体板上扩展的SDRAM相一致,否则片子无法正常工作。关闭缓 第3章视频监控系统中的BSP设计 存建立内存控制器。在调试这段代码的时候,由于串口网口都没有启动,因此只 能通过点灯程序来跟踪程序的执行情况。另外,在romStart()跳转到romlnit()的C 程序之前尽可能少地初始化硬件。硬件的初始化是sysHwlnit()程序完成的任务。 romlnit.S主要工作由函数romInit()完成,该函数是所有固化在ROM或者Flash里 VxWorks映像首先执行的代码。主要完成的任务有:禁止中断,使处理器复位。 通过设置CPSR的I-BIT和F-BIT都为1来实现。还要设置中断寄存器为关模式, 同时将处理器切换到SVC32模式下,屏蔽AIC中断。 sysLib.C是BSP初始化的核心代码,在这个文件中必须复位所有硬件,使硬件 处于初始化状态,以保证在后面中断使能之后,不会产生没有初始化的中断。基 于它提供的板级接口,VxWorks应用程序的构造与系统无关。该文件功能大致包 括:初始化功能、存储器/地址映射功能、总线中断功能、时钟计数器功能等。如 下是其中两个重要的函数sysHwlnit(),sysHwlnit2()以及代码注释。串口设备的初 始化在sysSerial.C中完成初始化设备描述符:设置设备参数地址、波特率、以及设 备中断级。 3.3.4 MMU和Cache处理 MMU提供对操作系统虚拟内存和内存读写保护机制,Cache则可以加快CPU 对程序的执行速度,不必每次均从内存中读取数据,一个具有高可靠性的现代操 作系统必须具有良好的内存保护机制,同时在运行的程序需要占用内存大的情况 下,MMU的支持将使得这两者得以完善。尽管MMU在操作系统中增加了一个中 间环节而导致性能下降,但是Cache的存在解决了这个问题。¥3C2410具有高速 MMU和Cache,为了让VxWorks充分利用这些硬件特性,在设计BSP时,启用 MMU之后,Cache就由MMU控制。先在config.h文件中设置启用Cache和MMU 以及其模式。 #undef USER_I_CACHE MODE #define USER I CACHE_MODE CACHE WRITETHROUGH #undef USER—.D—.CACHE_MODE #define USER D C:ACHE MODE CACHE_COPYBACK }fundef INCLUDE_MMU_BASIC #undef INCLUDE CACHE SUPPORT 基于ARMⅣxwbrks的Web视频监控系统的研究和设计 根据romlnit()的作用,必须在这些例程中对内核前期进行初始化配置。MMU 是由系统控制协处理器的2、3、4、5、6、8、10号寄存器和l号寄存器的一些位 进行控制的。CPl5的寄存器只能被MRC和MCR指令访问。 严设置MMU控制寄存器幸, mov rl,#MMU._INIT_VALUE 产后面的宏定义在mmuArmLib.h中幸, #if defmed0NTEGRATOR—EARLYj-CACHE_ENABLE) OFt rl,rl,#MMUCR_.!_ENABLE 严使能Icache*/ #endif incr epl5,o,rl,el,cO,0 芦写MMU_CR寄存器影 严清空写缓冲吖 movrl.j|fo lncr cpl5,0,rl,e7,e10,4 ,木清除指令和数据的缓冲吖 Ⅱlcr epl5,0,rl,e7,c7,0 严将处理器D寄存器置零吖 movrl,柏 mcr cjpl5,o,rl,e13,e0,0 严清零吖 严清零幸, MMU的功能主要是由VxWorks中的一些库函数来控制和实现,启用MMU 支持后,让BSP负责提供物理内存描述的支持,通过sysLib.c中的全局MMU映 射表PHYS_MEM—DESC【】来实现,其中的每一项映射内容形式是用结构体 sysPhysMemDesc来描述的,sysPhysMemDesc结构的形式为: typedef smmt phys—.mem_desc { void*virtualAddr; void*physicaIAddr; UINTlen; UINT initialStateMask; UINT initialState; }PHYS_MEM_DESC; ,幸虚拟地址吖 ,幸物理地址吖 产长度拳/ 严各状态初始设置掩码丰, 产初始状态吖 可以看出其包含:“虚拟地址l,物理地址2(==地址1),长度,屏蔽,读 写权限及Cache允许或禁止等}}‘231,当RAM同时被两段或两段以上的总线操作时 候不能设为CACHEABLE,否则会因Cache不能及时更新RAM而出错。对PCI 设备的映射必须加入映射表,然后再写。因而除了建立最主要的系统RAM(如下 所示)的映射之外,还需要在该文件中建立Nand Flash、网卡CS8900A、UART、 时钟和定时器等设备地址映射。 .23. 第3章视频监控系统中的BSP设计 (void幸)LOCAL_MEM_LOCAL_ADRS, 严虚拟地址吖 (void幸)LOCAL_MEM_LOCAL_ADRS, 产物理地址吖 ROUND—UP(LOCAL_MEM—SIZE,PAGE SIZE),产长度丰, VM_STATE_MASK_VALID l VM—STATE_MASK_WRITABLE l VM_STATE_MASK_CACHEABLE 产屏蔽、读写权限、Cache使能等幸, VM_S:TATE_VALIDIVM_STATE_WRITABLEIVM_STATE CACHEABLE } 3.3.5系统定时器处理 系统定时器是操作系统的心脏,操作系统任务的调度和时间计算都依赖于它。 在¥3C2410X处理器中,片内集成了多达6个PWM定时器,可以随意选择其中两 个作为系统定时器和辅助定时器。 ’ 系统定时器的初始化工作由前面提到的usrRoot任务调用sysClkInit()例程完 成,sysClklnit()由系统提供,在该例程之前并没有开启中断,系统处于一种安静 的模式下,在这个例程中将使能中断(参见前面的内核启动图),尽管在这之前虽 然创建了一个任务usrRoot(),但并不存在任务的切换问题,usrRoot()依然处于一 个单线程的环境,只有在定时器被驱动之后才能建立多任务环境,系统才具备任 务切换的功能,在开发BSP包时候,需要在prjConfig.c文件中包含sysClklnit.c源 文件,该文件中调用需要根据目标板定义的定时器函数sysClkConnet(),sysClkRat Set(),sysClkEnable()。 本文中选取¥3C2410的定时器O作为系统的时钟定时器,定时器l作为系统 的辅助时钟定时器,在BSP目录中新建s3c2410Timer.c文件编写定时器处理的各 个函数。 3.3.6异常和中断处理 VxWorks的中断处理与硬件平台密切相关,由于不同硬件平台的中断处理方 法是不同的,所以,必须根据所用平台的特点把处理器自身的中断处理与VxWorks 操作系统对中断的处理挂接起来。对于此部分的BSP编写主要有两个工作需要完 成:一是中断向量表的安装,二是系统中断处理函数与硬件驱动函数的挂接|24l。 ¥3C2410芯片支持7种异常,每种异常有固定的优先级和相应的处理器特权 基于ARMⅣxW.orl(s的Web视频监控系统的研究和设计 模式,对于VxWorks操作系统除了在中断向量地址0x14(Address)和0xlC(FIQ) 异常外(0x14在ARM中是保留的,而0xlC在VxWorks中没有使用),提供了五 个异常处理函数与相应的异常对应。由于¥3C2410芯片每个片选的地址范围是固 死的,不能由程序员指定,所以必须由开发人员自己编写异常向量表与VxWorks 自身的向量表相同,即把中断子程序与系统提供的五个中断处理子程序对应起来。 首先在romlnit.s的一ARMjUNCmON(romhlit)中添加代码,然后在该文件ROM 区建立中断矢量表,最后在config.h文件的RAM定义区定义中断向量表的基地址 为0x30001000。中断向量的安装是通过usrConfig.C中usrlnit()调用excVeclnit() 例程来完成,该例程的工作就是在地址0x00000000处建立中断向量表(借助于 MMU)。¥3C20410包括中断请求寄存器(SRCPND)、中断响应寄存器(矾刚OD)、 中断屏蔽寄存器(ⅡMSK)以及子中断请求、响应、屏蔽寄存器等。在¥3C2410 中设置中断处理需要分别实现sngks32IntLvlEnable()、sngks32IntLvlVecChk()和 sn班s32IntLvlVecDisable()这3个函数,并通过钩子函数sngks32IntLvlVecRm()和 sngks32IntLvEnableRm()和sngks32IntLvlDisableRm()来进行调用,当系统中断发 生时,系统会调用由sysIntLvlVecChkRm()来指定调用哪个中断处理程序,该例程 执行完毕后会返回对应中断相关的处理函数的入口;最后由系统调用这个入口来 完成中断处理。 3.4 BSP调试和发布 中断处理和定时器处理编写就绪之后,整个BSP基本上就可以运行了,但为 了便于观察一些过程性的结果,通常还需要在BSP中加入串口驱动以利于调试。 3.4.1 BSP组件和模块配置 VxWorks的开发环境Tornado为构造VxWorks提供了图形配置工具和工程管 理工具,为用户提供了可视化的配置方法。目前VxWorks大约有300个可选择的 组件。通过组件管理工具可以方便的创建组件。Tornado的组件配置工具可以很方 便开发者对感兴趣的组件选集中进行添加或删除,从而合理定制VxWorks内核。 本课题中需要用到Telnet,郦,Network,MMU、Target Shell等组件,图3.7 (下页)为使用Tornado添加MMU组件示意图。 第3章视频监控系统中的BSP设计 ≥。i application components 毋application initialization 丑il development tool components i譬赢ha[dBwsPar。e。m。…。鬻鬻缪缪黪缪辫鬻燃骥缓鬓鎏骥雾攀;l攀萋||||;÷!蠹!=j囊i鬻嗣 要盘b…3 ij獭:麟』灏暖蓉霹篡蕊荔薹薹蓊嚣薹薹薹辫_|||i i;i;j;i?j i ?j驯me.o.,嘞。iiii:。B em!麓鋈鳖燮篁鎏鎏澄耋!懑鍪囊||蒸ii≤囊l萋i鋈j _目》 SP ’; 。=_==-i:嚣ii;j:i;ii堡蔓≤誊鞋冀_;;_ii囊iii每i致i萋搿薹囊ii;j ㈡:喜耋誉昌篓划~莲零ii辩蘸盐嚣鼢捌囊■—喾—鬻I·——-|■|||鬓l}瀚囊鬻瀵黍辫;戮:}iiIi +妇蹦‘-l‘)‘二ti 图3.7 BSP组件配置 Fig.3.7 BSP Components Configuration 3.4.2 VxW0rks的内核编译 在BSP包里面的文件修改好以后,采取Bootable的方式创建Tomado的工程, 配置好组件之后,需要对其进行编译下载调试,装载到目标板中的VxWorks映像 取决于使用的下载方法,从内核映像的启动情况来看(前文3.1.3),主要有三种映 像‘251如表3.1所示: 表3.1 VxWorks内核映像分类 映像类型 Loadable Image Rom.Based Image Rom Resident Tab.3.1 Types ofVxWorks kernel Images Tornado中文件名 功能说明 vxWorks vxWorks_rom vxWorks_romCompress vxWorks_romResiden 在RAM中运行的映像, BootRom来力N载 ROM启动RAM运行的映像,不需Bc州R0m辅助引导 vxWorks rom的压缩格式 ROM启动RAM运行的映像,不需BooLRom辅助引导 由于采取BootRom来加载VxWorks内核映像的方式,首先应该编译BootRom, 然后烧写至Nor Flash中,因此在下载映像时应使用VxWorks可加载型的内核映像。 创建Bootable工程选择开发好的BSP来制作BootRom,BootRom的格式有很多种 基于ARM/VxWorks的Web视频监控系统的研究和设计 趱懋国 类,在Build Boot Rom时通常选择生成bootrom.bin二进制格式,如图3.8所示。 I Selecl,-3 BSP: I {03c241 0x … 仆吼至!堇I …一。攀一卟||一嘣嚣裂.、=R已{o一 图3.8编译BootRom Fig 3.8 Build Boot Rom 3.4.3 BSP调试的常用方法 (1)ICE调试法。ICE(在线仿真器)调试法是开发BSP过程中一种最常用的 方法。其过程是将仿真头插在用户板的CPU位置上,被调试的BootRom 映像下载到仿真器RAM或目标板RAM中,由仿真器的CPU在用户的硬 件环境下运行来调试软件。该方法的主要缺点是在于ICE价格高,并且不 同类型的CPU需要购买不同的ICE。 (2)BDM调试法。宿主机通过并口与BDM(Background Debug Mode)适配 器连接,而BDM适配器通过自带的数据线连接到目标板上CPU的BDM 接口上,且目标板上的CPU需有一种断点逻辑支持。通过这种硬件调试 代理,进行映像的调试。该方法的缺点在于目标板CPU必须支持BDM方 式。其步骤是首先通过BDM适配器下载激活目标板CPU的程序,然后 才把被调试的Bootrom映像下载到目标机的RAM中。 (3)黑调试法。黑调试法是通过点灯、用示波器测片选等手段调试BSP。首先 打通串口,达到宿主机与目标机的通信,然后再调试BSP的其他部分。 3.4.4 BSP调试注意事项 首先,在romlnit.S中初始化程序不要太多,初始化的目的是为了载入VxWorks 映像,实际初始化任务主要由sysHwlnit()函数来完成的。对于下载型的VxWorks 映像,sysAlib.S()中的syslnit()函数应该重复映像下载前的所有初始化操作,否则 在一些情况下可能会忽略存储控制器的设置。 其次,对特定的BSP驱动程序的修改,只能在特定的BSP的目录下,在这里 为\切昭et\Confi出ntegrator920t目录下,不z月-,i匕-,直接在targetksrc\drv以及targetS\dry目 录下修改。 第三,调试阶段不要使用lnalloc()等缓冲区调用函数。如在前面所提到的函数 intConnect()不能够在sysHwhlit()中被调用,这是因为在VxWorks未启动之前, 此时整个系统的内存分配库还没有被初试化,调用mauoc()等缓冲区调用函数,将 会导致系统瘫痪。 BSP调试成功之后,便可以制作BootRom和VxWorks内核映像,图3.9为在 串口上观察使用BootRom来加载VxWorks内核映像时的启动情形。 l麓瓷:1警“id“d;::嚣掣o 192“,16”8.0 o.一:。=oxf£ffffff ^dding 28∞*ynbotz for!L蛆dIl蛆。 魄) 鋈酉鬃一踹◆ Ⅷ"虹vH‘lon 5 S .礁脚n._I如vtr靠蝌2.6 C+pyf x龇*lna Riv矗I_syn锄g ∞啦 c蹦:s3c.2410-AK强929T eA弛q 。wM湘热emcorⅧ。y TS"蛳·iz+。蜘+l.F酱傩M躲』&翮器”” k擘 彻B、R÷_dy ,鬈。:冀.搿mc:u。Sl二=c。jo。rn。。誊毒¨1。。蔓ii誊基蠢≯。j。…毫;;i。言舞弄’荔赫赫:矿i猫菇矿n矗鬲i矗墨i薯薹i。. 3.5本章小结 本章主要针对视频监控系统的硬件¥3C2410核心板Hm2410的特点,设计和 实现了服务于远程视频监控的操作系统VxWorks的BSP。其中相关驱动程序的开 发将在下一章进行研究。 ..28.. 基于ARMⅣxWorks的w|eb视频监控系统的研究和设计 第4章视频监控系统中的BSP驱动 在本课题中,为了建立基于VxWorks的远程监控和实现管理机制,除了实时 操作系统内核的支撑,还需要移植Web服务器和数据库等应用程序来支撑,它们 共同保存在Flash中,这就需要在Flash设备上建立适用的文件系统;通过网络来 访问监控服务器,必须驱动硬件扩展的以太网卡;视频信号的采集是在USB接口 摄像设备上进行的,因而必须驱动USB接口控制器。本章主要依次分析和实现 Flash文件系统驱动、网卡驱动、USB控制器驱动程序。 4.1 NAND F I ash设备驱动 如前文所说,视频监控系统中的数据(内核、应用程序和部分视频采集数据) 以文件形式保存在Flash设备中,因而必须在Flash设备上建立文件系统,才能实 现对这些文件的各种操作,本系统中选取的的是容量较大的NAND Flash,通过文 件系统并不能直接操作它,必须要建立Nand Flash设备的驱动程序。在VxWorks 操作系统中,通常的做法是在Nand Flash上建立TFFS驱动。TFFS采取的数据分 配算法、读写均衡损耗算法、错误恢复算法、碎片回收算法均对提高文件系统性 能、延长设备适用寿命等方面发挥了巨大的作用。.. 4.1.1 TFFS在性能上的优化 由于在Flash上建立的是Ⅱ邗文件系统,并且采取的是均衡损耗算法126],这 使得Flash的性能和寿命得以提高。一般Flash存储器可以擦写10万(100K)次,如 果不使用TFFS系统,寿命就非常短。 当使用FAT格式的文件系统时,需要频繁更新FAT表,由于FAT表经常复制 相同的逻辑扇区,频繁更新将导致在同一个物理擦写单元上重复擦写周期,这样 会大大降低Flash的使用寿命127]。若采用FATl6格式的文件系统,在写入一个8MB 的文件到NAND Flash中时,FAT表(Ⅳ汀16每个簇的大小是2KB,1K=1024)的 擦写单元是16KB大小,一个8MB的文件含有4KB个簇(每个簇2KB字节),若 每个簇在FAT表中占用2个字节,那么在FAT表总共占用8KB。FAT文件系统中 每写一个簇(2KB)就更新一次FAT表,而FAT表一直位于某个固定扇区中,那 么8MB的文件FAT表需要更新FAT表大约4K(8M佗K)次。若每片Flash最多 第4章视频监控系统中的BSP驱动 写入lO万(100K)次,那么将一个8MB的文件写到Hash中最多只能写25 (100K/4K)次。那么当应用程序以1KB/S的速度写文件的时候,Flash的预计寿 命为: ExpPcted Lifefime=一璺丝兰兰! ;2.4(days) (1KB/sec)x24x60x60 上述FAT文件系统的算法中,相同的逻辑扇区是映射到相同的物理扇区上, Life f,乏=—MediaSize×NumberO—fEraseCycles×0.75 因而它没有使用均匀损耗,很明显地降低了设备的使用寿命,设备的寿命不是取 决于设备存储的大小,因为同一逻辑扇区总是对应同一物理扇区。当使用均衡损 耗算法的磨损控制方式时候,Flash设备的预计寿命计算公式㈨为: Expected BytesWrittenPerDay 其中,参数0.75是TFFS管理Flash数据结构的效率因子,因为meFFs采用 了一种非绝对的磨损控制算法,那么,64MB的K9F1208UOA Flash的预计使用寿 命是: ExpPctedLife/me=型急堕=5824(days)=159.6(Y1KB 刎 、 一 | scc)x24x60x60 从上面的计算可以看出,使用损耗均匀算法的TFFS文件可以显著的增加Flash 设备的寿命,即使是在同一个逻辑扇区读写。实际上其寿命与擦除单元的个数或 存储器容量大体是成正比的。 假设Flash存储器的擦除单元有N个,Flash的擦除寿命为M次,每天Flash 的使用次数基本相同为Y次,则Flash的使用天数为: (1)不使用磨损控制时:x.=M IY (2)使用完全磨损控制时:X,=NxM/Y 因为TFFS采用了一种非绝对的磨损控制算法,所以对取平均值或磨损控制因 子来近似逼近实际使用天数,即: (3)使用近似磨损控制时:X,=0.75x(NxM)/Y 4.1.2基于VxWorks的TFFS VxWorks中的TFFS是兼容的一种M.Systems Flirt实现方式,它为种类繁多 基于ARM,、,xWbrks的Web视频监控系统的研究和设计 的Flash存储设备提供了统一的块设备接口,并且具有可重入、线程安全的特点, 支持大多数流行的CPU构架。有了Tomado的TFFS,应用程序对Flash存储设备 的读写就好象它们对拥有MS.DOS文件系统的磁碟设备的操作一样。这样TFFS 就屏蔽了下层存储介质的差异,为开发者提供了统一的接口方式四J。 VxWorks中的TFFS由一个核心层和三个功能层1301组成(如图4.1所示): ·核心层——主要功能是将其他各层连接起来,以及将工作引向其他层并处 理全局的事务(如后台处理、碎片收集、计时器和其他系统资源的管理等)。 · 翻译层——(Translation Layer)主要实现唧S与dosFS之间的高级交互 功能;也包含控制Flash映射到块、碎片回收和数据完整性所需的智能化功 能。有三种不同的翻译层:NOR—based、NAND.based和SSFDC—based,根 据硬件其所对应的Flash介质来设置,本系统使用NAND.based翻译层。 ·MTD层——(Memory Technology Drivers Layer)主要功能是实现对Flash 进行读写擦除和D识别等操作,并设置与Flash芯片相关的一些参数。TFFS 包含了支持Intel、AMD、Samsung等公司的MTD层驱动源代码(在 srcktrv\tffs\目录下)。 ●Socket层——(Socket Layer)为TFFS与板卡硬件提供接口服务功能。该 层用来向系统注册Socket设备,检测设备插拔和硬件写保护等。 ≯。: :≈::::=::…?:==i DOs薹S∞稍文件系匀咯::: I£,,, ,:,,_,一二.,j:,:!.::j::-。,÷,.≥-j:翻 j 。_ ql :7 ?:CoreLay嚣 ; 囊 } +,(糖0层)., K Tramlation Layer (翻译鼬 , , 三个功能层o j # Memory Technology‘ Drivers Laye,(Mi'D层-) } ; ∥ ■ ?SocketLayer:?,。,? { { ● j } r: 7。(socket层) “j ” 3 , ≈ ☆ E,,::。。7 ≯ / 。;斌 图4.1 TFFS功能结构层次 Fig.4.1 The Layers in TrueFFS 够?≯芝≯∥”。j:矗一学 薯?:习a妞 "i ji:I :。 ≯Memory(blAND/NOR)j 诒盘,‘≈.tz珊;.,々I。一, ,一。沁|^ :# .31. 第4章视频监控系统中的BSP驱动 其中翻译层和Socket层是公用层,不同型号的Flash可以不用修改或编写,而 不同型号Flash的MTD层有差异,需要加以修改。所以在开发和构建TFFS文件 系统时,主要的工作就是修改或编写核心层和MTD层。为了使用TFFS文件系统, 还必须进行内核的配置。 4.1.3 K9F1208UOA建立TFFS 在VxWorks上构建TFFS的基本过程如图4.2所示,其中最主要的工作集中在 MTD驱动程序的编写以及系统和工程的配置。 }攀择M秸组簪j —《黪拳囊嘲 t 圆定掌。eket驱动l 'r I鞣’囊. 7,,,,?≯鞠 { ● ∥i,构建项辟。,j目 ¨一 t,,,./一“栩 ,lW 黪》式《澜 { ■ 陲搴挚驱动翠彳ji l ●, }∥_ ==。‘。墒 巨检测驱动程序;l 睦}。,i-。 n“j“么翔 图4.2建立TFFS的流程 Fig.4.2 Process of Creating TrueFFS 4.1.2.1建立TFFS的技术原理 Tornado中TFFS内核配置主要包括三个部分: (1)完全支持dosFS文件系统:如果没有VxWorks兼容的MS.DOS文件系 统,则TFFS的系统配置是无法生效的,因为这个组件增加了对文件系 统的一些基本功能,如ls、cd、copy等命令的支持。(INCLUDE_DOSFS) (2)必须包含的核心组件TFFS:该组件能确保按正确的顺序初始化设备, 也能保证Socket驱动程序能包含在项目之中。(玳CUmE TFFS) (3)必须包含僻s中三个功能层相对应的软件模块,通过在sysTffs.C文件 中添加代码来实现(为了支持TFFS,每一个BSP目录下都必须包含一 个sysTffs.c文件。它将TFFS所有的层链接到一起并和VxWorks绑定。 基于ARM/VxWorks的Web视频监控系统的研究和设计 ‘因此,必须编辑这个文件并决定哪一种MTD和翻译层模块应该包含到 TFFS中)。. · 根据上面需求,需要编辑如下四个文件(.\targetkonfigkintegrator920t目录中): ·Makefile——在bsp的.O列表中加入sysTffs.O . · config.h——包含郦宏模块 ·sysLib.c——调整ROM区的描述 · sysTffs.c——确定包含在删中的功能特点 配置的参考文件为src\drv\tffsksocketskREADME,该文件具体描述了不同的 BSP需要修改的一些项目。 (1) 修改Makefile: MACH_EXTRA=sysTffs.o产加入sysTffs.0的编译,加入这个宏定义吖 (2)修改config.h- #ifndef 1NCLUDE_TFFS #define INCLUDE TI下S 鼻endif #ifndef INCLUDE DOSFS #define INCLUDE_DOSFS gendff 如果想使用tffsShow0和tffsShowAll0来查看socket信息,则加上: #define INCLUDE SHOW_ROUTINES (3) 修改sysLib.c: 由于¥3C2410板包含了MMU模块,所以需要在BSP中的sysLib.c文件 里面定义一个sysPhysMemDesc【]表,将Flash基地址和大小加入到MMU 中,以供将来访问Flash,否则访问Flash会失败。重新设置启动映象所 在的存储区域为WR姒BLE(可写)型的。 (4) 修改sysTffs.c: 该文件主要功能是定义一些BSP特殊的Socket代码,针对于Socket层 的,作为连接flash硬件和VxWorks的桥梁,而将翻译层、MTD层跟 VxWorks连接起来。 第4章视频监控系统中的BSP驱动 4.1.2.2 K9F1208UOA硬件分析 K9F1208UOA的容量为64M x 8bit,存储空间的组织由128.1024个页(行)、每 页528个字节(列)的方式构成,备用的位于列地址的512—527。K9F1208UOA将存 储空间分为块(Block),每块由32个页构成,共有4096个块。其内部结构‘311如图 4.3所示。 128K (-4.096 、、一~.,,。512 sym一∥一一16 8y纽 图4.3 K9F1208UOA阵列组织结构 Fig.4.3 Array Orgnization of K9F1208UOA K9F1208UOA的读写都是以页为单位进行操作的。擦除是基于块的操作。其 地址通过8位端口传送,CLE和m正信号线可用于实现I/O口上指令和地址的复 用。指令、地址和数据都通过拉低WE和CE来从I/O口写入器件中。 根据K9F1208UOA的硬件特性,修改sysTffs.C的内容: 相klefme INCLUDE_TL_FTL #define FLASH_BASE_ADRS 0x00000000 p FTL translation layer毫/ 严起始地址作为TFFS基地址幸, #undef FLASH_SIZE #define FLASH SIZE 0x00400000 /*Rash memory 64M/ 4.1.2.3 MTD层驱动机制 TI码中依靠MTD层来完成对Flash媒介的原始操作,包括(识别、地址影射, 读,写和擦除),由三个函数来完成。写函数write()、擦除函数erase()、标识函 数identify()。其中标识函数完成对当前所用芯片型号识别、大小判断、MTD是否 适合当前Flash类型等判断。编写时在BSP目录下建立一个MTD层驱动代码文件, 基于ARM/VxWorks的Web视频监控系统的研究和设计 在文件中实现对Flash的操作。 . write()函数主要是实现将数据写入到Flash中。首先需要对块进行解锁,然后 写入写命令,之后才能进行数据的写入,最后需要判断数据是否写完。为了确保 操作成功,应该在写完每个数据后进行数据的比较,比较正确后方能进行下一个 数据的操作。erase()函数主要是实现块的擦除。Flash一般是按照块进行擦除操作 的,在擦除操作之前也应该首先对块进行解锁,然后写擦除建立和块擦除命令。 擦除成功后,Flash中的内容应该是0xffff.所以为了确保成功,应该在擦除后进 行比较,比较正确后方能进入下一个块的擦除操作,否则返回擦除错误标志。 所以,对于MTD驱动的调试,基本上就是调试写和擦除两个函数。在调试过 程中,我们可以在这两个函数相应位置加入打印语句来调试。为了能调试这两个 函数,我们通过在shell上输入命令tffsDevFormat()来格式化flash,tffsDevFormat() 最终会调用erase()和write()函数,如果成功就会返回O,否则返回.1。当然也可 以调用tffsDevCreate()来验证我们的写和擦除函数的正确性。图4.4说明了 tffsDevCreate()调用过程”引。 图4.4识别设备调用的标识函数 Fig.4.4 Funtions called by tffsCreate() 4.1.2.4 Socket层驱动识别 MTD层驱动完成后,接下来就是Socket驱动的识别和TFFS文件系统的配置。 这部分工作相对比较简单。Socket层的相关代码是在sysTffs.c中完成的,可以直 ..35.. 第4章视频监控系统中的BSP驱动 接复制任何一个\target!\src\drv\tffsksockets下的xxx-sysTffs.c到BSP目录下,并将其 改名为sysT凰.c'然后修改FLASH—BASE_ADRS以及FLASH SIZE的宏定义, 同时添加宏定义: #define INCLUDE_MTD_NAND 同时将tffsConfig.c文件复制到BSP目录下,在tffsConfig.c中的mtdTable【】 中注册自己所写的nandMTDIdentify: #ifdef INCLUDE_MTD_NAND nandMTDIdentify, 撬!ndif 4.1.2.5创建TFFS设备 当上述工作完成后,VxWorks就会在启动时调用tffsDrv()函数并初始化 TrueFFS文件系统。TFFS文件系统在使用之前必须格式化。调用tffsDevFormat() 函数来实现Flash的格式化,该函数通过usrTffsConfig()函数来创建TrueFFS设备。 在格式化过程中,该函数先擦除flash然后将TFFS数据管理结构(data-management structures)写到每个擦除单元(如块)起始处。tffsDevFormat()需要两个输入参数: 设备号(socket组件号)和一个指向格式化参数(FormatParams)的指针。设备号 由socket组件在系统中注册的先后顺序决定,而FormatParams结构则是传递如何 格式化此flash的值。因为包括了DOS文件系统的宏定义,因而用户可以用DOS 方式访问Flash设备。 (1) 挂接设备名。首先进行格式化: tffsDevFormat value=l usrTffsConFig.0,0,"/tffs0’’ value=0 然后通过devs命令来查看挂接的设备名: devs dry flame 0/null 1/tyCo/O l/tyCo/1 5 host: 基于ARM/VxWorks的Web视频监控系统的研究和设计 6/pty/rlogin.S 7/pty/rlogin.M 3/tffs0/ 8/vio vahe=25=0x19 看到怂Q,说明挂接设备已经成功,接下来就可以利用dosFs文件系统相 关命令来操作nash了。如,ls、copy等命令。 (2) 从Flash中启动并下载VxWorks映像㈨ 要从Flash中下载VxWorks映像,首先需要把VxWorks映像拷贝到flash中, 在sheu中的操作命令为copy“VxWorks","/tf-fs0/VxWorks",然后修改config.h 文件中的引导行,如下: #define DEFAULT_BOOT_LINE”tffs--0,0(0,0)host'Jtffs0/VxWorks\ h=192.168.0.2 e=192.168.0.10 u---denven pw=denven tn=VxWorks” 修改完后,重新编译生成bootrom.bin,并把它烧写到flash中。 4.2 CS8900A网络设备驱动 在基于ARM/VxWorks视频监控系统中,由于是基于TCP/IP协议的以太网作 为各种协议转换的中介,以太网卡无疑是整个监控系统中硬件平台中关键部件之 一。网卡驱动是连接上层网络协议和网络硬件(网卡)的桥梁,在视频监控系统 的软件开发中具有非常重要的位置。所以,开发基于VxWorks操作系统的网卡驱 动成为能否实现视频监控的关键之处。本系统的硬件平台FFr-S3C2410支持两种 网卡接口:10M和10/100M两种网卡,开发板中实际上只使用了10M的CS8900A 以太网卡,本章阐述该网卡基于VxWorks操作系统的驱动开发。 4.2.1 VxWorks网络驱动分析 在VxWorks系统中,网络设备是一组特殊的字符设备。网络设备并不直接与 用户打交道,而是通过多层协议与应用程序交换信息。应用程序所使用的是协议 的接口,通常是套接字(Socket)。网络设备驱动程序是挂接在协议最底层直接与 硬件打交道的程序‘州。VxWorks网络模块指出了VxWorks应用与网络设备驱动程 序之间的各层协议。网络系统各层之间要不断进行数据交换,各层之间都有明确 的协议来规定数据交换的格式,其中网络接口层实际上指的就是网络设备驱动程 第4章视频监控系统中的BSP驱动 、 序。这种层次关系如图4.5所示。 图4.5网络设备所在TCP/IP协议栈中的层次 Fig.4.5 Layer of Network Device in TCP/IP 网络数据链路层通过网络接口驱动程序负责在两个相邻节点间的线路上无差 错的进行数据的收发。VxWorks中支持两种类型的网络协议栈驱动程序,即BSD 4.3网络驱动和VxWorks可裁剪的增强型网协议栈(SEND),专门使用该网络协议 栈编写的网络驱动程序称为增强型网络驱动程序(END,Enhanced Network Driver)。增强型网络是一个使用MUX(多路复用)功能来与网络协议进行通信的 数据链路层驱动。MUX是数据链路层与网络层之间的接口【蚓(如图4.6所示), 用来在VxWorks中支持数据链路层与网络层之间的独立。网络层要使用数据链路 层的驱动程序,就会调用相关的MUX例程,同样链路层上的驱动程序访问网络层 时,也会调用相关的MUX的例程。 }??一:谤淞7 7_≯?习 l: .一,。# j:i,o≯:o,j : ri:i?。,?!?。蠢聂誊:j??乏2誓溺 , :i .,,m施《茹i:溯 : l 。,|·一 ::i,。∥7 MU.≯:: : 麓.鬟j ;7垂荔--劲弱 , : 巨 甜。设备驱黧l:荔i弱匿≥i垫警绷荔∥≯习 : : 瞄,‘ V·越:Ⅳ7 o |!{{= j弼络设备.1 ;:。 £:j,j≯*,., :j。 , ;:■警:网络设备.2二 j 图4.6 MUX的功能 Fig.4.6 Function of MUX Interface .38- 基于ARMⅣxwbrks的Web视频监控系统的研究和设计 4.2.2网络设备与系统的数据交换 网络设备采用环形缓冲来描述。在装载设备驱动程序时,设备驱动程序装载 函数分配了接收和发送缓冲区:当接收数据包时,首先把数据存放在设备接收缓 冲区中,然后把指向接收缓冲区指针传递给MUX;当发送数据包时,首先把发送 缓冲区中的数据包拷贝到设备发送缓冲区中,然后把缓冲区放置到发送队列中并 启动发送器,最后把已经发送的数据包缓冲区归还给内存池。MUX层的数据包采 用的是mBlk.clBlk.cluster结构描述模式136J,如图4.7所示。 暇缓懂豳稿.嚼.凰nu,II 圈龟豳国鑫凌 陵趣藤蠡 64 Bv。tes 2048 Bytes … 产¨ / 通过cIBIk结构共事数据 图4.7 mBlk-clBlk-cluster结构模式 Packets&Two Fig.4.7 An mBlk Chain Containing Two mBlks Share the Same Cluster in END mBlk-clBlk-cluster Mode 发送时,网卡发送模块处理的是这种结构;接收数据时网卡还得将数据通过 这种结构传递给上层协议。另外,mBlk和clBlk由netpool结构来管理,用户主要 通过mBlk结构来访问和传递netpool建立在内存池中存放的数据,mBlk结果通过 clBlk结构访问数据,使得多个mBlk结构很容易共享cluster中的数据。 4.2.3驱动程序中数据包的收发 设备接收到数据包后,直接把数据存放到预先分配的cluster中,当接收到中 断时,驱动程序的中断服务程序调度任务机接收程序进行下述操作: ·clBlk结构跟cluster连接,mBlk和clBlk连接,然后形成缓冲区。 第4章视频监控系统中的BSP驱动 ◆通过调用receiveRtn()函数将缓冲区传递给更高级别的协议。 muxReceive()调用协议的stackRcvRtn()函数将成列的缓冲区传递给应用, 然后用户调用readoi函数,通过套接字来访问网络中的成列缓冲区。 发送数据时,用户先调用write()函数,通过套接字访问网络,网络协议拷贝 需要发送的数据到网络缓冲区中,并调用协议驱动程序的发送程序,协议驱动程 序调用muxSned()启动发送循环,muxSend()通过调用send回调函数把缓冲区传 递给END,之后,数据发送程序把数据拷贝到设备缓冲区中,并把它放置到设备 的发送队列之中。当产生发送中断时,驱动程序的中断服务程序丢弃已经发送的 数据包,彻底清理发送队列【3刀。 …一霍I 匿至蓥孓…魉垂--]· 寓 匪霆囵 H刑C吼 曩离 隧黝_ F霭灞繁习 [羔曼}…t黛董'…匪圈 :………………: :………………』■瞄曲幽醯确翰豳幽幽龃 图4.8数据收发模式 Fig.4.8 Data Packet Receive and Send 4.2.4 CS8900A硬件和工作原理 CS8900A是一个低功耗的快速以太网控制器,其组成包括:片上RAM、 10BASE—T的发送和接收滤波器以及ISA总线接口,总线接IZl驱动能力达24mA。 内部硬件【38】结构框图如下页中图4.9所示。内部的功能模块主要是802.3介质访问 控制(MAC)。它负责处理有关以太网数据帧的发送和接收,包括:冲突检测、帧 头的产生和检测、CRC校验码的生成和验证。CPU对CS8900A的存储有三种方式: DMA模式、Memory模式和I/O模式。CS8900A与¥3C2410之间的数据传输采用 的是默认的I/O模式。CS8900A的IO模式访向有中断和查询2种方式。本文网络 接口采用中断方式来处理CS8900A的数据收发。 基于ARM/VxWorks的Web视频监控系统的研究和设计 C¥秘JOOA tSA Ethcruet OoraraH掌 图4.9 CS8900A内部硬件逻辑结构 Fig.4.9 Internal Hardware Block Diagram CS8900A的驱动程序编写成应用程序接口形式,以供网络协议实现时调用。 在编写驱动程序之前,必须对CS8900A的几个主要工作寄存器‘381(16位)有所了 解,如下表4.1(偏移量是指寄存器地址相对地址0x300H的偏移量)所示: 表4.1 CS8900A主要寄存器 Tab.4.1 Main Registers of CS8900A 寄存器名 线路控制寄存器 接受控制寄存器 接受控制寄存器 总线控制寄存器 中断状态寄存器 端口寄存器 发送控制寄存器 英文名 UNECll, RxCTL RxCFG BUSCT IsQ POlUⅪ ’rxCMD 偏移量 0112H 0104H 0102H 0116H 0120H O000H 0004H 功能描述 CS8900A的基本配置和物理接口。初始值为+00d3H, 选择物理接口为10Base.T,并使能设备的发送和接 受控制位 控制CS8900A接受待定的数据报,初始值为侧 0d05H,接受网络上的广播或者目标地址同本地物理 地址相同的正确数据报 接受特定的数据报后会引发中断。可控制为0103H。 控制芯片的Io接口的一些操作。设置初始值为 8017H,打开CS8900A的中断总控制位。 内部映射接受中断状态寄存器和发送中断状态寄存 器的内容 ¥3C2410通过POWm传递数据 如果写入数据加00COH,那么网卡在全部数据写入 后开始发送数据 发送数据时,首先写入发送数据长度,然后将数据 发送长度寄存器 TxLENG o()06H 通过POIm写入芯片 CS8900A的基本工作原理是:在收到由主机发来的数据报(如图4.10所示) 第4章视频监控系统中的BSP驱动 后侦听网络线路(如果线路忙,它就等到线路空闲为止,否则立即发送该数据帧)。 发送过程中,首先添加以太网帧头(包括先导字段和帧开始标志),然后生成CRC 校验码,最后将此数据帧发送到以太网上。接收时,它将从以太网收到的数据帧 在经过解码、去掉帧头私地址检验等步骤后缓存在片内。在CRC校验通过后,它 会根据初始化的配置情况通知主机CS8900A收到了数据帧,最后用上面介绍的某 种传输模存储器中。 图4.10驱动程序流程图 Fig.4.10 Flow chart of the END Dirve 4,2.5主要数据结构及其初始化 网络接口作为一个设备对象,和其他类型的设备驱动程序一样,END网络驱 动程序也有相应的数据结构,系统在访问设备时把设备当作一个对象来看待。这 基于ARM/VxWorks的Web视频监控系统的研究和设计 些数据结构中有驱动程序必要的数据结构和用户自定义的数据结构两种之分。其 中必要的数据结构有: ·基本END结构:END_OBJ。该结构中定义了所有网络相关的部分,提供 独立于设备的数据结构,必须被用户自定义驱动程序控制结构所包含。该 结构中还包含了DEV_OBJ和NETl_FUNCS这两个结构。 ·设备控制结构:DEV_OBJ。包括设备名、设备描述等信息,用户驱动程序 使用该设备来控制设备。 · 网络设备驱动函数表:NET_FUNCS。这个结构包含了设备驱动程序各个 函数的入口点。 ·数据跟踪:M_BLK。作为一个传送载体在驱动程序和协议间进行数据包的 传送。 ·跟踪级联信息:ULHDR INFO。用来保存连接级首部信息。不同网络设 备其本身资源、驱动程序各个方面皆不相同,因此要使用用户自定义的数 据结构主要是用于方便对特定的网络设备(CS8900A)进行标识、控制、 初始化等。 ·驱动程序控制结构:END_DEVICE。该结构是CS8900A网络驱动程序核 心数据结构之一,该结构必须包含END_OBJ结构,并且放在该结构的第 一项。除此之外,该结构中还包含网卡的中断向量、中断级别、以太网地 址、簇缓冲池结构、芯片在I/O操作模式和Memory模式下的基地址、芯 片的工作模式(是Io操作模式还是Memo巧模式)等。 ●初始化设备驱动程序表cs8900AFuncTable。在装载设备驱动程序前,需要 对设备驱动程序表进行初始化操作。设备驱动程序表结构的指针是 END—OBJ结构的一个重要成员,而END_OBJ又是END_DEVICE结构 的成员。驱动程序装载函数正是通过初始化END_DEVICE结构,从而将 设备驱动程序表中的下述函数加载到系统中。 LOCAL NET FUNCS cs8900aFuncTable= { (FUNCPTR)cs8900aStart, 产设备启动函数.奉, (FUNCPTR)cs8900aStop, /木设备停止函数.奉/ 第4章视频监控系统中的BSP驱动 (FuNC町R)cs8900aUnload,p驱动程序卸载函数.堆, (FUNCPTR)cs8900aIocfl, 产IO控制函数.幸/ (FUNCPTR)cs8900aSend,/木数据发送函数.吖 (FUNCPTR)cs8900aMCastAdd, 产添加多点传送地址函数.木/ (FUNCgrR)cs8900aMCastDd,产删除多点传送地址函数.枣/ (FUNCPTR)cs8900aMCastGeL,幸获得多点传送地址表函数.木/ (FUNCPlR)cs8900aPollSend, 产轮循发送函数木/ (FUNCPTR)cs8900aPollRcv, 伊轮循接收函数宰, endEtherAddressFom, 产组合地址信息到木, endEtherPacketDataGet, /宰NET-B UFFER中的数据吖 endEtherPacketAddrGet 产数据包地址获取函数.毒/ 4.2。6网络驱动程序接口函数设计 如前文描述,系统通过NET_FUNCS结构中的驱动程序入口点赖于网络硬件 设备进行通信,那么这些入口点就是网络驱动程序中需要分别实现的函数‘391。 · 设备装载程序cs8900aLoad()。cs8900aLoad()负责完成初始化驱动程序数 据结构END_DEVICE、初始化网络缓冲区、复位和配置网络设备、初始 化Mm,设置网络设备准备好标志,最后函数返回END_OBJ结构的指针 供muxDevLoad()使用。 ·设备启动程序cs8900aStart()。用于使能CS8900A中断相关的引脚:设置 GPGCON中GPGl的功能为EINT[9】,设置EXTINTl使得中断信号有效 方式为高电平,设置GPGUP[O]为1,从而禁止上拉电阻的功能;检查是 否没有任何中断;调用芯片中断使能函数使能芯片中断;连接中断服务程 序cs8900aInt()到CS8900A的中断向量上去;调用中断控制器函数 intEnable()使能CS8900A级别的中断,最后设置设备启动标志。cs8900aInt() 是CS8900A的中断服务程序。该函数根据读取的中断类型而调用不同的 处理函数。值得注意的是,为了将中断阻塞减到最小,网络驱动程序的中 断服务程序应当只是处理那些只需要最小执行时间的工作。对于那些所有 需要耗时处理的任务,网络驱动程序的中断服务程序都会调用 netJobAdd(FUNCPTR,int,int…..)函数将其排列到网络任务的工作队列中即 可。 基于趟tMⅣxWbrks的W.eb视频监控系统的研究和设计 ◆设备停止程序cs8900aStop()。该函数负责完成设备的停止工作。它调用 END_FLAGS_CLR宏标识设备停止;调用中断控制器函数intDisable()禁 止CS8900A的中断,禁止中断输入相关引脚(如GPGCON的GPGl);设 置CS8900A中Bus Control寄存器中断使能位为O,从而即使有中断事件 发生,也不会发生中断;复位设备;卸载中断服务程序。 ·设备卸载程序cs8900aUnload()。该函数负责完成设备的卸载工作,它包 括:调用宏END_OBJECT UNLOAD释放设备;停止设备;释放在驱动 装载函数中分配给驱动程序的存储空间(被MUX缓冲区使用的内存,为 簇、mBlk、clBlk分配的内存空间);最后释放驱动程序控制结构 END_DEVICE。 ·处理I/O控制请求程序cs8900aIoctl()。该函数执行几个必要的I/O控制 操作:设置MAC地址、获取MAC地址、设置或清除标志、获得标志、 开始和结束轮询操作(分别调用cs8900APollSend()和cs8900aPollRcv()、 返回Mm信息、返回链表第一个最小缓冲区。 ·发送以太网数据包程序cs8900aSend()。cs8900aSend()负责数据包的发送, 该数据包是以函数的参数pBuf(M—BLK_ID类型的)表示的。该函数执 行几个操作:获取发送器的使用权、查询发送缓冲区、启动发送设备发送 数据、统计MⅢ一Ⅱ错误数和释放已经发送的数据包。其中获取发送器的 使用权是通过宏定义END TX SEM_TAKE(这个宏定义最终调用 semTake)实现的,统计MⅢ一Ⅱ错误数是通过宏定义END—E砌LADD(这 个宏定义最终调用mib2ErrorAdd)实现的,释放已经发送的数据包是通过 调用netMblkClChainFree()函数来实现的。 ·添加多点传送地址程序cs8900aMCastAdd()。该函数负责为设备添加一个 多点传送地址,通过调用etherMultiAdd()函数实现,如果该函数返回 ENETRESET,则会调用cs8900aConfig()重新配置CS8900A芯片,配置 函数在前面已经介绍,不再赘述。 ·删除多点传送地址程序cs8900aMCastDel()。该函数负责为设备删除一个 指定的多点传送地址,通过调用etherMultiDel()函数实现,如果该函数返 第4章视频监控系统中的BSP驱动 回ENETRESET,则会调用cs8900aConfig()重新配置CS8900A芯片。 、 ·获得多点传送地址程序cs8900aMCastGet()。该函数用于获取多点传送地 址表,通过调用etherMultiGet()函数实现。 · 轮询发送函数cs8900aPollSend()。用于轮询方式下发送数据包,数据包是 以M_BLK_ID类型的函数参数给出的。它包括:调用netMblkToBufCopy ()函数将数据包中的数据拷贝到一个缓冲区中;向TxCMD寄存器中写入 发送命令;向TxLength寄存器中写入发送数据的长度;查询BusST寄存 器,如果该寄存器中RDY4TXNOW位有效就表示可以写入数据,将要发 送的数据写入TxFrame寄存器中即可完成发送;统计Mm-Ⅱ错误数;最 后调用netMblkClChainFree()函数释放已经发送的数据包。 ·轮询接收函数cs8900aPollRcv()。该函数用于轮询方式下接收数据包。它 包括:查询RxStatus寄存器看是否接收到数据,如果有就查询RxI舢gtll 寄存器得到数据的长度,读取RxFrame寄存器中的数据,并将其长度和 数据都集成到一个M_BLK_D的结构中去。 ·组合以太网地址到发送数据包中程序endEtherAddressForm()。该函数用于 组合以太网地址到发送数据包中,由VxWorks系统提供。 · 从数据包中获得连接级首部信息程序endEtherPacketDataGet()。该函数主 要是从数据包中获得连接级首部信息,并存放在一个LL_HDR_INFO数据 结构中,该函数由VxWorks系统提供。 · 从数据包中获得地址信息程序endEtherPacketAddrGet()。该函数主要是从 数据包中获得地址信息,包括本端源、目的地址和末端源、目的地址,该 函数由VxWorks系统提供。 4.2.7装载END设备驱动程序 在按照VxWorks操作系统下END设备驱动程序的特点,编写好上述数据结构 和驱动程序函数后,就面临如何将这些驱动程序装载到系统中的问题。在BSP中, END设备驱动程序的装载过程通常分三个步骤完成:指定END设备、装载END 设备和启动END设备。 基于ARMⅣxW硎(S的Web视频监控系统的研究和设计 4.2.7.1指定END设备 与其他类型设备的驱动程序安装方式不同,网络设备驱动程序安装是通过修 改相应的BSP实现。END驱动程序都设计了一个函数cs8900aLoad()用来装载自 己,BSP的configNet.h文件中定义了一个END TBL_ENTRY结构的数组 endDevTbl(),该数组描述了系统所有网络设备的装载函数入口点及其相关参数。 将网络设备驱动程序的装载函数cs8900al_zad()入口点及相关参数添加到网络设备 表endDevTbl【】中。 (1) 修改BSP的config.h文件,在其中加入引入END驱动的宏定义,以使 系统准备初始化MUX并通过MUX装载网络设备驱动程序。 #define INCLUDE_NETWORK #define INCLUDE_END #define INCLUDE_NET_INIT 。 (2) 修改BSP的configNet.h文件中网络设备表数组endDevTable【】,从而将 指定的网络设备的驱动程序函数添加到系统中。 #ifdef INCLUDE_啪 #define LOAD—.FUNC_0 cs8900aLoad #define LOAD_STRING 0”0:0:0” #defme BSP_O NULL END_TBL_ENTRY endDevTbl【】= ’ { #ifdef INCLUDE_END {0,LOAD_FUNC_0,LOAD_STRING_0,BSP 0,NULL FALSE}, 裱jndif {o,END_TBL_END,NULL,0,NULL FALSE}严End of table marker吖 }: (3) 修改Makefile文件,增加MACSI_EXTRA宏定义:MACSI_EXlrI认= csEnd.O,使得在VxWorks映像的编译连接时连接CS8900A以太网芯片 的驱动程序的目标文件。 4.2.7.2装载和启动END设备 使用指定的END设备驱动程序的BSP引导VxWorks系统时,在引导过程中, 系统将执行任务usrRoot()。usrRoot()将调用usrNetInit()函数完成MUX的初始化, usrNetInit()调用muxDevLoad()对endDevTbl[】中的所有项目进行装载。如果装载 成功,立即调用muxDevStart(),muxDevStart()根据endDevTbl【】中的定义依次调 第4章视频监控系统中的BSP驱动 用网络设备所定义的设备开始函数,然后调用ipAttach(),它将调用muxBind()来 将协议绑定到指定的END设备上。至此MUX的初始化以及END驱动程序的初 始化工作完成,网络设备已经可以使用。具体函数调用过程如图4.11所示。 图4.11 END设备驱动装载函数调用 Fig.4.1 1 Process of END Device Drive procedures 至此就完成了互联网关硬件平台中CS8900A以太网卡的驱动开发,修改 Makefile和相关配置文件就可以通过网络加载VxWorks操作系统了,同时可以在 应用程序中使用套接字,也为课题的后续工作(建立Web服务器来实现访问)打 下了基础。 4.3 USB主机驱动程序 为了支持监控视频设备(本系统中使用的是USB摄像头),需要系统能够支 持USB设备。 4.3.1 USB系统及S3C241 0 USB控制器 一个基于嵌入式计算机的USB系统在系统层次上被分为三个部分,即USB主 机(USB Host)、USB器件(USB Device)和USB的连接。所谓USB连接实际上 是指一种USB器件和USB主机进行通信的方法。一个USB系统只能有一个主机, 而为USB器件连接USB主机系统提供接口的部件被称为USB主机控制器。USB 主机控制器是一个由硬件、软件和固件(Firmware)组成的复合体。为了提供能连 接其它USB器件的功能,需要开发USB主机的软件系统。通用的USB主机软件 系统可以分为三个部分㈨,USB客户软件(CSW),在逻辑上跟外设的功能部件部 基于ARMⅣxW|orl【s的Web视频监控系统的研究和设计 分进行资料的交换,负责处理特定USB设备驱动器;USB系统软件(HCDI),在 逻辑和实际中作为USB驱动器(USBD)和USB主控制器(HCD)间的接口;USB 主控制器软件部分(即HCD和USBD),用于对外设和主机的所有USB有关部分 的控制和管理,包括外设的SIE部分、USB资料发送接收器部分及外设的协议层 等。这三个软件层次将在下文的USB协议栈中详细描述。 ¥3C2410内置的USB设备控制器具有如下特性【4l】: ①.完全兼容USBl.1协议、支持全速(Full Speed)设备。 ②.集成的USB收发器、5个具备FIFO的通讯端点。 ③.支持Control、Interrupt和Bulk传输模式。 ④.Bulk端点支持DMA操作方式。 ⑤.接收和发送均有64Byte的FIFO。 ⑥.支持挂起和远程唤醒功能。 下图4.12是USB主控制器的内部逻辑㈣示意图: 图4.12¥3C2410 IJSB主控制器硬件逻辑图 Fig.4.1 2 USB Host Controller Block Diagram 4.3.2 VxWorks USB协议栈层次模块 基于VxWorks的USB主机软件结构包含VxWorks内核、特定目标板的BSP、 第4章视频监控系统中的BSP驱动 USB主机驱动协议栈、USB设备驱动程序等几个部分。VxWorks中采用该体系结 构,是为了增强嵌入式操作系统的功能和实现嵌入式程序的可移植性、可维护性 和代码继承性。通过将具体的底层实现细节进行屏蔽,给上层应用软件编程者提 供统一规范的调用接口,从而大大降低了应用软件的开发难度。 USB软件包括三部分:USB设备驱动(USBDD),USB总线驱动(USBD), 主控制器驱动(HCD),其软件结构层次功能【42】如下: (1) Client Driver负责管理连接到USB上的不同设备,通过IRP(I/O请求包) 向USBD层发出数据接收或发送报文。通过对应用层提供API函数屏蔽 USB实现的细节,实现数据的透明传输。 (2) USBD通过IRP得到此设备的属性和本次数据通信的要求,将IRP转换 成USB所能辨识的一系列事务处理,交给HCD层或者直接交给HCD。 USBD还负责新设备的配置、被拔掉设备资源的释放和Client Driver的 装载/卸载。 (3)HCD主要功能是对Host控制器的管理、带宽分配、链表管理、根Hub 管理。将数据按传输类型组成不同的链表,然后定义不同类型传输在一 帧中所占带宽的比例,交给Host控制器处理,控制器根据规则从链表上 摘下数据块,根据大小为他创建一个或多个事务处理,完成与设备的数 据传输。当事务处理完成时,HCD将结果交给USBD层,由它通知Client 层处理。 栈的最底部是USB主控制器(USB HC,即USB Host Controller),它是USB 主机驱动栈分析系统中控制每一个USB设备的硬件部分。目前,市场上主要有两 大类USB主控制器:一种是支持由htel公司最先提出的通用主控制器接口 (Universal Host Controller Interface,简称UHCI),另一种是支持由微软、康柏和 国家半导体公司联合设计提出的开放主控制器接口(Open Host Controller Interface,简称OHCI)。硬件厂商一般根据这两个规范设计它们的USB主控制器。 对于每一种类型的主控制器都有一个与硬件独立的USB主控制器驱动(Host Controller Driver,简称HCD)。OHCI的硬件功能比UHCI稍强,其软件驱动相对 简单,更适合嵌入式系统。 基于灿mⅣxw.orks的Web视频监控系统的研究和设计 Wind River提供了两个驱动:.usbHcdUhciLib(UHCI主控制器库)和 usbHcdOhciLib(OHCI主控制器库)。协议栈层次结构以及在VxWorks中使用的函 数库如图4.13所示。 瞬I/S蠹B Cli爱ent习 包:,Dfi糯f,j习 鹜“,。usB设备驱动层j习 陵:≥#“i w…:‰一 厂 j“a荔绸 髟”:i,,。:弘缉14’簪妒;。j7::≯瑚 自。Z一∥7∥■势i}≯“,√,《掌。j≯磁 ————--. ≯纂::,o端L弛j0:j鬟 篆j赫二。弘施。幺?。强“锄女弘磊荔 黪鬈j0-。:麓j秀:√::=::l ‘ 棼==:…,?,|,… l =t::o 箩“。:=::?:j:”“7“喘一。“攀 ∥}∥,鬻7二孑篡:w∞ :。-loB;。学孝孑_,7翻,j %渤殇&系…。o!鸯::.:}磊≥{翻 一一:7 Z二.Y::: ?,:稿 菇i:,usb(妣9::荔 . ≯:j j,7,一+ r · 一 .:::j} j; :: +荔 jUSB:Host 1)|river(USBD)::! 象,USB蔹心驱动雳:荔 山 影4等誓∥” 一缈。黝习 荔7:蚓姗赢妞b扩 ,豸 ≯蔓usbLkstLih:::.[i≯:|||| ㈣施:,暮鲥{#黜,Ⅳ z 7,.砖互锤磁 黪:’0蚓圯b糟班长7:∥j:争——· ∥簿∥ j j:冀蕞黉 JL院罐&蕊. o““, .; :■o■鬈f;翊 ≯i:.‘:二::,joj::j =-:: 彰:7 i 7“r 7『_::::;:| r I羌::,ver(,翻O)i嘲 r i;垂彰红。…—:…:jj。j:。7.翔 ≯ 薯 ∽:”.7 70,? j :7萎 :70≯≯i: 乡% 艮,t恣珏妻控制器驱动瑟习 上 鬻弼USB功能函数库 \_ 。 一 ! 髟琵红tm.bO1h1i8Hb溉ed唧LiLb啦或,.锄”习j}—一+’ ?::!:。,:=/, 蠹。一7 :参:鬟 :,t=。":i 冀: ,“, jl 0 黟:缈一:一 .’..j 7,==:{ l ∥。“:7::、:, 移4’≯¨ ≯“ :7 TU健JDn‰rl磷dL fL、Ol一l,ll,nQt|尉 USB主枫控斜器 :7 ,:,i,一∞,/:,-。_,。7,f,:£: 锚,.|n::翱 图4.13 VxWorks的USB主机驱动栈及各模块问功能关系 Fig.4.13 VxWorks USB Driver Stack USB主驱动(USB Host Driver,简称USBD)和HCD之间的接口允许一个或 超过一个底层主控制器。Wind River提供的USBD能够同时连接多个USB HCD。 这样的设计特点有助于开发者建立复杂的USB系统。USBD是在HCD之上的与 硬件独立的模块。USBD负责管理每一个与主机相连的USB设备,并向更高层次 提供了可与USB设备通信的路径。它还负责自动处理USB带宽管理以及USB电 力管理。而且,USBD还管理USB Hub,Hub功能是一个驱动能否对USB正确操 作的评价之一。因此WindRiver的USBD设计者要提供USBD透明地处理HUB的 功能。这就是说,USBD还能处理USB Hub和设备的动态插拔。USB Client模块 位于USB主驱动栈的顶端。USB类驱动(USB Class Driver)是Client模块的典型 例子。USB类驱动负责管理连接到USB上的不同类型的设备,依靠USBD来提供 第4章视频监控系统中的BSP驱动 与每个设备的通信路径。USB Client模块的其它应用还包括那些利用USBD与USB 设备通信的应用程序。 USB在VxWorks下的从下至上驱动栈分为HC、HCD、USBD和Client Module 四层,每一层都相对独立,并为上一层提供了屏蔽该层次具体特征的接口。USB 驱动实际主要在USBD这一层次上完成。具体分为Client注册,注销,创建pipe, 配置,数据发送,以及各回调函数。、当正确地依次调用时,系统会根据回调函数 的状态和返回值,按正确的时序进行完整的数据传输。 4.3.3 S3C241 0 USB主机驱动移植实现 上面对VxWorks的USB主机驱动栈的进行了详细分析,在移植USB主机驱 动栈时不需要修改USBD层的函数实现,因为只有HCD层直接调用了PCI总线驱 动的接口函数,所以在移植时可以在保持HCD对USBD层提供的接口不变的前提 下,修改HCD层的接口实现,从而驱动主机控制器14孔。下面介绍该USB模块在 ¥3C2410开发板的主要移植步骤: (1) 首先将主机控制器初始化时所调用的PCI接口(UsbPciClassFind())和 UsbPciConfigHeaderGet())屏蔽,这些PCI接口都是为挂接PCI设备所使用的,包 括PCI设备的查询以及PCI设备配置头文件的获取等等,在初始化¥3C2410开发 板上的USB主机控制器时都是不需要的,主要的代码分析及修改如下: 源代码中的usrUsbHcdOhciAttach()函数是用来将主机控制器连接到USBD时 调用的,它的功能就是:在PCI总线上查找OHCI类型的USB主机控制器,并将 它连接到USBD。这个函数的具体实现如下:首先调用usbPciClassFind(pciClass, pciSubclass,pciPgmIf,idx,&busNo,&deviceNo,&funcNo)函数来查找OHCI 类型的USB主机控制器,然后将上述函数查找获得的busNo,deviceNo,funcNo 作为函数参数,从而调用usbPciConfigHeaderGet(busNo,deviceNo,funcNo, &pciCfgHdr),以获得USB主机控制器的PCI配置头,并将所有信息放入pciCfgHdr 中,最后调用usbdHcdAttach(execFunc,&pciCfgHdr,pToken),从而将OHCI类 型的HCD连接到USBD。 通过对源代码分析并结合¥3C2410开发板的实际硬件电路,重新实现 usrUsbHcdOhciAttach()函数,首先将函数中调用的PCI总线相关函数UsbPciClass 基于ARM/vxWbrl(S的Wreb视频监控系统的研究和设计 Find()和UsbPciConfigI-IeadcrGct()直接屏蔽掉,然后为了usbdHcdAttach(execFunc, &pciCfgHdr,pToken)i函数的调用不变,需要手动配置pciCfgHdr,通过对usbdHcd Attach()函数的分析知道只需要配置pciCfgHdr的baseReg和intLine成员,前者初 始化为USB主机控制器相关寄存器的基地址,后者初始化为主机控制器中断服务 程序的中断向量号: pciCfgHdr.baseReg[0]=0x49000000; pciCfgHdr.intLine=HC_INT_NUM; 其中0x49000000是主机控制器相关寄存器的基地址‘211(物理地址),宏 HC_INT_NUM为主机控制器中断向量号。 (2) 通过调用MMU提供的物理地址到虚拟地址的转换函数将主机控制器初 始化所用的寄存器基地址直接传入pHost->memBase即可,在VxWorks提供的USB 主机控制器驱动中对主机控制器寄存器的操作都是基于基地址和对应的偏移量而 实现的,这样就方便了移植,因为对寄存器的操作流程是固定不变的,只需要将 寄存器基地址正确传入就可以实现对相关寄存器的正确操作。具体操作如下: 将usbHcdOhciLib.c中的fncAttach()函数中的: pSost->memBase=(pUINT32)(memBase+USB_PCI_MEMIO_OFFSET()) 源代码前面的涉及pHost->memBase的语句都屏蔽掉,然后加入如下代码: pHost->memBase,=(pUINT32)CACHE_DRV_PHYS一月2_VlRT(&cacheUserFuncs,pCfgHdr- >baseReg[0]): 从而将寄存器基地址转换为虚拟地址,完成pHost.>memBase的初始化。 (3) 申请HCCA(主机控制器通信域)时,由memset()获得的pHost->pHcca 指针即(OHCI主机HCCA区域首地址)在写入HcHCCA寄存器时不需要使用 USB_MEM_TO_PCI()函数先将虚拟地址转换为物理地址,再将物理地址加上PCI 内存偏移量转换为PCI总线可以访问的内存地址,屏蔽掉这层转换后,只需要将 申请到的pHost->pHcca这个虚拟地址直接传入就可以了,修改USB_MEM_TO_PCI ()中调用的usbMemToPci()函数的内部实现,将其具体实现改为: UINT32 usbMemToPci(pVOID pMemy*参数为待转换的内存地址水/ {严直接将相同的内存地址返回即可吖 return((UINT32)pMem): 第4章视频监控系统中的BSP驱动 } 。 (4) 修改usbPciIntConnect()函数,为主机控制器(HC)注册中断,不需要 将中断处理子程序与PCI中断向量表相关联,PCI的中断线是共享的,多个PCI 设备可以连接到同一条中断线上。PciIntConnect()使用一个链表管理多个中断服务 程序(ISR),发生中断时,先调用pciInt(),由pciInt()遍历链表,依次调用各个 1SR。本项目中只需将中断向量号与相应ISR直接关联,用VxWorks操作系统提供 的intConneet()函数直接注册,具体代码分析和修改如下: usbPciIntConnect(intHandler,pHost,pHost->pciCfgHdr.intLine) 上述源代码是在VxWorks的HCD中完成了主机控制器中断服务程序的中断挂 接,将其改为:‘ intConnect(IVEC(pHost->pciCfgHdr.intLine),intI-Iandler,m 其中调用IVEC()将pHost->pciCfgHdr.intLine转换为USB主机控制器实际的 中断向量号,intHandler()是USB主机控制器的中断服务程序,它的具体实现在移 植时不用修改; (5) 屏蔽usrConfig.c文件中的SysUsbPciOhcilnit()函数,因为开发板上无PCI 总线,不需要调用该函数;源代码: #ifdef INCLUDE_USB #ffdef INCLUDE_OHCI_PCI_INlT sysUsbPciOhcilnitO; 爿【endif 散:ndif 修改时只需要不定义INCLUDE OHCIPCI_烈rr宏即可,这样在预编译时就 能屏蔽掉SysUsbPciOhciInit()函数调用,不需要修改上述源代码,充分体现了使用 预编译的好处。 (6) 分析usrConfig.c文件中的USB模块初始化函数的调用过程,都是采用 预编译方式实现的,在移植的时只需要根据硬件环境的需要通过添加或者屏蔽一 些宏定义就可以达到目的,而不需要修改源代码,其中初始化USB模块的源代码 如下: /*initialize USB components*/ #ifdef INCLUDE USB INIT 基于ARMⅣxw砌(s的Web视频监控系统的研究和设计 usblnit():/*USB Host Stack Initialization*/ #endif #ifdef INCLUDE UHCLINIT usrUsbHcdUheiAttach0;/*UHCI Initialization*/ 托ndif #ifdef INCLUDE_OHCI_.INIT usrUsbHcdOhciAttach0;/*OHCI IBitialization*/ #endif 结合本系统所用的USB主机控制器采用的OHCI规范,在头文件的宏定义中 去掉INCLUDE.UHCL玳Ⅱ宏定义,只需要先调用函数usbInit()初始化USBD, 然后再调用函数usrUsbHcdOhciAttach()初始化OHCI规范的主机控制器, usrUsbHcdOhciAttach()函数在上述移植步骤的第一步中对其具体实现已经修改完 成,从而就可以完成USB主机协议栈的驱动。 (7) 重新编译修改后的USB模块: 在编译前可以在USB模块的库函数中加入调试信息,便于在定位调试中发现 出现的问题。具体编译过程如下(共三步): ①.删l蜍,/target/lib/(arch)/common目录下的libusb.a文件和libusb目录。 ②.设置环境变量,具体为:在host/x86.win32/bin目录下执行torvars。 ③.分别在targefisrc\usb、targefisrc\usr、targetksrc\drv\usb目录中执行make命 令。命令如下: make CPU=S3C241 0 TOOL=gnu 至此,VxWorks的USB主机驱动在¥3C2410开发板的移植已经完成。 4.4本章小结 在BSP研究设计和基本开发完成之后,本章主要针对视频监控系统的硬件 ¥3C2410核心板FTT-2410的特点,实现了远程视频监控系统的核心驱动程序,为 支持网络连接访问存储在文件系统中的USB摄像设备的视频采集信息提供了保 障。 第5章Web服务器和视频监控的实现 第5章Web服务器和视频监控的实现 Web技术的发展以及其方便性几乎改变了现在的信息表达形式,诸多应用都 是基于Web技术的。由于HTML语言的标准统一性,只要在嵌入式设备中有一个 微型服务器,就可以使用任意一种Web浏览器接收和发送信息。同样在本课题中 也采用了这种特别的Web服务器来对现场和设备状态进行监控,如何在¥3C2410 中移植一个快速的Web服务器和进行控制是本章的主要内容。 5.1嵌入式Web系统原理和功能 5。1.1嵌入式瘦型Web服务器 瘦型Web服务器l删是随着Web应用环境的改变而提出的。因为在应用当中, 特别是在嵌入式设备当中,一个Web服务器不可能是很全面的,它必须足够小, 并不影响嵌入式系统的整体性能,但又必须具备一个Web服务器应有的特征。它 可以包含一个实时操作系统(RToS)。Web服务器可以被用作一个单一线程,而 不需要RTOS的支持,或者是当使用RTOS时作为多线程应用的一个线程,不需 要动态存储分配。嵌入Web服务器通过CGI接口和其它方法,可以在HTML文件 或表格中插入运行代码,供RAM读取/写入数据。HTML页面内容一般是通过存 储在ROM中的压缩文件,由快速运行的代码动态产生的。可以利用Java、 JavaScripts等技术在客户端生成应用代码,而在服务器端通常只发布网页,以减少 在服务器端的代码和容量,提高服务器端的性能。这些就是瘦型Web服务器的要 求。嵌入式Web服务器是瘦Web服务器一个很好的体现。 5.1.2嵌入式Web服务器核心技术 直接采用的标准为TCP/IP协议栈,包括TCP、IP、ICMP、RARP等些标准的 协议对嵌入式Internet系统的大量使用有着很重要的意义。但这些协议的实现在嵌 入式系统中有着特别的要求,如图形和数据的显示、实时分布式对象计算等。因 为嵌入式TCP/IP协议栈对嵌入式系统的性能要求非常重要。例如通常采用网络任 务的动态调度算法来提高实时性能。 嵌入式Web服务器技术的核心是帅引擎。H1TrP协议是Web应用的标准 基于ARM/VxWorks的Web视频监控系统的研究和设计 协议,其已经从HITPl.0发展到HTrPl.1,性能有很大改变,增加了缓存功能。 HTTPl.0在每次HTrP请求中都需要TCP连接,而HTrPl.1标准可以为多个H,n呼 事务在浏览器和服务器之间只保持一个TCP连接,这样就大大提高网络和系统的 性能。所以,在嵌入式Web服务器中为得到一个稳定的用户界面而又不影响嵌入 式系统性能,通常使用HTYPl.0标准。图5.1是一个基于Web服务器的典型应用, 可以看出WebServer的在控制系统中的关键作用。 图5.1基于Web服务器的嵌入式应用 Fig.5.1 Embedded Applications based On Web Server 进行信息传递是嵌入式Web服务器的一个核心问题。通常的实现方式有元命 令、使用CGI脚本、Email等|。451。 (1) 元命令:元命令(Meta Commands)允许服务器来动态改变Web页面的 内容。这个命令是被嵌入式到HTML元素中的,并且当页面装载时更新 的信息被插入到命令的位置。元命令可以置于文件中或者作为服务器的 应用变量进行配置。 (2)HTML表格中的CGI脚本:用户可以通过填写表格来对一个嵌入式应用 提交数据给Web服务器,服务器通过运行一个CGI脚本(CGI Scripts) 第5章Web服务器和视频监控的实现 来处理信息。此种功能函数在单一线程环境下可以专门作为应用的一部 分来实现,在RTOS环境下可以作为服务器调度和应用调度之间的一个 桥梁。嵌入式Web服务器通常充分利用RTOS来进行设计,同时考虑服 务器能运行在单一线程环境下的要求,嵌入式Web服务器在服务器和应 用中通常把CGI脚本作为C函数来实现。 (3) 发送E.mail消息:E-mail可以用来记录Web服务器相关事件或者当设 备遇到特别需要注意的情况时通知适当的人,然后进行分析。例如,当 设备需要维护时,嵌入式W.eb服务器可以发送一个E.mail消息。 5.1.3嵌入式Web服务器主要功能. (1) 对设备的实时监控管理,参数的在线查看和配置等。 (2) 响应多个客户的实时哪请求,并为每个客户建立连接。 (3) 对设备访问的安全控制机制,包括SSL、用户口令等。 (4) 实现设备的故障智能报警。 (5) 保证不同操作系统或者客户端对设备访问的一致性。 可见,嵌入式Web服务器的这些主要功能可应用于视频监控系统之中。 5.2视频监控系统中的Web服务器 由于嵌入式Web服务器的实用性,目前国外的相关研究很多,如Ph列ap公司 的MicroWeb、Agranat Systems公司的EmWeb、EmWare公司的emMicro、Allegro 公司的RomPager、WindRiver公司的Wind,还有Boa、Enea、PicoWeb、ChipWeb、 Ipic、NetAcquire、Voyager、Quiotix等。国内的有Webit等。在VxWorks上建立 Web服务器的通常有两种选择。其一是使用Wind River提供的WebServer组件, 另外就是寻找和移植一款实用而又性能俱佳的免费Web服务器。尽管WindRiver 的WebServer组件焖更易于实现,但考虑到Wind River组件收费的昂贵性,为了 在开发产品时节省软件成本,因此本课题采取的是第二种方式。在众多的嵌入式 Web服务器中,有一款被称为针尖上的Web服务器,那就是GoAhead公司出品的 W曲服务器。 ..58.. 基于ARM,、,xW|orks的W.eb视频监控系统的研究和设计 5.2.1 GoAhead的Web服务器特点 GoAhead Web服务器可以帮助将嵌入设备转化成Web服务器,为Internet或 内部网提供高效的管理接口。它实现了标准的HTTP协议,.因而适合基于Web的 图形化管理。用户可以使用浏览器做为接口来访问嵌入设备,这样可以省去专用 管理软件。精致小巧的GoAhead Web服务器,提供了极为称道的性能。在性能方 面,使用一颗24MH z的68040处理器,其响应速度为20次,秒,使用266MHz的 Pendum处理器可以达到50次/秒的响应速度。基本上,它属于一个HTTPl.0标准 的Web服务器,对一些HTllPI.1的特性如(持久连接)也提供了支持。仅管它的 体积非常小巧,GoAhead W曲服务器却提供了不少的服务特性‘47】: ‘’ · 极小的内存开销 · 完美支持动态网页生成 在嵌入式设备中,大多数网页都是动态产生的,因为Web¥c1"vgr的主要功能 就是为了支持访问和控制,允许页面显示设备状态提供可操作的反馈信息是非常 重要的。通常有两种方式可以产生动态页面: ①.通过传统的C代码来产生HTML标签 ②.通过扩展标签在产生的网页中插入动态数据 第一种方式在对C代码的多次“编辑、编译、显示"循环中耗费大量时间, 同时需要得到数据的结果才能产生网页标签,如果没有得到合适的结果将无法产 生网页,而第二种方式是手动来生成HTML标签,只要网页一产生就可以看到数 据的状态,其开发周期更短,可以使用DreamWeaver等工具来以所见即所得的方 式来开发网页。 · 将对设备的访问控制功能放到Web服务器中去 · 支持将页面写入ROM 即使嵌入式设备没有硬盘或者永久性存储,也可以通过Web来进行控制和 访问,那就要求能够将Web页面存储在ROM之后。嵌入式Web服务器应 该支持Web页面能够被编译和链接成可以执行的。 · 内存CGI处理 第5章Web服务器和视频监控的实现 传统的CGI为每个请求产生一个新结果处理结果,由于CGI是实现与用户交 互的最频繁的方式,因此要产生很多个处理过程,这样会非常耗时。GoAhead 采取了一种新的称为GoFom一的内存内CGI处理方式专门用于嵌入式系统 高效的处理向CGIURL发出的请求。运行于内存中的GoForm过程不需要为 每个浏览连接产生一个进程,而是通过在GoAhead服务器内部共享相同的地 址空间,各种处理过程可以直接访问请求的内容,同时可以通过API很方便 的访问CGI变量。 · 支持多种平台和CPU体系结构 支持Windows CE、Wind River VxWorks、Linux、Lynx、QNX、与Windows 95/9踟灯等应用平台,支持ARM、X86、PowerPC等多种常用的处理器。 5.2.2 GoAhead Web服务器的移植 具体移植过程㈣如下: ‘. (1) 获取软件包源码: 在GoAhcad公司的官方网站下载GoAhead WebServer最新的2.18版本源 码,把GoAhead所有的C源码加到自己VxWorkage编译环境中。必须包含 如下组件,才能较好的支持WebServer的移植: ·Target shell ·C++Components ·Development tool componenm->loader components->target unloader ·Development tool components一>symbol table components一>synchronize host and targetsymbol tables (2) 修改Makefile: 增加定义下述宏: .DWEBS—DUEMF.DOS=”VXWORKS”一DVXWORKS 增加用户管理、存取控制支持,需增加定义: .DUSER_MANAGEMENT_SUPPORT .DDIGEST_ACCESS_SUPPORT 可以把宏传递给源文件,相当于在预编译的每个文件中定义这样的宏。 (3) 设置Web页面文件位置: 基于ARM/VxWorks的Web视频监控系统的研究和设计 GoAhead Web服务器对于Web页面在VxWorks映像中有两种存放形式: 。一是按原目录存放在嵌入式文件系统中,另一种是把所有的页面文件后存为 静态全局数组。前者适用于配置了文件系统的情况,后者适用于没有配置文 件系统的情况。由于我们在本课题中使用了TFFS文件系统,因此在这里使 用第一种方法。修改Jvxworks/main.C. ·设置根目录:#define ROOT_DIR T(”/tffs0/webs”) ·设置缺省主页:websSetDefaultPage(T(”index.htm”)),其中index.htm 文件为自行编写的主页文件 (4) 利用f啦等工具将开发的index.html等页面文件传到tffs0中。 (5)编译生成out文件: 移除工程中的源文件websSSL.c和webcomp.c,编译成功生成 goahead2410.out。 (6) 添加Web服务器为用户自启动: · 在系统提供的用户应用程序接口usrAppinit()中加入Webserver的入121函 数“main(0,0)"。 (7) 网页测试: 重新编译加载内核映像后,在客户监控端Firefox浏览器地址栏中输入 http://192.168.0.10/index.htm臣1]可浏览网页。 至此,基于VxWorks的Web服务器在¥3C2410上的移植已实现。 5.3视频监控系统中的数据库应用 5.3.1嵌入式数据库BerkeIey DB特性 在构建了嵌入式的Web服务器之后,为了更好的支持和扩展网络视频监控系 统的功能,本系统中Web服务端将构建一个嵌入式数据库便于信息的查询和检索。 普通常用的数据库如MySQL、Oracle等基于C/S结构的关系型数据库系统虽然代 表着目前数据库应用的主流,但却并不能满足所有嵌入式应用的需要。嵌入式数 据库与其它数据库产品的区别是,前者是程序驱动式,而后者是引擎响应式。嵌 入式数据库的一个很重要的特点是它们的体积非常小,编译后的产品也不过几十 .61. 第5章Web服务器和视频监控的实现 KB,在一些移动设备上极具竞争力,而且其实现必须充分体现系统的可定制性。 在嵌入式数据库中,SQLite和Berkeley DB嵌入式数据库通常与操作系统和具体用 集成在一起,无须独立运行的数据库引擎,由程序直接调用相应的API去实现对 数据的存取操作。但SQLite并不支持VxWorks,所以本课题选用BerkeleyDB数 据库‘4引。一般而言,BerkeleyDB数据库系统可以大致分为五个子系统,如图5.2 所示。 图5.2 Berkeley DB的五个子系统 Fig.5.2 Sub Systems of Berkeley DB 效括厍 5.3.2嵌入式数据库Berkeley DB移植 在VxWorks上移植Berkeley DB的过程如下: (1) 到Oracle的官方网站下载Berkeley DB的源码,解压后使用setup.exe文 件进行安装; (2) 在Tornad02.2开发环境中新建一个基于BSP的工程,找到安装目录中的 windlinkksleepycatXBerkeleyDB.4.6.21\build_vxwork的BerkeleyDB22.wsp 跟b-木,*22.wpj项目文件,添加到Tornado工程中,第一个文件用来产生 BerkeleyDB的主文件,第二个用来产生BerkeleyDB的udlides文件; (3) 选择包含与BerkeleyDB有关的依赖文件,右击选择Rebuild All(Berkeley 基于ARM/VxWorks的Web视频监控系统的研究和设计 DB.out),然后下载Berkeley DB.out文件; 5.3.3视频监控系统中的数据结构设计 BerkeleyDB并不支持SQL语句,而是提供了C语言的API来访问和操作数 据库。关键字(Key)和数据(Data)是Berkeley DB用来进行数据库管理的基础, 由这两者构成的Key/Data对组成了数据库中的一个基本结构单元,而整个数据库 实际上就是由许多这样的结构单元所构成的。结合具体的应用环境进行数据库表 结构的设计,例如可以将系统中的设备状态、现场需要监控的数据分别进行表记 录,存储到数据库中便于检测,在本系统为监控设备、故障、系统、用户分别设 计关键字,如表5.1—5.5所示: 序号 l 2 3 4 关键字(Key) DeviceID DeviceName DevState Use,nme 表5.1设备表DevT mlb.5.1 Device 1hble DevT 数据(Data) 字节数 l 类型 unsigned char 15 char【15] 1 unsigned char 15 char【15】 描述 设备ID 设备名称 设备状态 使用时间 序号 1 2 3 4 关键字(Key) ErrorDev ErrorType ErrorNum ErrOrTiiile 表5.2故障表ErrT Tab.5.2 Error mlble Er,r 字节数 1 15 l 15 数据(Data) 类型 unsigned char char【15】 unsigned char char【15】 描述 错误设备号 错误类型 错误号 发生时间 序号 1 2 3 关键字(Key) Time State UserlD 表5.3系统表SysT Tab.5.3 System Table SysT 数据(Data) 字节数 15 类型 char【15】 l unsigned char 15 char【15】 描述 系统时间 系统状态 登录用户 序号 1 2 3 4 5 第5章Web服务器和视频监控的实现 表5.4用户信息表UserT Tab.5.4 Users Information T{lble UserT 关键字(Key) UserName UsrID Password Priority LoginTime 数据(Dam) 字节数 15 类型 char【15】 1 unsigned char 15 char【15】 l unsigned char 15 char【15】 描述 用户名称 用户编号 设备状态 使用时间 用户登录时间 在设计好BerkeleyDB的数据结构之后,可以使用它提供的C语言API来建立 和访问和操作数据库,常用的有操作接El[50l如下表: 函数名(省略参数) int db_create() int DB一>open() intDB->put() int DB->get() int DB一>del() l。nt DB一>close() 表5.5 BerkeleyDB常用操作接口函数 Tab.5.5 Useful APIs of Berkeley DB 功能描述 创建一个数据库文件 将磁盘上保存的文件作为数据库打开 向Berkeley DB数据库中添加数据 从Berkeley DB数据库中检索数据 从Berkeley DB数据库中删除数据 关闭数据库 BerkeleyDB还提供了数据库管理工具使得在嵌入式系统上更加方便的对数据 库进行管理,例如数据库复制db_dump、数据库热备份db_hotbackup、 数据库加 载db_load、数据库恢复dbrecover和数据库升级db_upgrade等常用工具。 5.4 Web服务器上的视频监控实现 网络服务程序除了前面的Web服务器,还需要CGI程序。嵌入式web服务器 作为在后台的守护进程,负责监听来自网络的客户端请求,当用户通过浏览器向 嵌入式视频监控系统发出请求时,启动相应的CGI程序,将请求转化为嵌人式Web 服务器能够识别的形式,从公共缓冲区或Berkeley DB数据库中读取数据进行处理 后,再由CGI将结果转化为Web浏览器能够识别的形式,作为HTTP应答的消息 送回客户端,从而完成客户端对视频监控画面。 基于ARM/VxWorks的Web视频监控系统的研究和设计 5.3.1视频监控cGI程序模块设计 为了实现视频监控,需要在Web服务器上编写CGI程序采集设备或现场的状 态。服务器端软件主要由主控模块、视频采集模块、监视控制模块、系统设置/用 户设置模块、信息查询模块和网络传输模块构成。它主要实现多媒体数据的采集、 压缩、回放、存储、发送、信息的处理和查询等功能。模块结构如图5.3所示。 图5.3网络监控和管理模块结构图 Fig.5.3 Modules of Video Surveillance System Based on the Web 主控模块主要是控制各个模块的正常运行,对各个模块进行有效的管理,进 行一些如初始化系统等必要的工作。为了减轻CPU负担,拟采用硬件方式实现视 频数据的采集和压缩,采集后的视频数据分为两路,一路直接送到显示缓冲区中 进行本地显示,另一路则由硬件压缩后存储在本地文件系统中,或同时传输到客 户端,从而实现视频图像的实时采集、传输与显示。 监视控制模块的主要功能就是将各种前端的动作进行编码然后发送到前端, 从而实现对前端摄像头的云台控制和镜头控制。 在系统设置/用户设置模块中允许超级用户修改任意用户的密码,还可以增加 用户、删除用户和给其他用户分配权限。为了增强安全性,可以启用GoAhead Web 箜!童坠垒壁釜矍塑塑塑些笙箜塞婴 服务器的SSL协议用于Web服务器与用于浏览器间的身份认证和加密数据传输。 系统共有三种权限级别可供选择:“系统管理员"、“普通管理员’’、“普通操 作员",对每一种级别分配默认的权限。视频信息处理模块包括视频文件的播放、 存储、删除、抓图等子功能。 信息查询模块主要包括视频文件、图片和日志的查询等功能。系统在保存视 频文件时,以文件创建的时间作为文件名的一部分,并且不同的摄像机所摄的视 频文件保存在不同的目录中。这样在文件列表中可以方便的实现按年、月、日、 时间段及摄像机来查询视频文件。 网络传输模块可以使客户端软件能通过LAN或Interact共享主控服务器的信 息,它是利用Socket为客户机和服务器程序提供不同的Socket系统调用来实现信 息共享的。 5.3.2 CGl监控程序设计和编写 CGI(Common Gate Intergace)是通用网关接El,是一段运行在服务器的程序, 它提供同客户端HTML页面的接口。CGI把网页和Web服务器中的执行程序连接 起来,同时CGI也把HTML接受的指令传递给服务器,再把服务器执行的结果返 回给HTML页面。有了CGI,网页就变得有交互性和极具生命力。用CGI可以处 理表格、数据库查询、发送电子邮件等多项操作。同时GoAhead Web服务器也提 供了丰富的API可用‘51l,在本课题中,有关设备控制、状态的CGI程序都用C语 言来写。 CGI接口包括标准输入、环境变量、标准输出3部分。CGI程序同其他可执 行程序一样,可以通过标准输入(stdin)从Web服务器得到输入信息,如表单(Form) 中的数据,这就是所谓的向CGI程序传递数据的POST方法。服务器与CGI程序 交换信息的协作方式是通过环境变量实现的。环境变量是一写保存用户信息的内 存区。无论什么请求,CGI程序总能在特定位置找到某些信息。操作系统提供了 许多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务 器和CGI接口又另外设置了自己的一些环境变量,用来向CGI程序传递一些重要 的参数。CGI的GET方法还通过环境变量QI脓Y STRING向CGI程序传递Form 中的数据。CGI程序通过标准输出(stdout)将输出信息传送给Web服务器。传送 基于舢己M~xWorks的Web视频监控系统的研究和设计 给Web服务器的信息可以用各种格式,通常是以纯文本或者HTML文本的形式, 这样就可以在命令行状态调试CGI程序,并且得到它们的输出5521。 图5.4 CGI程序设备处理流程 Fig.5.4 Process of CGI Operations Oil Device CGI程序产生的输出由两部分组成:MIME头信息和实际的信息。两部分之 间以一个空行分开。因为可以使用MIME头信息“Cont enttype:text/plain姚a"和 printf()、putchar0等函数调用来输出纯ASCII文本给W曲服务器。那么也可以使 用MIME头信息“Contenttype:text/htmlknLn”来输出HTML源代码给Wreb服务器。 任何MIME头信息后必须有一个空行。一旦发送这个MIME头信息给Web服务器 后,Web浏览器将认为随后的文本输出为HTML源代码,在HTML源代码中可以 使用任何HTML结构,如超链接、图像、表单及对其他CGI程序的调用。也就是 说,可以充分利用CGI来产生html网页文件,将设备的状态信息反馈到浏览器。 对嵌入式系统的应用来说,显示静态网页是为了展示产品信息、文件资料等 第5章Web服务器和视频监控的实现 一些长时间内保持不变的信息。使用动态网页能在客户端提交表单,向Web服务 器发送某些嵌入式系统中某些控制变量的名称和对应的设置值,最终达到对嵌入 式系统进行远程控制。在很多情况下,还需要在网页中实现监控的“监"的功能。 在网页中实时反映系统的当前状态。如传感器的当前值,工业现场设备的温 度、电流数据等。实现嵌入式Web服务器的实时监控功能可以通过SSI技术来实 现。SSI是GoAhead提供的一套命令,由服务器解释执行,对客户端没有限制。 这些命令直接嵌入到HTML文档的注释内容,当服务器发现客户端请求的网页中 有SSI命令标记时,嵌入式Web服务器解释标记语言,并把相应监控函数的结果 作为HTML的内容替换标记语言。例如网页内容中包含HTML代码“印>现场温 度传感器温度是<!.-#echo vat=”tempeature"叫p>>中,”#echo"命令的作用是显示 变量temperature的数值,Web服务器解析命令后,先通过监控函数读取工业现场 温度传感器的数值27,然后用数值代替原网页代码中的SSI命令,将网页内容发 送到客户端,我们就会在客户端的浏览器上看到“现场温度传感器温度是27”。由 于监控函数是实时读取的,所以网页内容也是动态生成的,从而达到实时监控的 目的。为了在网页上实现视频监控,在这里先设计好各个功能模块及其函数接口, 在网页上进行鼠标点击等请求操作的时候调用这些CGI程序去获取设备状态、执 行监控指令等。其中,设计的几个主要函数如下页中表5.6所示: 表5.6 CGI应用程序接口 函数接口名称 clclseMonitor() checkLog() picSend() picView() videoPlay() emailAlarm() adjustMonitor() changeMode() scopeControl() cradleControl() sysAdmin() syslnfo() 函数功能描述 关闭监控系统 · 查看监控日志 发送图片文件 查看图片文件 播放视频文件 . 自动发送email报警 调整监控状态 切换监控模式 镜头控制 云台控制 系统管理 查看系统状态 -68. 基于越m价,xW.orl(S的Web视频监控系统的研究和设计 5.3.3实现Web页面的视频监控 Web页面可使用html语言直接编写,也可以利用Dreamwear等工具来开发。 主要开发系统登录页面login.htm、系统管理页面admin.htm、监控页面monitor.htm、 信息查询页面infoview.htm几个主要的页面。在编写好Web程序之后,监控功能 的强大跟视频监控系统的软硬件(包括硬件和驱动程序、对应的CGI程序)是否 完整密切相关。 图5.5远程访问监控界面 Fig.5.5 Snapshot of CGI—based Video Surveillance System 5.4本章小结 本章主要为实现远程视频监控系统的核心应用程序,即移植嵌入式GoAhead Web服务器来支持Web服务访问,移植实时数据库Bekerly DB来管理视频监控各 个模块信息,同时编写视频监控的CGI程序,客户端便可以采用浏览器来实现访 问Web的方式来进行远程视频监控。 结论 结论 本论文提出了一种基于ARM体系结构和VxWorks操作系统的视频监控方案, 是ARM技术、VxWorks操作系统技术以及网络技术的结合。在实现过程中,结合 开发板的硬件特性,开发VxWorks的BSP和相关驱动程序,然后移植了免费开源 的嵌入式Web服务器和嵌入式数据库,在此基础上设计了视频监控的基本模块结 构、基于数据库管理的数据结构,并编写相应的CGI程序来实现现场视频监控, 对实现网络视频监控、网络视频服务器有一定的参考价值。 本论文的主要工作包括: (1)分析了本论文的技术基础,其中包括ARM体系结构和VxWorks系统内 核及其开发,探索结合ARM与VxWorks相结合的远程视频监控方案。采取基于 ARM920T的FFT--S3C2410的硬件平台,使用从NOR Flash启动VxWorks操作系 统,将Web服务器等程序和数据保存在Nand Flash的文件系统中,采取10/100M 以太网卡来传输数据,并使其支持USB网络摄像头。 (2)在系统设计方案确定之后,分别实现了基于¥3C2410的BSP开发和移 植,然后为支持基于Web的网络监控和USB摄像设备,分别编写了TFFS文件系 统、CS8900A网卡和USB主控制器驱动程序。 (3)在操作系统和驱动基本完善后,设计了实现Web服务和视频数据管理的 应用方案,移植了免费的嵌入式Web服务器GoAhead和数据库嵌入式实时数据库 Berkely DB,同时编写CGI程序让客户端以浏览器的方式来访问,实现远程监控。 至此,本论文的研究工作告一段落,但由于时间关系和知识技能所限,加上 整个系统工作量巨大,部分设计和开发工作尚不完善。在下述方面的工作有待进 一步研究: (1)本系统关于视频监控中的视频数据的压缩和传输、摄像头设备驱动在本 文中尚未涉及,对于压缩算法、各种具体的设备驱动有待于进一步研究和开发。 (2)本系统采用10M以太网卡来传输视频数据,可以根据实际的应用要求在 硬件上扩展支持更高传输速率的网卡,如100M网卡; (3)本系统采用NAND Flash来保存部分视频信息,尚未开发更大容量存储 基于ARM/VxWorks的Web视频监控系统的研究和设计 器设备的驱动程序,对于需要保存大量视频数据的应用要求,可以考虑使用大容. 量硬盘或其他网络存储方式来存放; .. (4)本系统采用的是具有较高实时性的RTOS,在应用中进行二次开发,开 发各类应用程序时候,需要充分利用VxWorks的实时性,较好的规范的进行任务 划分。 参考文献 参考文献 [1]郝继辉.网络视频监控技术的发展和展望.安防科技,2007/05:19—20. [2]王建新,杨世风,史永江,童官军.远程监控技术的发展现状和趋势.国外电子测量技 术,2005/04:9-10. [3]白晶,秦现生等.基于Internet的远程控制智能网络接口设计与实现.微处理机, 2006/05:25-27. [4]卢秋波.视频监控技术简介与发展趋势.安防科技,2007/05:9-11. [5]Compaq,Intel,Microsoft,NEC.Universal Serial Bus Specification Revision 1.1, 1998:3. [6]Compaq,Intel,Microsoft,NEC.Universal Serial Bus Specification Revision 2.0, 2000:43. [7]周洁,杨心怀.32位RISC CPU ARM芯片的应用和选型.电子技术应用,2002/08:7-9 [8]刘鲁新,权进国,林孝康.ARM9处理器与ARM7处理器比较.电子技术应用,2004/11 [9]王庆民,刘福岩.ARM MMU中虚地址转换研究.机械工程与自动化,2007/02:44—46 [10]王学龙!嵌入式VxWorks系统开发与应用.北京:人民邮电出版社,2003:2-4. [11]谢仕义,徐兵.嵌入式Web服务器的设计及其CGI实现.计算机工程与设计。 2007/07:1598-1599. [12]刘智,付保川I,奚雪峰,基于Berkeley DB的监控系统的设计与实现.科技广场, 2007/0 1:82-84. [13]王洪蛟,董学仁,等.BerkeIey DB在嵌入式系统中的应用研究.仪器仪表用户, 2007/06:17-18. [14]Wind River Systems Inc.VxWorks 5.5 BSP Developer’S Guide,2002:12. [15]Ron Fredericks,Wind River.FAQ:What is a Board Support Package,2002. [16]丁大尉,王金刚等.VxWorks实时操作系统下BSP,计算机工程,2004:68—69 [17]Wind River Systems Inc.VxWorks Reference Manual 6.4 Edition 1,1999. [18]西安傅立叶电子.fft2410简易板使用手册.西安,2005. [19]张忠,樊留群.VxWorks在¥3C2410上的BSP设计.微型电脑应用,2005:16一19. [20]Wind River Systems Inc.VxWorks Real-Time Kernel,2002:3. [21]Samsung Electronic.¥3C2410X User’S Manual Revision 1.1,2004:30. [22]李忠民,杨刚.ARM嵌入式VxWorks实践教程.北京:北京航空航天大学出版社, 2006:83-86. 一72- 基于朋tMⅣxW.orl(s的Web视频监控系统的研究和设计 [23]http://'舯.edacn.net/index.php/49955/viewspace一6226.html [24]杨扬,高凯,李正熙.基于¥3C2410的Vxworks BSP移植.北方工业大学学报, 2006:507-511. [253 Wind River Systems Inc.VxWorks BSP Driver Suite,2002:5. [26]王凯,宋华伟,杭德全.基于VxWorks的FLASH存储器实时存取管理方案.微计算机信息, 2005/13:2 1-23. [27]阎航.FAT文件系统在NAND Flash存储器上的改进设计.单片机与嵌入式系统应用, 2006/1 1:27-29. [28]M-Systems Inc.TrueFFS Wear-Leveling Mechanism,2002. [29]Wind River System Inc.TrueFFS Software Development Kit(SDK),2003. [30]吴楠,郭政慧.嵌入式操作系统VxWorks的TFFS文件系统的实现.开发研究与设计,2007. [31]Samsung Electronic.K9F1208A Flash Memory Datasheet,2003:7. [32]王仁勇,俞建新.基于VxWorks的TrueFFS分析与实现.计算机工程,2007:67-69. [33]Hales Computers.Boot vxWorks from User Flash on VMPC6x board using TFFS.2005. [34]周启平,张扬.VxWorks下设备驱动程序及BSP开发指南.北京:中国电力出版社, 2004:121. [35]张晓华,李智涛,VxWorks网络协议栈的MUX接口.单片机与嵌入式系统应用,2004. [36]Wind River System Inc.VxWorks Network Protocol Toolkit Edition 1.1999:8. [37]吕佳彦,杨志义,赞志文,王灵敏.VxWorks增强型网络驱动程序(END)的分析与实现.计 算机应用研究,2005:200-202. [383 Cirrus Logic.CS8900A datasheet,2004:1,8卜82. [39]Wind River System Inc.VxWorks Network Protocol Toolkit Edition 1.1999:18. [40]Wind River System Inc.USB Developer’S Kit User’S Guide,1998. [41]Samsung Electronic.¥3C2410X User’S Manual Revision 1.1,2004:30. [42]林宝如,张帆,陈怡.基于VxWorks操作系统的USB驱动分析.重庆建筑大学学报, 2005:98-100. [43]冯文江,杨小静.基于VxWorks操作系统的USB驱动分析与实现.现代电子技术, 2006:73-75. [44]黄学雨,成锡岗:基于AVR单片机的嵌入式瘦服务器系统设计思想.电子工程师,2003/01. [45]刘文涛,胡家宝.嵌入式Web服务器的分析与研究.单片机与嵌入式系统应用, 2006:61-63. [46]Wind River System Inc.WindWeb Server 2.0,2002:1-2. ..73.. 参考文献 [47]GoAhead Software Inc.GoAhead WebServer white paper,2000:3-4. [48]姜俊秀,李正熙.嵌入式操作系统VxWorks中WebServer的设计与应用,2005/03:44-46. [49]万玛宁,关永,韩相军.开源嵌入式数据库BerkeleyDB和SQLite的比较.嵌入式数据库应 用,2005:5-7. [50]Orac le.Getting Started With Berkeley DB With C,2006. [51]张曦煌,柴志雷.嵌入式Web服务器中CGI的特点及实现.小型微型计算机, 2003(24/1 1):2046-2047. [523邢苗条.C语言在CGI程序设计中的应用.现代电子技术,2002/09:49-51. .74. 致谢 致谢 本论文是在导师刘朝斌老师的悉心指导下完成的。从论文选题、论文撰写、 直到定稿的整个过程中,刘老师倾注了大量的精力。刘老师渊博的知识、严谨的 治学态度、勤勉的治学作风使我受益匪浅,为我今后的学习和工作树立了榜样。 在三年研究生期间,刘老师对我在学业和生活上给予了种种指导和关怀,我在这 里对他表示由衷地感谢和敬意! 同时也感谢计算机学院其他各位老师七年来对我在学习和生活上给与的帮 助,使我能够顺利完成学业。感谢教研室的刘成勋、李运芝、阮敏等同学,本系 的孙飞、张文松等朋友,感谢他们在我做论文期间提供的众多良好建议和种种无 私帮助! 最后,我要感谢养育和支持我多年的父母以及其他时刻关注我的亲戚朋友们, 正是他们无私的关怀和不断鼓励督促才让我顺利的走到今天! 研究生履历 研究生履历 姓名 性别 出生日期 获学士学位专业及门类 获学士学位单位 获硕士学位专业及门类 获硕士学位单位 通信地址 邮政编码 电子邮箱 邓成文 男 1982年6月12日 工学 大连海事大学 辽宁省大连市凌海路1号 116026 denvenOne舳ai 1.dlmu.edu.cn ..77.. 基于ARM/VxWorks的Web视频监控系统的研究和设计 作者: 学位授予单位: 邓成文 大连海事大学 相似文献(1条) 1.学位论文 李海宁 基于H.264的智能手机监控系统的设计与实现 2009 视频监控应用有着广阔的市场需求。可是,目前大部分的视频监控系统主要集中在桌面计算机或者基于Web网络。随着国内3G网络的正式商用以及移 动智能终端计算能力的飞速发展,基于智能手机的无线视频监控系统有着很大的发展前景。 本文实现了一种采用智能手机终端的数字视频监控系统。该系统采用H.264视频编码标准。众所周知,H.264是目前最优秀的视频压缩编码标准。利 用H.264.的高压缩性、网络亲和性以及错误恢复能力,系统可以克服无线网络带宽有限和噪声干扰的缺点,同时能够得到高质量的视频监控画面。本文 系统在网络协议上选用了RTP多媒体传输协议。该协议广泛应用在音视频传输、流媒体应用领域。RTP协议能够实现在非宽带网络中的音视频流传输、控 制和质量反馈,保证数据传输的服务质量。在智能手机接收端,本文系统采用了Windows Mobile操作系统。该智能手机操作系统目前市场占有率高,具 有使用方便、程序开发便捷等特点。 本文首先介绍了H.264标准在编解码方面采用的新技术,分析了它在网络传输方面的结构特点,以及它优异的错误恢复技术。然后文章通过对RTP、 RTSP等流媒体传输协议的分析,提出了一种适合H.264视频负载的RTP打包方案。接着本文分析比较了目前市场上流行的智能手机操作系统,最终选用 Windows Mobile作为客户端系统,并介绍了如何在该系统平台上进行软件开发。文章最后介绍了如何设计并实现基于H.264的智能手机监控系统。具体讲 解了PC端视频采集、开源库代码移植、智能手机视频回放等实现方法,同时指出了系统实现过程中遇到的各种问题以及解决方案,并最终展示了系统的 整体实现效果。本文对于在智能手机上开发流媒体视频应用也有一定的借鉴作用。 关键词:视频监控;H.264;RTP;Windows Mobile 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1257325.aspx 下载时间:2010年5月26日
更多简介内容

评论


个人中心

意见反馈

求资源

回顶部

下载专区


TI 参考设计资源库

工业电子 汽车电子 个人电子
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })