基于Linux Web服务器的远程控制系统
2021-07-05
来源:易榕旅网
第37卷第1期 桂林电子科技大学学报 Vo1.37,No.1 2017年2月 Journal of Guilin University of Electronic Technology Feb.2O17 基于Linux Web服务器的远程控制系统 黄高见,陈名松 (桂林电子科技大学信息与通信学院,广西桂林541004) 摘 要:为了实现远程视频的多角度监控以及LED的远程控制,设计了基于Linux web服务器的远程控制系统。该系统 以Cortex-AS处理器为核心组成硬件平台,在硬件平台上开发视频服务器进行图像采集、传输;将JavaScript与XMI 相结 合,在HTML中使用JavaScript解析XML文件、调用控制服务器状态的Shell程序,完成对视频服务器的控制;同时利用 CGI技术,完成客户端和服务器之间的动态数据交互。测试结果表明,用户登录账户密码无误,可以成功进入监控系统实 时观看远程的多角度监控,同时可以控制LED和视频服务器的运行状态,整个系统运行稳定。 关键词:远程控制;视频监控;JavaScript;CGI;XML 中图分类号:TP3l6.2 文献标志码:A 文章编号:l673—808X(201 7)01—0025—06 Remote Control system based on Linux Web server HUANG Gaojian,CHEN Mingsong (School of Information and Communication,Guilin University of Electronic Technology,Guilin 541004,China) Abstract:A long—distance control system based on Linux Web server is designed for achieving remote control of LED and multi—angle monitoring.The hardware platform is composed by Cortex—A8 processor as the core in the system,and in which a video server is developed for capturing image and transmission.Integrated JavaScript with XML,XML file is parsed with JavaScript and Shell program which controls the server status in HTML is called to accomplish the control of video server. Simultaneously,the dynamic data interaction between the client-side and the server is completed by CGI technology.Test results show that the monitoring system will be logged in successfully with the correct account and password by users to in— speet remote multi—angle monitoring in real time and control the operating status of LED and video server in a stable system. Key words:remote monitoring;video surveillance;JavaScript;CGI;XMI 随着网络技术的快速发展,web技术 广泛应 定性,而且容易受到外界因素影响;由于网络带宽的 用在控制领域,客户端只需连接互联网获取相应的权 限制,3G只适合传输图片,4G才适合用来传输视频, 限,就可查询现场的有关信息,并对服务器进行相应 但目前国内4G的布局还未完善,要建立稳定的视频 的控制操作,从而大大方便了系统的管理和维护。目 传输系统,仅仅依赖3G网络传输不是一个好的选 前,国内已经进行了很多嵌入式远程控制监控系统的 择。郭翠然 3实现了一种远程控制系统,采用在嵌入 研究。曹淑名[2 提出一种基于3G网络的远程移动 式硬件平台上移植web服务器GoAhead,利用cGI 视频监控系统,该系统采用H.264标准对采集的视 编程技术和RS485总线技术,完成对现场温度与日 频进行压缩编码,利用分发服务器解决多个客户同时 光灯的远程控制,但未涉及视频监控。姜超[4 实现了 请求连接带来的竞争压力,并提出一种网络自适应的 一种基于Web的视频监控系统,其采用在嵌入式终 策略改善网络传输状况。但3G网络本身存在不稳 端上移植Web服务器的方案,视频编码采用压缩编 收稿日期: 2O16一O3—10 基金项目: 广西科学研究与技术开发计划(桂科攻1348014—9);广西研究生教学创新计划(YCSZ2015145) 通信作者: 陈名松(1967一),男,湖南永州人,教授,研究方向为光通信 光电子技术、宽带通信网络。E—mail:843887575@qq.corn 引文格式: 黄高见,陈名松.基于Linux Web服务器的远程控制系统EJ].桂林电子科技大学学报。2017,37(1):25—30. 26 桂林电子科技大学学报 2017年2月 码器FFmpeg,视频传输采用基于视频数据压缩库 JRTPLIB编程,但系统实现功能比较单一。 为了使控制系统达到稳定、功能多样、交互性强 的目标,设计了一种基于Linux Web服务器的远程 控制系统,可对LED和视频服务器进行远程控制,同 时可在客户端观看实时多角度的视频监控画面。 1 系统整体方案 本系统主要由3个部分组成:1)嵌入式前端视频 监控设备、LED灯;2)嵌入式web服务器、视频服务 器;3)网络客户端。视频监控设备采用USB摄像头, 其输出的数据经过DSP压缩为MJPEG格式并传输 到视频服务器的缓冲区,通过网络接口发送到网络客 户端。在HTML中使用JavaScriptE 做前端的开 发,JS脚本解析XML文件,利用Shell[6]开启视频服 务器,通过执行CGI程序,实现远程控制LED。系统 结构如图1所示。 Cortex—A8平台 LED]I旦 卜。 :兰 l I 堡 叁H 塑罂堑 CGI l l I HT TP l 图1 系统结构 Fig.1 Structure of system 2嵌入式硬件设计 嵌入式系统硬件结构如图2所示。采用Cortex- A8架构,1 GHz主频的SAMSUNG S5PV21O主处 理器,其内存为512 MB DDR2,带LCD控制器、 NAND控制器,其中Flash为1 GB SLC NandFlash, 支持4路USB2.0 HOST、1路SPI。在此硬件平台 上移植版本号为Linux一2.6.35的Linux内核,该内 核支持USB摄像头,支持UVC驱动。 制作电路板,搭建嵌入式的软件平台,通过在 Windows上安装虚拟机VMware搭载运行 Ubunt9.10系统,安装交叉编译工具、移植U—Boot并 制作根文件系统。 图2嵌入式系统硬件结构 Fig.2 Hardware structure of embedded system 3 系统软件的实现 3.1 USB摄像头驱动实现 系统的视频采集模块由摄像头模组OV7740组 成硬件电路完成图像数据的采集,输出YUV格式数 据,经过DSP芯片iP2970压缩后,通过USB接口传 输到Cortex-A8存储器中处理。该USB接口驱动与 内核自带的摄像头驱动程序不符,需要修改内核的 UVC驱动程序。 在UVC—driver.e中的static struct usb—device— id UVCids[]数组结构添加如下代码 : {.matchflags—USBDEVICEIDMATCH— ——DEVICE{USB—DEVICE—ID_MATCH—INT—INFO, .idVendor—OxlB3B, .idProduct一0x2970, .bInterfaceClass—USBCLASSVIDEO, _—.bInterfaceSubClass一1, .bInterfaceProtocol一0, .driverinfo===UVCPROBEMIN— ——QUIRK——MAXl UVC—QUIRKIGNORESELECTORU— —~—NIT) 在UVCvideo.C程序的static int UVC—video—de— code—start函数中,将Static—u8 fid改为static类型, 删除fid=data[1]&uvcSTREAM——FID,并在此位 置添加如下代码: if(1en>一16) {if((data[12]一===OxFF&&data[13]一一 0xD8&&data[14]一一0xFF)l l(data[12]一一 0xD8&&data[13]一一0xFF&&data[14]一一 0xC4)) 第1期 黄高见等:基于Linux Web服务器的远程控制系统 27 {if(stream-- ̄last rid)fid&一~UVC STREAM —FID; else lid l—UVC—STREAM—FID;)} 在UVC—video.C程序的static void UVC—video—de— code—data函数中,代码“buf—bur.bytesused 4-一 nbytes;”的后面添加如下代码段: unsigned char point—mem; static unsigned char*memtemp—NULL; —static unsigned int nArrayTempSize=i 000; —if(mem—temp一一NULL){mem—temp===kmal— loc(nArrayTemp—Size,GFP—KERNEL);} else if(nArrayTemp—Size<一nbytes){ kfree(mem—temp); nArrayTemp—Size4-一500; kmalloc(nArrayTemp—Size,GFP—KERNEL);} memset(memtemp,OxO0,nArrayTemp—Size); —pointmem一(unsigned char*)mem; —if(*(pointmem)一一0xD8&&*(pointmem ——+1)一一0xFF&&*(point mem4-2)一一OxC4){ memcpy(mem—temp+ pointmem,nbytes); —mem—tempEO]一0xFF; memcpy(pointmem,mem——temp,nbytes+1);} 使用修改的UVC—video.C、UVC—driver.C生成 UImage—new,将这个镜像文件作为硬件平台启动的 内核。 3.2 Boa服务器在Linux平台的实现 嵌人式Web服务器_1 的种类很多,但在Linux 平台应用的主要有HTTPD、THTTPD和Boa。其 中Boa是一个非常小巧的服务器,而且稳定安全,所 以选择Boa作为嵌入式Web服务器进行移植。在 Cortex-A8平台上移植Boa的步骤为: 1)通过网络下载boa一0.94.13.tar.gz,将其拷贝 至虚拟机的/work/project/boa目录下并解压。 2)生成Makefile。进入boa一0.94.13/src目录, 执行./configure,然后执行make命令生成Make— file。 3)根据本机Linux系统的交叉编译工具修改 Makefile。进人Makefile,将原来的交叉编译工具 CC=gcc和CPP—gcc—E分别改为CC—arm—linux— gcc和CPP—arm—linux—gcc—E,并执行make命令生 成可执行程序boa。 4)配置服务器。将解压压缩包后得到的boa. conf拷贝到Cortex-A8启动文件系统/etc/boa目录 下;进入boa.conf中,修改User nobody User0, Group nogroup为Group0;设置html文件目录: DocumentRoot/var/www;设置默认首页:Directory— Index index.html;设置cgi脚本目录:ScriptAlias/ cgi—bin/var/www/cgi—bin。 5)建立相关文件夹。启动嵌入式硬件平台,,在 var文件夹下建立www文件,进入www文件,并在 此目录下存放html文件,建立cgi—bin文件夹,存放 cgi脚本。 按照步骤移植完成Boa后,在/var/www文件下 运行可执行应用程序boa,在Firefox浏览器中输入 http://202.193.52.20:9080进行测试,结果可以成 功显示index.html网页。 3.3视频服务器的实现 在嵌入式视频服务器的开发中,图像的采集通过 调用Linux内核提供的V4L2 E 应用程序编程接口 函数实现。定义buffer指针存储图像数据,创建线 程cam—thread采集图像,图像采集线程程序流程如 图3所示。 圈3 图像采集线程程序流程 Fig.3 Flow chart of image acquisition thread 28 桂林电子科技大学学报 2017年2月 uvcgrab函数首先从视频缓冲区队列中取出已 经存有的一帧数据 ,判断视频缓冲区中数据格式。 若为V4L2一PIX—FMT—MJPEG,则复制到tmp— buffer;若为V4L2一PIX—FMT—YUYV,说明摄像头 输出的不是MJPEO格式,则复制到framebuffer,调 用格式转换函数compress—yuyv—to—jpeg,在这个函 数中利用libjpeg库对图像进行压缩处理,将YUV 格式图像转换成RGB格式再转换成JPEG格式。最 后,投放一个空的视频缓冲区到视频缓冲区队列中。 图像采集完成后执行以下程序: pthreadcondbroadcast(pglobal— db—up— date; pthreadmutexunlock(g>pglobal-+db)。 ——发出一个数据更新的信号,通知发送通道提取数 据,并对全局缓冲区进行解锁。 在图像的传输部分设计一个并发服务器响应客 户端连接请求。并发服务器程序流程如图4所示。 图4并发服务器程序流程 Fig.4 Flow chart of concurrent server 对server—thread编程实现了并发服务器 州, 当客户端连接时,创建客户端线程函数client—thread 负责解析客户端的请求,然后执行send—stream函数 发送图片,而服务器则继续监听其他客户端的请求。 3.4 CGI在Web控制中的实现 CGI是通用的接口标准,在这种接口标准下开发 程序,在Boa服务器上运行,使浏览器和服务器可以 动态交互。CGI程序的触发由浏览器完成 ¨],其基 本原理为:当客户端向嵌人式Web服务器发送一个 包含表单HTTP请求,Web服务器提取表单信息, 运行指定的CGI程序,CGI程序读取请求信息,获取 传来的参数,并执行相关处理操作;CGI程序执行结 束后会生成HTML文档,Web服务器将HTML文 档送回给用户端的Firefox浏览器,Firefox浏览器解 析HTML文件并显示。CGI结构如图5所示。 图5 CGI结构 Fig.5 Structure of CGI CGI提交数据的方式有2种:1)“get”方式提交; 2)“post”方式提交[11 1 2]。本系统所用的均为“get”方 式提交,可从服务器上获得数据且不改变服务器数 据。在CGI输入程序中获取提交数据的函数为get— env;getenv(”REQUEST—METHOD”)用于判断提 交方法是get还是post;getenv(”QUERY— STRING”)用来获取数据;在CGI程序中首先编写 的是输出的HTTP响应的头标志,其语句为printf (”Content—type:text/html\n\n”),然后再调用其他 程序。本系统使用C语言作工具编写CGI程序,调 用LED的应用程序,在HTML中使用JavaScript脚 本语言调用CGI程序,并将参数传递给CGI程序,从 而实现LED的远程控制。LED控制程序的调用层 级关系如图6所示。 JavaScript CGI 调 用 方 LED应用程序 向 底层LED灯 的Linux ̄N动 图6 I ED控制程序的调用层级关系 Fig.6 Calling hierarchy of LED control program 3.5 LED驱动程序设计 嵌入式Linux软件系统可分为应用程序、库、操 第1期 作系统黄高见等:基于Linux Web服务器的远程控制系统 29 Li.1内.核. 。. 的 亮灯为例’ 3.6软件测试实现 nux软件系统的层次关系[7 如图7所示。 …。。 。。。 。 Cortex—A8硬件系统上电.安装USB摄像头,U~ Boot引导启动Linux内核,进入后台,在var/www/ 文件下运行可执行应用程序boa,在PC机的Firefox 浏览器中输入http://202.193.52.2O,进入管理系 统,输入账户和密码后进入监控系统。多角度视频监 控测试结果如图9所示。 图7 I inux软件系统的层次关系 Fig.7 Hierarchical relationship of Linux software system 应用程序直接使用库函数open打开LED的设 备文件;库根据open函数传人的参数执行“swi”指 令,进入内核;内核根据传人参数找到对应驱动程序, 返回句柄给库,然后返回给应用程序;应用程序根据 图9 多角度视频监控 Fig.9 Multi allgle vide()surveillance 得到的句柄调用库函数write或ioctl发出控制命令; 库根据write或ioctl传人参数进入内核并调用驱动 程序相关函数,从而进行I ED灯的控制。LED驱动 的主要函数如图8所示。 视频输f_f{大小为640×480。视频输出流畅,无卡 顿现象。测试远程控制视频服务器与LED系统,点 击“关闭”或者“开启”按钮可以几乎无延时地关闭或 开启LED灯,同时也可以控制是否开启视频监控。 远程控制I ED测试结果如图10所示。 图8 I ED驱动的主要函数 Fig.8 Main function of LED driver 图l0远程控制I EI) Fig.10 Remote controI of I ED 应用层调用open函数对应执行的函数为static int ledsopen(struct inode*inode,struct file* filp)。在这个函数中设置S5PV210的GPIO引脚功 4 结束语 本系统在嵌入式Web服务器的基础上,进行动 态HTML的开发,运厢一套基础技术完成设计目 标,运用JavaScript、D()M、CSS、XMI (eXtensible Markup Language)、CGI等.在Cortex—A8单板的底 能为输出;应用层调用的ioctl函数对应执行的函数 为static int leds—ioctl(struet inode*inode,struct file*filp,unsigned int cmd,unsigned long arg),应 用程序通过cmd参数调用其他函数设置输出引脚电 平的高低,达到控制LED的要求。 层操作系统中结合Shell脚本,开发了Web控制监控 30 桂林电子科技大学学报 2017年2月 系统。经过测试表明,本系统可以实现远程多角度视 频监控以及对监控终端的控制,系统稳定,图像画面 清晰,延时约为200 ms,交互性良好。下一步的研究 将重点实现对湿度、温度等数据实时显示及报警功 [M].北京:电子工业出版社,2002:120—790. -I6] 张根宝,胡杰.Linux集群环境下监控Web服务器的 Shell脚本设计[J].化工自动化及仪表,2010,37(10): 99一l01. 能,同时增加数据库,对信息进行保存。 参考文献: [1]梁银会,杨家仕,王天宝.基于ARM—LINUX的嵌入式 [7]韦东山.嵌人式Linux应用开发完全手册[M].北京:人 民邮电出版社,2008;240—360. [8]张辉.基于V4L2的嵌入式视频驱动程序开发与实现 [D].合肥:安徽大学,2010:37—60. E9] 陈书益,黄永慧.开源视频服务器软件MJPG—Stremer Web服务器设计[J].成都信息工程学院报,2008,23 (5):481-484. [23曹淑明.电信“天翼景象”监控平台的研究与实现[D].杭 州:浙江理工大学,20i2:2-60. [33郭翠然.基于Linux的嵌入式Web视频服务器的实现 与应用[D].苏州:苏州大学,2012:1-55. r4-1姜超.基于ARM—Linux的嵌入式Web视频监控系统研 究与实现[D].西安:长安大学,2012:2-57. [5]POWEI I T,SCHNEIDER F.JavaScript完全手册 的研究和应用[J].电子设计工程,2012,20(5):172—176. [1O] 于艳萍,朱晓智,王中训.基于ARM9和USB摄像头的 网络视频采集系统设计[J].现代电子术,2011,34 (24):49—51. [11]李勇.CGI在嵌入式Web服务器中的应用和实现EJ]. 微计算机信息,2008(9):110—111. [12]何克右.用CGI方式进行网页交互[J].交通与计算机, 2000。18(1):22—24. 编辑:翁史振