深入研究嵌入式web服务器的视频监控应用

发布者:画意人生最新更新时间:2009-02-16 来源: 微计算机信息关键字:嵌入式Linux  Web服务器  Thttpd 手机看文章 扫描二维码
随时随地手机看文章

1.引言 

      随着微处理器技术、计算机网络技术的进步,基于嵌入式WEB的网络数字视频监控系统逐渐得到了人们的广泛关注。把图像采集、视频压缩和WEB功能集中到一个体积很小的设备内,可以直接连入局域网和Internet,达到即插即用,省掉多种复杂的电缆,安装方便,用户也无须安装任何硬件设备即可观看,这使得由嵌入式网络视频监控服务器组成的监控网络组网和扩展都极为灵活方便。

2.WEB服务器所在系统工作原理 

      如图1所示,系统有两种网络接入方式:通过PPPOE自动拨号,动态获取IP联入Internet;自定义静态IP连入局域网。


     之后,系统的整个工作流程包括两条主线: 

     1.通过HTTP/TCP/IP方式,解析来自监控端的网页请求,包括:摄像机控制(云台上下左右、镜头光圈、缩放等等),数据库读写(视频参数如分辨率、亮色度、码流,画质),视频调度与传输(多个用户之间视频数据的发送停止及其相互协调,系统参数也放在这里)。 

      2.通过RTP/UDP/IP方式,为监控端提供所需的实时视频信息。RTP/UDP/IP的方式兼顾了视频传输的实时性与QoS保证。 

3.WEB服务器的选择 

      根据工作原理的描述,WEB服务器处于整个系统核心的位置,需要解决的几个难点包括: 

      1.安全性。只有授权登陆用户才能进行系统配置(网络参数、视频特性等等)。普通用户只能简单监控。 

      2.流量控制。视频数据连续且大量,服务器应该具备一定的协调各路监控数据的能力。 

      3.实时性。对于监控端的web请求指令响应速度,特别是在高负荷的情况下。 

      4.性能。在多路监控请求同时存在的情况下,系统的响应速度。 

      5.支持串口命令。云台控制指令需要串口支持。 

      6.数据库交互。包括用户数据库,系统配置参数等等,都需要实现脱机保存。 

      uCLinux下,主要有3个WebServer:Httpd、Thttpd和BOA。Httpd是最简单的一个WebServer,它的功能最弱,不支持认证,不支持CGI(CommonGatewayInterface,通用网关接口)。Thttpd和BOA都支持认证、CGI等,功能都比较全。BOA源代码开放、性能可靠、稳定性好,但是是一个单任务的Web服务器。所以,我们选择简单、小巧、易移植、快速和安全的Thttpd。 

      Thttpd在默认的状况下,仅运行于普通用户模式下,从而能够有效地杜绝非授权的系统资源和数据的访问,同时Thttpd全面支持HTTP基本验证(RFC2617),可有效解决安全性的问题。 

      另外,Thttpd对于并发请求不使用fork()来派生子进程处理,而是采用多路复用(Multiplex)技术来实现,因此效能很高,可以有效提高系统的性能。 

      最后,Thttpd基于URL的文件流量限制,对于连续的视频流量控制而言是非常方便的,象Apache就必须使用插件实现,效率较Thttpd低。在Thttpd的官方网站上有一个与其他webserver的对比图Benchmark。 

      综上所述,Thttpd在安全性、性能、流量控制等方面有效的满足系统需要,当然,实时性也得到很好的保证。下面,结合源码,首先实现Thttpd的基本功能,然后将视频数据转发、安全性、支持串口命令、数据库交互的实现完善起来。

4.Thttpd基本功能的实现 

       首先,确保在编译uCLinux内核的makemenuconfig这一步,选中busybox中的Thttpd。 

       然后,根据需要,修改源码/user/thttpd下的config.h: 

       #defineDEFAULT_PORT80 

      //服务器监听端口 

      #defineDEFAULT_DIR/home/httpd 

       //设定服务器根目录 

       #defineINDEX_NAMEindex.html 

       //设定访问服务器时的默认主页 

       #defineAUTH_FILEpasswd 

      //授权用户数据库文件 

       #defineCGI_PATTERN/cgi-bin/*.cgi 

      //CGI的文件名格式 

      #defineCGI_PATH/home/httpd/cgi-bin 

      //CGI的所在目录 

      接下来,建立服务器根目录和文件目录: 

      由于uCLinux的根文件系统为ROMFS,只读,因此要在生成文件系统映像之前建立好其中的目录和文件。首先是Web服务器根目录,再是根目录下的子目录:文件根目录和CGI程序目录。修改/vendor/Samsung/4510B/makefile文件,在ROMFS_DIRS列出的目录中增加home/httpd(服务器根目录和文件根目录),home/httpd/cgi-bin(CGI程序目录)。 

      最后,将监控系统相关的网页和CGI程序分别放在/vendor/Generic/httpd和/vendor/Generic/httpd/cgi-bin中,就可以随内核编译过程时自动复制到image的相关目录下。在/vendor/Samsung/4510B/rc中添加thttpd实现上电自动执行。

5.HTTP基本验证(RFC2617)的实现 

      首先必须生成存放用户及其密码的数据库文件: 

      由于Thttpd在http验证的实现上基于b64_decode_table解密,因此需要提供相对应b64加密而成的数据库文件。然后,编译/user/htpasswd.c,切换到相应目录下, 

      执行./htpasswd-cpasswdroot 

      Addingpasswordforroot. 

      Newpassword: 

      Re-typenewpassword: 

       其中,-c表示创建一个名字为passwd的新的用户数据加密文件,同时第一个用户名为root。 

       之后,将passwd文件复制到/vendor/Generic/httpd下面,并且注意在thttpd/config.h中define的AUTH_FILE与passwd同名。至此,thttpd的http验证功能就顺利添加完成。

6.视频调度与传输 

      在本系统中,模拟视频数据经过AD,采样等预处理进入支持MPEG4编码的ASIC芯片压缩后,打包发送的任务由Thttpd完成。 

      在多个监控端请求同时存在的情况下,指令响应本身Thttpd已经完成,所以我们只需要实现数据传输。 

      在main函数里Mainloop开始之前依次执行get_device,driver_init,device_init和alloc_resource,interrupt_enable,device_start,视频流的编码压缩就开始了。添加定时器响应函数,(void)tmr_create((structtimeval*)0,transfer_bitstream,(ClientData)mpeg4_fd,0,1); 

      其中mpeg4_fd,是编码芯片的设备描述符,transfer_bitstream为响应函数(内容略)。 

      然后,根据Thttpd连接请求的变化,在handle_read与handle_send中添加简单相应连接有效性判断的代码即可完成数据调度与传输的功能。

7.串口命令支持 

      云台控制指令的发送需要RS485的支持。 

      在thttpd.c的main函数里添加设备支持:打开串口设备. 

      intcom1fd=open(/dev/ttyS1,O_RDWR|O_NOCTTY); 

      传输波特率的设定: 

      tcgetattr(com1fd,&oldtio); 

      cfmakeraw(&oldtio); 

      cfsetispeed(&oldtio,B9600); 

      cfsetospeed(&oldtio,B9600); 

      tcsetattr(com1fd,TCSANOW,&oldtio); 

      在libhttpd.c里包含定义云台信令的头文件后,在httpd_parse_request中添加如下代码, 

      memcpy(cmd,YT_FOCUS_IN,YT_CMD_NUM); 

      将web请求转换为对应的云台信令存储在cmd数组中,最后,由于uclinux把所有设备作为文件操作,所以可以通过write(com1fd,cmd,YT_CMD_NUM);将云台信令正确发出去。

8.配置信息的保存(MTD驱动的实现) 

      uCLinux在ARM上移植过程中,一般不采用FLASH文件系统,它是在Bootloader初始化系统并重映射内存后,由Bootloader将Kernel和根文件系统的映像从FLASH上直接复制到RAMuCLinux系统起始地址(0x8000),然后通过设定PC值将控制权交给uCLinux。 

      这种方式采用的是ROMFS文件系统,系统结构简单,实现方便,但ROMFS是只读文件系统。RAM盘虽可写但一旦掉电就会丢失内容。若想长久保存应用程序的配置文件可采用两种方法:一种是将FLASH上划出几个固定的扇区可读可写,用以专门存放所有要用到的配置文件;另一种是建立可写的JFFS2文件系统。前一种方法代码简单、灵活,适用于不太频繁的文件写入。后一种实现起来也比较简单,但时间、空间等方面的代价要高于前一种,适用于非常频繁的文件写入(比如一分钟超过十次)。基于本系统中对配置数据存储的实时性要求不高,而嵌入式资源又十分宝贵,因此考虑采用第一种方法,这就是MTD(memorytechnologydevice内存技术设备)。MTD是用于访问memory设备(ROM、flash)的Linux的子系统。其所有源代码在/drivers/mtd子目录下。 

      由于MTD的主要目的是为了使新的memory设备的驱动更加简单,因为它介于特定的闪存设备和文件系统之间,可以理解为它在硬件和上层之间提供了一个抽象的接口。所以硬件驱动程序不需要知道象JFFS2和FTL那样的用户模块使用的方法。所有它们真正需要提供的就是一组对底层闪存进行read、write和erase操作的简单例程,即/mtd目录下mtd-utils.c相应函数。将mtd-utils.c继承过来,另外,加上手工添加的flash分区表即可达到配置文件保存的目的。 

      配置信息的保存 

      本系统只有一片FLASH,大小为2M。拟分区如下: 

      name:bootloader(128KB), 

      size:0x20000, 

      offset:0x0, 

      mask_flags:MTD_WRITEABLE//只读分区 

      name:kernel&rootfs(1856KB), 

      size:0x1D0000, 

      offset:0x20000 

      name:systemconfig(64KB), 

      size:0x10000, 

      offset:0x1F0000 

      将包含本分区表的文件放在drivers/mtd/map下,并修改相应的makefile使之编译时有效。 

      然后,选择适当的MTD用户模块,启用对闪存的访问:MTD_CHAR和MTD_BLOCK。MTD_CHAR提供对闪存的原始字符访问,而MTD_BLOCK将闪存设计为可以在上面创建文件系统的常规块设备(象IDE磁盘)。与MTD_CHAR关联的设备是在/vendor/Samsung/4510B/makefile的DEVICES中添加mtd0,c,90,0、mtd1,c,90,2、mtd2,c,90,4,而与MTD_BLOCK关联的设备是添加mtdblock0,b,30,0、mtdblock1,b,30,1、mtdblock2,b,30,2。 

      最后,需要将MTD子系统编译到内核中,即打开makemenuconfig里MTD相关的选项。 

      因为要使用当中涉及多个配置文件,而读写FLASH的速度较慢,故每次配置完成后不立即写入flash,而是先把配置文件存在thttpd代码开辟的临时数组里,然后一次性(比如重启前)写入指定的FLASH分区。

9.配置信息的管理 

      系统第一次启动会加载一组默认配置,这是通过判断flash最后一个systemconfig(64KB)分区是否未被初始化(全为1或0)来实现的。在thttpd.c的main函数,加入open(/dev/mtd2,O_RDWR)可打开mtdblock2。将drivers/mtd下mtd-utils.c复制到user/thttpd目录下,即可使用其中的一些函数方便的实现flash的read和write操作。

10.结语 

      嵌入式系统Webserver与CGI技术结合使得对嵌入式系统的管理和使用更为简便直接。基于Web的视频监控系统是目前监控领域发展的主流和方向。本文根据监控系统对数据吞吐量和安全可靠性等各方面的实际要求,结合相关研究的新进展,深入讨论了web服务器在监控系统设计中的应用技巧,并详细做了实现上的阐述。对所有基于嵌入式web技术的监控系统的设计具有非常实际的指导作用。读者可在本文研究的基础上做进一步的完善。

关键字:嵌入式Linux  Web服务器  Thttpd 引用地址:深入研究嵌入式web服务器的视频监控应用

上一篇:两公司达成协议扩展对Achronix FPGA 支持
下一篇:基于DSP的雷达视频信号数字采集与检测

推荐阅读最新更新时间:2024-05-02 20:46

移植嵌入式Linux到ARM处理器S3C2410:BootLoader
BootLoader指系统启动后,在操作系统内核运行之前运行的一段小程序。通过BootLoader,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 BootLoader 几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。   BootLoader 的实现依赖于CPU的体系结构,因此大多数 BootLoader 都分为stage1 和stage2 两大部分。依赖
[单片机]
移植<font color='red'>嵌入式Linux</font>到ARM处理器S3C2410:BootLoader
基于嵌入式Linux的TFT LCD IP及驱动的设计
系统总体设计方案 本系统的总体设计框图如图1所示。 图1 系统框图 Nios II处理器在SDRAM中开辟帧缓冲(Frame buffer),可以是单缓冲也可以是双缓冲。以单缓冲为例。处理器将一帧图像数据(640×480×2Bytes,RGB565,16bit)存入帧缓冲,然后将帧缓冲的首地址写入到LCD控制器,并启动LCD控制器。该控制器自动从传来的首地址处开始读取数据,并按照TFT的格式输出。图中各模块由 Avalon Bus连接在一起。Avalon Bus是一种简单的总线结构,Nios II处理器和各种外设都是通过Avalon Bus连接在一起。由图1可以看出,作为Slaver的SDRAM Controller分别
[单片机]
基于<font color='red'>嵌入式Linux</font>的TFT LCD IP及驱动的设计
基于嵌入式Linux 的移动终端的软件设计
1   引言 实时操作系统(RTOS)是嵌入式应用软件的基础和开发平台,应用程序都是建立在它之上。实时嵌入式操作系统的种类繁多,大体上可分为两种:商用型和免费型。商用型的实时操作系统功能稳定、可靠,有完善的技术支持和售后服务,但价格昂贵。免费型的实时操作系统在价格方面具有优势,目前主要有 Linux、μC/OS 等。 与其它嵌入式操作系统相比,嵌入式 Linux 具有开放源代码、高可靠性以及强大的网络功能等优势,因此选用了嵌入式 Linux 系统作为移动终端的软件平台。 2   车辆监控系统概述 车辆监控系统是融全球定位技术(GPS)、地理信息技术(GIS)和通用分组无线业务(GPRS)于一体的高科技系统,由移动终
[嵌入式]
嵌入式Linux下的实时性增强方案
    Linux以其功能强大、源代码开放、支持多种硬件平台、模块化设计方案以及丰富的开发工具支持等特点广泛应用在嵌入式系统领域。作为嵌入式产品的操作系统平台,具有较好的实时性、系统可靠性、任务处理随机性是系统追求的目标,目前商业嵌入式操作系统实时性能可以满足嵌入式领域的需求,但由于其价格昂贵,应用受到了限制 。而嵌入式Linux以其非常低廉的价格,可以大大地降低成本,逐渐成为嵌入式操作系统的首选。但由于其在实时应用领域的技术障碍,要应用在嵌入式领域,还必须对Linux内核作必要的改进。本文以S3C2410+Linux作为移动机器人操作平台,为了提高机器人任务处理的实时性,针对影响Linux OS实时性能的若干方面进行研究,并利用
[嵌入式]
基于嵌入式Linux的智能手机系统设计
摘要:介绍以MotorolaMX1作为中央处理器、Wavecom公司的Q2403A作为无线收发模块、嵌入式Linux作为操作系统的智能手机系统的设计与实现。该设计可以实现GSM语音通信、GPRS上网及PDA相关应用软件等功能,具有结构清晰、易于开发等优点。 关键词:Linux 嵌入式系统 智能手机 随着手持通信设备市场的快速发展,手机的功能逐渐增多。现在手机已经不只是用于语音通信的手持设备,而成为集成了短信、彩信、上网以及移动办公等附加功能的嵌入式通信平台。集成了这些功能的手机被称为智能手机。近年,嵌入式处理器的运行速度和功能都有了很大的提高,使得许多以前只能在PC上实现的应用,现在都可以在手持设备上实现。目前,市面上的智能
[嵌入式]
嵌入式Linux网络驱动程序的开发及实现原理
   0 引言   随着人们对开放源代码软件热情的日益增高,Linux作为一个功能强大而稳定的开源操作系统,越来越受到成千上万的计算机专家和爱好者的青睐。在嵌入式领域,通过对Linux进行小型化裁剪后,使其能够固化在容量只有几十兆字节的存储器芯片或单片机中,成为应用于特定场合的嵌入式Linux系统。Linux强大的网络支持功能实现了对包括TCP/IP在内的多种协议的支持,满足了面向21世纪的嵌入式系统应用联网的需求。因此,在嵌入式系统开发调试时,网络接口几乎成为不可或缺的模块。    1 嵌入式Linux网络驱动程序介绍   Linux网络驱动程序作为Linux网络子系统的一部分,位于TCP/IP网络体系结构的网络接口
[嵌入式]
嵌入式Linux ARM汇编(四)——ARM汇编程序设计
汇编程序有顺序、循环、分支、子程序四种结构形式。 一、顺序结构 程序实例: AREA Buf,DATA,READWRITE;定义数据段Buf Array DCB 0x11,0x22,0x33,0x44;定义12个字节的数组Array DCB 0x55,0x66,0x77,0x88 DCB 0x00,0x00,0x00,0x00 AREA hello,CODE32,READONLY ENTRY LDR R0,=Array;取得数组Array的首地址 LDR R2, ;装载数组第1字节数据给R2 MOV R1,#1 LDR R3, ;装载数组第5字节数据给R3 ADD R2,R2,R3 MOV R1,#8 STR R2, ;
[单片机]
支持网络传感器的嵌入式操作系统设计
  网络传感器是集传感器技术、嵌入式计算技术、现代网络及通信技术、分布式信息处理技术于一身的资源受限的嵌入式设备,是“普适计算”在微型嵌入式领域的一种重要应用模式。   网络传感器的研究过去一直受限于硬件平台而发展缓慢。随着半导体技术、通信技术、微电子技术和微机械技术的不断进步,低功耗、低价格、多功能的传感器网络系统得到了快速发展,使得制作微小、有弹性、低功耗的传感器节点成为现实。    背景    应用特点   网络传感器应用有其自身的特点,主要有以下几个方面:小尺寸和低功耗、并发密集操作、有限的物理并行性和控制层次、多样化的设计和使用。一方面,传感器资源极其有限,给底层嵌入式程序设计带来较大的限制;另一方面,传感器上运
[传感技术]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved