设为首页
收藏本免费论文网
老版首页
老版首页2
经济学论文 财政税收论文 证券金融论文 管理学论文 会计审计论文 工商管理论文 财务管理论文 公共管理论文 法学论文
理学论文 医药学论文 政治论文 社会学论文 教育类论文 工学论文 计算机论文 艺术类论文 哲学论文
文化论文 英语论文 应用文论文 论文指导论文 文学论文 老版免费论文 老版2免费论文 本站导航
本站已收录十余万免费论文,并不断增加中,想要什么论文资料,轻松一搜便得! 关键词:
免费理学论文免费论文网首页 --> 理学论文 --> 微电子学论文 -->嵌入式linux系统cgi程序设计技术

嵌入式linux系统cgi程序设计技术

 来源:单片机及嵌入式系统应用 作者:广东工业大学 郑 伟 徐荣华 王钦若
摘要:在详细介绍一种嵌入式Web服务器BOA的实现与配置方法的基础上,以一个Web在线远程监控GPIO(通用输入/输出)的程序为实例,介绍嵌入式Linux系统下CPU程序设计技术。 关键词:嵌入式系统Linux BOA CGI GPIO1 概述随着互联网应用的普及,越来越多的信息化产品需要接入互联网通过Web页面进行远程访问。嵌入式Web系统提供了一种经济、实用的互联网嵌入式接入方案。这里结合一种嵌入式Web Server BOA来介绍嵌入式Linux系统下的CGI程序设计技术。2 Web Server BOA的实现与配置2.1 uClinux下,主要有三个Web Server:HTTPD、THTTPD和BOA。HTTPD是最简单的一个Web Server,它的功能最弱,不支持认证,不支持CGI。THTTPD和BOA都支持认证、CGI等,功能都比较全。BOA是一个单任务的小型HTTP服务器,源代码开放、性能优秀,特别适合应用在嵌入式系统中。目前的uClinux的代码中已经包含BOA的源代码。在uClinux下实现BOA,只需要对BOA做一些配置和修改。以下是配置的过程。(1)编译BOA到内核首先,需要把BOA编译到内核,即执行make menuconfig,在应用程序选单中network application项下面选择boa。该操作需要重新编译内核。(2)编制配置文件boa.conf在Linux操作系统下,应用程序的配置都是以配置文件的形式提供的,一般都是放在目标板/etc/目录下或者/etc/config目录下。但boa的配置文件boa.cont一般都旋转在目标板/home/httpd/目录下。例如,一个典型的boa.conf文件格式如下:ServerName Samsung-ARMDocumentRoot/home/httpdScriptAlias/cgi-bin/home/httpd/cgi-bin/ScriptAlias/index.html/home/httpd/index.html它指定了HTML页面必须放到/home/httpd目录下,cgi外部扩展程序必须放到/home/httpd/cgi-bin目录下。(3)编译烧写内核重新编译内核后,通过烧写工具烧写内核,就可以在PC上通过IE浏览器访问开发板上的Web Server。例如,输入开发板的IP地址http://192.168.0.101,即可访问到自己做的网页index.html了。并且,通过编写CGI外部扩展程序,可以实现动态Web技术,下面将详细介绍。2.2 具有MMU平台的Linux下B0A的实现与配置对于有MMU(内存管理单元)的平台,如armlinux和ppclinux,可以到网上下载一个主流版本的boa发行包。因为是运行在目标系统,所以要用交叉编译工具编译,即需要修改boa/src/Makefile里面的编译器。例如:CC=/LinuxPPC/CDK/bin/powerpc-linux-gccCPP=/LinuxPPC/CDK/bin/powerpc-linux-g++然后直接在boa/src目录下执行make,即可生成BOA可执行文件;将其编译入内核,并烧写到存储设备,就可以实现访问BOA服务器。3 CGI程序设计技术CGI(Common Gateway Interface)是外部应用扩展应用程序与WWW服务器交互的一个标准接口。按照CGI标准编写的外部扩展应用程序可以处理客户端浏览器输入的数据,从而完成客户端与服务器的交互操作。而CGI规范就定义了Web服务器如何向扩展应用程序发送消息,在收到扩展应用程序的信息后又如何进行处理等内容。通过CGI可以提供许多静态的HTML网页无法实现的功能,比如搜索引擎、基于Web的数据库访问等等。3.1 工作原理(1)WWW和CGI的工作原理HTTP协议是WWW的基础,它基于客户/服务器模型,一个服务器可以为分布在网络中处的客户提供服务;它是建立在TCP/IP协议之上的“无连接”协议,每次连接只处理一个请求。在服务器上,运行产着一个守护进程对端口进行监听,等待来自客户的请求。当一个请求到来时,将创建一个子进程为用户的连接服务。根据请求的不同,服务器返回HTML文件或者通过CGI调用外部应用程序,返回处理结果。服务器通过CGI与外部程序和脚本之间进行交互,根据客户端在进行请求时所采取的方法,服务器会收集客户所提供的信息,并将该部分信息发送给指定的CGI扩展程序。CGI扩展程序进行信息处理并将结果返回服务器,然后服务器对信息进行分析,并将结果发送回客户端。外部CGI程序与WWW服务器进行通信、传递有关参数和处理结果是通过环境变量、命令行参数和标准输入来进行的。服务器提供了客户端(浏览器)与CGI扩展程序之间的信息交换的通道。CGI的标准输入是服务器的标准输出,而CGI的标准输出是服务器的标准输入。客户的请求通过服务器的标准输出传送给CGI的标准输入,CGI对信息进行处理后,将结果发送到它的标准输入,然后由服务器将处理结果发送给客户端。(2)URL编码客户端浏览器向服务器发送数据采用编码的形式进行。该编码就是CRL编码。编码的主要工作是表单域的名字和值的转义,具体的做法为:每一对域和值里的空格都会被替换为一个加号(+)字符,不是字母或数字的字符将被替换为它们的十六进制数字形式,格式为%HH。HH是该字符的ASCII十六进制值。

   
嵌入式linux系统cgi程序设计技术 来自: 免费论文网www.paper800.com  
标签将被替换为“%0D%0A”。信息是按它们在表单里出现的顺序排列的。数据域的名字和数据域的值通过等号(=)字符连在一起。各对名/值再通过“&”字符连接在一起。经过这些编码处理之后,表单信号就整个成为一个连续的字符流,里面包含着将被送往服务器的全部信息。因为表单输入信息都是经过编码后传递给脚本程序的,所以CGI扩展程序在使用这些参数之前必须对它们进行解码。3.2 CGI外部扩展程序编制服务器程序可以通过三种途径接收信息:环境变量、命令行和标准输入。具体使用哪一种方法要由
标签的METHOD属性来决定。在“METHOD=GET”时,向CGI程序传递表单编码信息的正常做法是通过命令来进行的。大多数表单编码信息都是通过QUERY_STRING的环境变量来传递的。如果“METHOD=POST”,表单信息将通过标准输入来读取。还有一种不使用表单就可以向CGI传送信息的方法,那就是把信息直接追回在URL地址后面,信息和URL之间用问号(?)来分隔。下面结合Web远程监控ARM芯片的GPIO(通用输入/输出)的应用实例详细介绍。(1)GET方法GET方法是对数据的一个请求,被用于获得静态文档。当使用GET方法时,CGI程序将会从环境变量QUERY_STRING获取数据。为了处理客户端的请求,CGI必须对QUERY_STRING中的字符串进行分析。当需要从服务器获取数据并且不改变服务器上的数据时,应该选用GET方法;但是如果请求中包含的字符串超过了一定长度,一般是1024字节,那么就只能选用POST方法。GET方法通过附加在URL后面的参数发送请求信息。这些参数将被放在环境变量QUERY_STRING中传给CGI程序。GET方法的表单格式和CGI解码程序可以参考POST方法的实现。(2)POST方法当浏览器将数据从一个填写的表单传给服务器时一般采用POST方法,而且在发送的数据超过1024字节时也必须采用POST方法。当使用POST方法时,Web服务器向CGI程序的标准输入STDIN传送数据。发送的数据长度存在环境变量CONTENT_LENGTH中,并且,POST方法的数据格式为:variable1=value1&variable2=value2&etcCGI程序必须检查REQUEST_METHOD环境变量以确定是否采用了POST方法,并决定是否要读取STDIN。POST方法在HTML文档中定义的表单如下:Operate P0
Operate P1
Operate P2
NAME="cancel"TYPE=reset VALUE="RESET">
它调用的服务器脚本程序是/cgi/bin/cgi_gpio.cgi。CGI扩展程序中FORM表单的解码可参考如下程序:/*function getPOSTvars*/char **getPOSTvars(){int i;int content_length;char **postvars;char *postinput;char **pairlist;int paircount=0;chr *nvpair;char *eqpos;postinput=getenv("CONTENT_LENGTH");//获取传送给程序数据的字节数if(!postinput)exit();if(!content_length=atoi(postinput))) //获取信息长度exit(1);if(!(postinput=(char*)malloc(content_length+1)))exit(1);if(!fread(postinput,content_length,1,stadin))exit(1);postinput[content_length]='0';for(i=0;postinput[i];i++)if(postinput[i]=='+')postinput[i]=''; //对加易进行处理pairlist=(char **)malloc(256*sizeof(char **));paircount=0;nvpair=strtok(postinput,"&");//从出现“&”字符的位置把信息分段,然后对结果依次处理while (nvpair){pairlist[paircount++]=strdup(nvpair);if(!(paircount%256))pairlist=(char**)realloc(pairlist,(paircount+256)*sizeof(char**));nvpair=strtok(NULL,"&");}pairlist[paircount]=0;postvars=(char**)malloc((paircount*2+1)*sizeof(char **));for(i=0;i
   
嵌入式linux系统cgi程序设计技术 来自: 免费论文网www.paper800.com

 如果觉得本篇论文可以,添加到收藏夹! [返回顶部↑
搜 索 其 它
相 关 论 文
略论地方文献与地方文化产业的发展
建立党校特色的地情资料库
jini在分布式嵌入式系统中的应用
小学儿童社会技能的发展:教师评定研究
关于加强地方文献资源建设的思考
基于arm9的多功能硬盘mp3播放器的设计
普适计算中的定位感知系统
嵌入式网络设备的mac及ip地址设置
相 关 类 别
物理学论文
统计学论文
数学论文
农林学类论文
地理地质论文
理学其它论文
微电子学论文
生物技术论文
应用化学论文
电子信息科学与技术论文
环境科学论文
生态学论文
材料物理论文
材料化学论文
心理学论文
生物科学论文
资源环境与城市规划管理论文
地理科学论文
应用心理学论文
海洋科学论文

免费论文网包含:各类免费毕业论文下载、免费法律论文、免费计算机论文、免费会计论文、免费英语论文、免费经济论文、免费管理论文、免费金融论文、大学生社会实践论文、三个代表论文、三农问题论文等所有论文均来源于网上的共享资源以及一些期刊杂志,所有论文仅供网友间相互学习交流之用,请特别注意勿做其他非法用途!如果我们有侵犯你的版权或其他有损您利益的行为,请联系我们指出,我们会立即进行改正或删除有关内容!
广告服务 | 关于我们 | 加盟合作 | 免责条款 | 人才招聘 | 联系我们