您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 嵌入式linux远程控制需求分析
通过在已有嵌入式硬件基础上,利用操作系统ARMLinux建立嵌入式平台,并在PC机上由Linux操作系统编写和编译boa、CGI等一系列应用程序,并移植到嵌入式平台上,组建嵌入式家庭网关,从而构建成一个基于ARMLinux嵌入式平台的、使用Boa作为Web服务器的远程在线控制系统,系统可以通过IE页面对各种模拟家电设备进行动态的交互控制,在真正意义上实现了通过互联网进行远程控制,实现了智能家电远程控制系统的设计目标。1、描述系统;(1)远程的LED控制(2)远程步进电机控制(3)远程电机控制要求能够通过InternetB/S(浏览器/服务器)结构进行访问。加上相应的CGI程序能够通过GPRS完成控制能够通过客户端完成C/S(客户端/服务器)结构的访问2、可行性分析(使用什么样的技术来完成)根据现有的试验硬件平台GEC2410,对其软件系统的移植,根据硬件电路图,设计相应的驱动程序。B/S体系结构的网络控制,可以通过移植Boaserver服务器和服务器端CGI(通用网关接口,用于提交客户端的请求)\本文的主要研究思路本设计通过分析各种已有的嵌入式家庭网关设计事例,总体拟采用以ARM核的32位嵌入式微处理器为硬件平台,结合通信技术,通过移植嵌入式操作系统,并在其上开发相应的驱动程序、应用程序和嵌入式WEB服务器实现一个方便、实用的家庭网关。主体研究内容如下:1)收集、分析国内外嵌入式系统的标准文档与资料,特别是嵌入式Linux系统的资料,对其关键技术、特点和应用前景进行比较、分析,形成自己的结论;2)基于嵌入式开发系统硬件,通过移植、完善,建立拥有源代码的嵌入式Linux系统平台;3)建立拥有源代码的TCP/IP协议栈;4)建立拥有源代码的WEB服务支持,并实现远程交互式网页访问。5)支持远程控制的智能家电系统原型的设计与实现。系统的软件结构系统采用在嵌入式操作系统(本系统采用ARMLinux)的基础下通过WEB方式,即利用B/S结构,在嵌入式设备上运行一个支持脚本或CGI功能的WEB服务器,生成动态页面,在用户端只需要通过WEB浏览器以网页访问的方式对嵌入式设备进行查看,并进行相应控制。其基本软件结构如图3。图3系统软件结构主要工作流程如下;1)首先,由客户端发出请求给WEB服务器。2)WEB服务器对客户请求进行判断。如果该请求是一个HTML文件或图像等静态文件,WEB服务器就将文件直接传送给客户端的浏览器。如果客户请求是一个动态请求,WEB服务器将激活相应CGI的程序。3)WEB服务器守护进程创建一个子进程,该子进程将CGI请求的有关数据设置成环境变量,在外部CGI程序与服务器间建立两条标准的I/O数据通道。4)WEB服务器启动URL指定的CGI程序。CGI程序通过环境变量和标准输人Stdin读取客户端的输入数据并进行处理,并可根据请求调用相应的外部程序。5)CGI程序处理完毕后通过标准输出Stdout,将处理结果传递给服务器守护进程,守护进程再将处理结果以HTML格式传送回客户端。(三)系统的软件的详细设计与实现1.交互式WEB服务器的实现(1)WEB服务器技术分析常用的嵌入式WEB服务器软件有lighttpd、thttpd、shttp和boa。通过软件性能、CGI功能等比较,由于boa源代码开放、性能优秀、支持CGI,特别适合应用在嵌入式系统中,且最大的优点就是速度快,则本设计采用boa构建WEB服务器。Boa是一款运行在类Unix系统中的小型WEB服务器,特别适合在嵌入式场合使用,它是一个单任务的WEBSever服务器,它产生独立的进程来处理CGI程序,因此占用较少的系统资源,boa的优点在于其快速性和可靠性。它与其他服务器的区别是:调用返回结果调用返回结果返回结果传递参数调用CGIStdoutStdin客户机WEB浏览器WEB服务器CGI程序驱动程序硬件设备11没有CGI程序设置REMOTE_HOST环境变量;在boa中没有Server-Side(SSI)项,要产生动态的往页只有通过CGI。(2)boa服务器的体系结构Boa服务器处理用户请求并返回数据给浏览器,其动态的访问服务器需要用到CGI,其体系结构如图4。图4boa服务器体系结构(3)boa服务器的工作流程Boa服务器首先进行初始的配置,然后建立socket连接,调用select函数来监视文件描述符的状态,通过调用相应函数来处理请求。其工作流程如图5。图5boa工作流程12(4)boa服务器的实现boa的实现如下:第一步,完成boa程序的移植。从下载Boa源码,在Linux操作系统下将其解压并进入源码目录的src子目录。#tar-zxvfboa-0.94.13.tar.gz#cdboa-0.94.13/src#./configure生成Makefile文件。然后修改Makefile文件,找到CC=/gcc,将其改成CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc,(其作用是编辑编译器路径,而在本机上路径为:/usr/local/arm/2.95.3/bin/)找到CPP=gcc–E,将其改成CPP=/usr/local/arm/2.95.3/bin/arm-linux-gcc–E,保存退出。运行make进行编译,在boa-0.94.13/src目录下就得到了boa可执行指令,并将调试信息剥去。#make#/usr/local/arm/2.95.3/bin/arm-linux-stripboa第二步,完成boa的配置,使其能支持CGI程序的运行。boa需要在/etc目录下建立一个boa目录,里面放入Boa的主要配置文件boa.conf。在boa源码目录下已有一个示例boa.conf,可以在其基础上进行修改,本文只对修改的地方做下介绍,其具体情况可参附录A。1)作为哪个用户运行,即它拥有该用户的权限,一般都是nobody,需要在/etc/passwd中有nobody用户。即:Usernobody但在后来的实践中发现,该用户无法实现POST(),无法上传文件,无法访问共享内存,所以在本系统中,修改Usernobody为Userroot。2)作为哪个用户组运行,即它拥有该用户组的权限,一般都是nogroup,要在/etc/group文件中有nogroup组。即:Groupnogroup3)服务器名字,默认是注释掉,本系统则需要。ServerName)指明CGI脚本的虚拟路径对应的实际路径。一般所有的CGI脚本都要13放在实际路径里,用户访问执行时输入站点+虚拟路径+CGI脚本名。该项默认为未打开,执行Boa会异常退出,提示“gethostbyname::Nosuchfileordirectory”,所以必须打开,需执行如下命令。ScriptAlias/cgi-bin//var/其它默认设置即可。在本系统中,还需要创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/,将mime.types文件拷贝到/etc目录,创建CGI脚本所在目录/var/。mime.types文件用来指明不同文件扩展名对应的MIME类型,一般可以直接从Linux主机上拷贝一个,大部分也都是在主机的/etc目录下。第三步,测试Boa能否正常工作,静态HTML页面能否正常访问,CGI脚本能否正常运行。将boa可执行程序和其他配置文件转入到嵌入式系统中后,运行boa,即可通过其他机器就可以访问了。如在IE中输入(嵌入式系统IP)就可以访问到index页面了。2.2.CGI程序设计在大多数嵌入式WEB应用中,都需要提供动态内容显示或交互式操作,以便对设备进行远程控制。而简单的静态页面所提供的内容是不变的,也无法完成交互操作。公共网关接口(CGI)能够从根本上解决这种情况,使WEB的客户端和服务器之间具有交互功能,使得嵌入式系统的远程控制得以实现。CGI是一个用于定义WEB服务器与外部扩展应用程序之间通信方式的标准或接口规范。它规定了一组标准的环境变量和参数格式,定义了从HTML脚本到服务器上执行进程的一个与平台无关的网关。CGI接口提供在超文本(HTML)文件编写时,可以结合其他外部的程序语言(如C语言),用来解释处理来自客户端输入的表单信息,并在服务器上产生相应的处理,或者将由此产生的处理结果作为响应,用恰当的信息显示一个新的客户界面,达到信息交互的目的。用户输入数据可以通过三种方式传给CGI程序:通过环境变量(GET方式)、通过命令行参数方式或者通过CGI程序的标准输入方式(stdin,POST方式)。当使用GET方式时,CGI通过环境变量QUERY_STRING获取客户端传输数据,格式如“name=user”、“mima=m121”,在表单(Form)中使用GET方法,即进行METHOD=GET设置。当从服务器上获得数据并不改变服务器系统的数据时,适用GET方法,但如果14字符串长度超过一定值(1024B)或者要改变服务器参数时,就选用POST方法。下面以一个LED控制(GET方式)的例子来简单介绍:LED控制网页如图6所示,其HTTP代码如下:htmlheadmetahttp-equiv=Content-Languagecontent=zh-cnmetahttp-equiv=Content-Typecontent=text/html;charset=gb2312metaname=GENERATORcontent=MicrosoftFrontPage4.0metaname=ProgIdcontent=FrontPage.Editor.DocumenttitleLED灯测试/titlestyletype=text/css!--body{background-color:#FFFFFF;background-image:url(images/led.gif);}--/style/headbodyh1align=center LED测试/h1formmethod=getaction=/cgi-bin/leds.cginame=LED-TESTdivalign=centercentertableborder=0width=280trtdwidth=131palign=center类型/tdtdwidth=135palign=center速率/td15/trtrtdwidth=131palign=center inputtype=radiovalue=pingcheckedname=type跑马灯/tdtdwidth=135palign=centerinputtype=radioname=speedvalue=slowchecked慢速/td/trtrtdwidth=131palign=center inputtype=radioname=typevalue=counter计数器/tdtdwidth=135palign=centerinputtype=radioname=speedvalue=normal中速/td/trtrtdwidth=131palign=centerinputtype=radioname=typevalue=stop停止/tdtdwidth=135palign=centerinputtype=radioname=speedvalue=fast高速/td/trtrtdcolspan=2width=272palign=centerinputtype=submitvalue=确定name=su
本文标题:嵌入式linux远程控制需求分析
链接地址:https://www.777doc.com/doc-5820222 .html