嵌入式Linux系统CGI程序设计技术.pdf

上传人:qwe****56 文档编号:74687125 上传时间:2023-02-27 格式:PDF 页数:4 大小:124.08KB
返回 下载 相关 举报
嵌入式Linux系统CGI程序设计技术.pdf_第1页
第1页 / 共4页
嵌入式Linux系统CGI程序设计技术.pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《嵌入式Linux系统CGI程序设计技术.pdf》由会员分享,可在线阅读,更多相关《嵌入式Linux系统CGI程序设计技术.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、21Microcontrollers&Embedded Systems2 0 0 4.1 0技术纵横TECHNOLOGY REVIEW嵌入式L i n u x 系统C G I 程序设计技术 广东工业大学 郑伟 徐荣华 王钦若摘 要关键词在详细介绍一种嵌入式 W e b服务器B O A的实现与配置方法的基础上,以一个 W e b在线远程监控G P I O(通用输入/输出)的程序为实例,介绍嵌入式 L i n u x系统下C G I程序设计技术。嵌入式系统 L i n u x B O A C G I G P I O1 概 述随着互联网应用的普及,越来越多的信息化产品需要接入互联网通过 W e b页

2、面进行远程访问。嵌入式 W e b系统提供了一种经济、实用的互联网嵌入式接入方案。这里结合一种嵌入式 W e b S e r v e r B O A 来介绍嵌入式L i n u x系统下的 C G I程序设计技术。2 W e b S e r v e r B O A 的实现与配置2.1 u C l i n u x 系统下B O A 的实现与配置在u C l i n u x 下,主要有三个W e b S e r v e r:H T T P D、T H T T P D 和 B O A。H T T P D 是最简单的一个W e b S e r v e r,它的功能最弱,不支持认证,不支持 C G I。

3、T H T T P D和B O A都支持认证、C G I等,功能都比较全。B O A是一个单任务的小型 HTTP服务器,源代码开放、性能优秀,特别适合应用在嵌入式系统中。目前的u C l i n u x的代码中已经包含B O A 的源代码。在u C l i n u x下实现B O A,只需要对 BOA做一些配置和修改。以下是配置的过程。(1)编译 B O A 到内核首先,需要把 BOA编译到内核,即执行 makem e n u c o n f i g,在应用程序选单中n e t w o r k a p p l i c a t i o n 项下面选择 b o a。该操作需要重新编译内核。(2)编

4、制配置文件 b o a.c o n f在L i n u x操作系统下,应用程序的配置都是以配置文件的形式提供的,一般都是放在目标板/e t c/目录下或者/e t c/c o n f i g 目录下。但b o a 的配置文件b o a.c o n f 一般都放置在目标板/h o m e/h t t p d/目录下。例如,一个典型的b o a.c o n f 文件格式如下:S e r v e r N a m e S a m s u n g A R MD o c u m e n t R o o t /h o m e/h t t p dS c r i p t A l i a s /c g i-b i

5、 n/h o m e/h t t p d/c g i-b i n/S c r i p t A l i a s /i n d e x.h t m l /h o m e/h t t p d/i n d e x.h t m l它指定了H T M L 页面必须放到/h o m e/h t t p d目录下,c g i 外部扩展程序必须放到/h o m e/h t t p d/c g i-b i n 目录下。(3)编译烧写内核重新编译内核后,通过烧写工具烧写内核,就可以在P C 上通过I E 浏览器访问开发板上的 W e b S e r v e r。例如,输入开发板的I P 地址h t t p:/1 9

6、 2.1 6 8.0.1 0 1,即可访问到自己做的网页i n d e x.h t m l 了。并且,通过编写C G I 外部扩展程序,可以实现动态 W e b技术,下面将详细介绍。2.2 具有M M U 平台的L i n u x 下B O A 的实现与配置对于有M M U(内存管理单元)的平台,如a r m l i n u x 和p p c l i n u x,可以到网上下载一个主流版本的b o a发行包。因为是运行在目标系统,所以要用交叉编译工具编译,即需要修改b o a/s r c/M a k e f i l e 里面的编译器。例如:C C =/L i n u x P P C/C D K

7、/b i n/p o w e r p c-l i n u x-g c cC P P =/L i n u x P P C/C D K/b i n/p o w e r p c-l i n u x-g+然后直接在 b o a/s r c目录下执行m a k e,即可生成 B O A可执行文件;将其编译入内核,并烧写到存储设备,就可以实现访问 BOA服务器。3 C G I 程序设计技术C G I(C o m m o n G a t e w a y I n t e r f a c e)是外部应用扩展应用程序与 W W W服务器交互的一个标准接口。按照 C G I标准编写的外部扩展应用程序可以处理客户端浏

8、览器输入的数据,从而完成客户端与服务器的交互操作。而 C G I规范就定义了 Web服务器如何向扩展应用程序发送消息,在收到扩展应用程序的信息后又如何进行处理等内容。通过 C G I可以提供许多静态的 H T M L网页无法实现的功能,比如搜索引擎、基于 W e b的数据库访问等等。3.1 工作原理(1)W W W 和C G I 的工作原理HTTP协议是 WWW的基础,它基于客户/服务器222 0 0 4.1 0技术纵横TECHNOLOGY REVIEW模型,一个服务器可以为分布在网络各处的客户提供服务;它是建立在T C P/I P协议之上的“无连接”协议,每次连接只处理一个请求。在服务器上,

9、运行着一个守护进程对端口进行监听,等待来自客户的请求。当一个请求到来时,将创建一个子进程为用户的连接服务。根据请求的不同,服务器返回 H T M L文档或者通过 C G I调用外部应用程序,返回处理结果。服务器通过 C G I与外部程序和脚本之间进行交互,根据客户端在进行请求时所采取的方法,服务器会收集客户所提供的信息,并将该部分信息发送给指定的 C G I扩展程序。C G I扩展程序进行信息处理并将结果返回服务器,然后服务器对信息进行分析,并将结果发送回客户端。外部 CGI程序与 WW W服务器进行通信、传递有关参数和处理结果是通过环境变量、命令行参数和标准输入来进行的。服务器提供了客户端(

10、浏览器)与 C G I扩展程序之间的信息交换的通道。C G I的标准输入是服务器的标准输出,而 C G I的标准输出是服务器的标准输入。客户的请求通过服务器的标准输出传送给 C G I的标准输入,C G I对信息进行处理后,将结果发送到它的标准输出,也就是服务器的标准输入,然后由服务器将处理结果发送给客户端。(2)U R L 编码客户端浏览器向服务器发送数据采用编码的形式进行。该编码就是 U R L编码。编码的主要工作是表单域的名字和值的转义,具体的做法为:每一对域和值里的空格都会被替换为一个加号()字符,不是字母或数字的字符将被替换为它们的十六进制数字形式,格式为%H H。H H是该字符的

11、A S C I I十六进制值。标签将被替换为“%0 D%0 A”。信息是按它们在表单里出现的顺序排列的,数据域的名字和数据域的值通过等号()字符连在一起。各对名/值再通过“&”字符连接在一起。经过这些编码处理之后,表单信息就整个成为一个连续的字符流,里面包含着将被送往服务器的全部信息。因为表单输入信息都是经过编码后传递给脚本程序的,所以 C G I扩展程序在使用这些参数之前必须对它们进行解码。3.2 C G I 外部扩展程序编制服务器程序可以通过三种途径接收信息:环境变量、命令行和标准输入。具体使用哪一种方法要由 标签的 M E T H O D属性来决定。在“M E T H O DG E T”

12、时,向C G I程序传递表单编码信息的正常做法是通过命令行来进行的。大多数表单编码信息都是通过 Q U E R Y _ S T R I N G的环境变量来传递的。如果“M E T H O DP O S T”,表单信息将通过标准输入来读取。还有一种不使用表单就可以向 C G I传送信息的方法,那就是把信息直接追加在 U R L地址后面,信息和U R L之间用问号(?)来分隔。下面结合W e b 远程监控 A R M 芯片的G P I O(通用输入/输出)的应用实例详细介绍。(1)G E T 方法G E T方法是对数据的一个请求,被用于获得静态文档。当使用 GET方法时,CGI程序将会从环境变量Q

13、 U E R Y _ S T R I N G获取数据。为了处理客户端的请求,C G I必须对Q U E R Y _ S T R I N G中的字符串进行分析。当需要从服务器获取数据并且不改变服务器上的数据时,应该选用 G E T方法;但是如果请求中包含的字符串超过了一定长度,一般是1 0 2 4字节,那么就只能选用 P O S T方法。G E T方法通过附加在 U R L后面的参数发送请求信息。这些参数将被放在环境变量Q U E R Y _ S T R I N G中传给C G I程序。G E T方法的表单格式和C G I解码程序可以参考P O S T方法的实现。(2)P O S T 方法当浏览

14、器将数据从一个填写的表单传给服务器时一般采用P O S T方法,而且在发送的数据超过1 0 2 4字节时也必须采用 P O S T方法。当使用 P O S T方法时,W e b服务器向C G I程序的标准输入S T D I N传送数据。发送的数据长度存放在环境变量 C O N T E N T _ L E N G T H中,并且,P O S T方法的数据格式为:v a r i a b l e 1=v a l u e 1&v a r i a b l e 2=v a l u e 2&e t cC G I程序必须检查R E Q U E S T _ M E T H O D环境变量以确定是否采用了P O

15、S T方法,并决定是否要读取S T D I N。P O S T方法在 H T M L文档中定义的表单如下:O p e r a t e P 0 O p e r a t e P 1 O p e r a t e P 2 它调用的服务器脚本程序是/c g i/b i n/c g i _ g p i o.c g i。C G I扩展程序中 F O R M表单的解码可参考如下程序:/*f u n c t i o n g e t P O S T v a r s */c h a r *g e t P O S T v a r s()i n t i;i n t c o n t e n t _ l e n g t h

16、;c h a r *p o s t v a r s;c h a r *p o s t i n p u t;c h a r *p a i r l i s t;23Microcontrollers&Embedded Systems2 0 0 4.1 0技术纵横TECHNOLOGY REVIEWi n t p a i r c o u n t =0;c h a r *n v p a i r;c h a r *e q p o s;p o s t i n p u t =g e t e n v(C O N T E N T _ L E N G T H );/获取传送 /给程序数据的字节数i f (!p o s

17、 t i n p u t)e x i t(1);i f(!(c o n t e n t _ l e n g t h =a t o i(p o s t i n p u t)/获取信息长度e x i t(1);i f(!(p o s t i n p u t =(c h a r *)m a l l o c(c o n t e n t _ l e n g t h+1)e x i t(1);i f (!f r e a d(p o s t i n p u t,c o n t e n t _ l e n g t h,1,s t d i n)e x i t(1);p o s t i n p u t c o n

18、 t e n t _ l e n g t h =0 ;f o r(i=0;p o s t i n p u t i ;i+)i f(p o s t i n p u t i =+)p o s t i n p u t i =;/对加号进行处理p a i r l i s t =(c h a r *)m a l l o c(2 5 6*s i z e o f(c h a r *);p a i r c o u n t =0;n v p a i r =s t r t o k(p o s t i n p u t,&);/从出现&字符的位置把信 /息分段,然后对结果依次处理w h i l e (n v p a

19、i r)p a i r l i s t p a i r c o u n t+=s t r d u p(n v p a i r);i f(!(p a i r c o u n t%2 5 6)p a i r l i s t =(c h a r *)r e a l l o c(p a i r l i s t,(p a i r c o u n t+2 5 6)*s i z e o f(c h a r *);n v p a i r =s t r t o k(N U L L,&);p a i r l i s t p a i r c o u n t =0;p o s t v a r s =(c h a r

20、*)m a l l o c(p a i r c o u n t*2+1)*s i z e o f(c h a r *);f o r(i =0;i p a i r c o u n t;i+)i f(e q p o s =s t r c h r(p a i r l i s t i ,=)*e q p o s=0 ;u n e s c a p e _ u r l(p o s t v a r s i*2+1 =s t r d u p(e q p o s+1);/调用 /u n e s c a p e _ u r l 函数继续解码 e l s e u n e s c a p e _ u r l(p o

21、s t v a r s i*2+1 =s t r d u p();u n e s c a p e _ u r l(p o s t v a r s i*2 =s t r d u p(p a i r l i s t i );p o s t v a r s p a i r c o u n t*2 =0;f o r(i=0;p a i r l i s t i ;i+)f r e e(p a i r l i s t i );f r e e(p a i r l i s t);f r e e(p o s t i n p u t);r e t u r n p o s t v a r s;其中,u n e s

22、c a p e _ u r l 函数再调用x 2 c 函数,把(不是字母或数字的)特殊字符从其%H H表示方式解码为文本字符。/*u n e s c a p e _ u r l f u n c t i o n */s t a t i c v o i d u n e s c a p e _ u r l(c h a r *u r l)i n t x,y;f o r(x=0,y=0;u r l y ;+x,+y)i f(u r l x =u r l y )=%)u r l x =x 2 c(&u r l y+1 );y +=2;u r l x =0 ;(3)直接U R L加参数传递方法这是一种不使用

23、表单就可以向 CGI传送信息的方法。它把信息直接追加在 U R L地址后面,信息和U R L之间用问号(?)来分隔。例如,对于一个c g i _ g p i o.c g i 的脚本,可以从如下的链接启动:A H R E F=/c g i-b i n/c g i _ g p i o.c g i?f l a g=0 O p e r a t e P 0 A H R E F=/c g i-b i n/c g i _ g p i o.c g i?f l a g=1 O p e r a t e P 1 A H R E F=/c g i-b i n/c g i _ g p i o.c g i?f l a g

24、=2 O p e r a t e P 2 C G I扩展程序中可使用如下代码接收信息:c h a r *g e t _ i n p u t;/用于接收环境变量 g e t _ i n p u t=g e t e n v(Q U E R Y _ S T R I N G );i f(g e t _ i n p u t)g e t _ i n p u t=s t r d u p(g e t _ i n p u t);p r i n t f(Q U E R Y _ S T R I N G i s%s n ,g e t _ i n p u t);/*判断f l a g x 信息*/i f(!s t r

25、c m p(g e t _ i n p u t,f l a g=0 )./O p e r a t e P 0 e l s e i f(!s t r c m p(g e t _ i n p u t,f l a g=1 )./O p e r a t e P 1e l s e./O p e r a t e P 2对于上述三种方法,可以根据不同的应用场合和应用要求进行选取。结 语嵌入式W e b S e r v e r系统方案可以广泛应用在许多领域,如自动化设备的远程监控、嵌入式 GSM短消息平台以及远程家庭医疗等。并且,随着互联网应用46462 0 0 4.1 0新器件新技术 NEW PRODUCT

26、&TECH法问题,分组队列的管理还是实现 QoS的基础。分组调度及处理算法的核心是链路层调度器的算法设计。在一般分组处理的存储-转发过程中,设计调度器必然要对分组处理时间进行预测,但处理器在调度器中要精确的获取并更新这些虚拟时间是十分困难的7。这就要根据具体的应用,通过研究数据包的长度、数据类型、处理方式与处理时间之间的关系,提出合理的数据包处理时间预测方案,选择适当的分组调度算法,达到比较好的系统性能。5 网络处理器面临的挑战当今的网络处理器仍面临着许多挑战,例如采用什么技术扩展,如何简化编程模式等问题都需要进一步研究。数据平面上运行的软件开发通常仅提供微代码汇编和低级 C语言支持,这大大限

27、制了网络处理器技术的发展和应用。因为缺乏高效的软件开发支持,软件问题已经成为网络处理器应用的一大障碍,必须研究面向网络处理器系统的高效系统软件平台。网络处理器微引擎指令的提供非常有限,仅有不足4 0条,这远远不能满足开发人员的需求,仅用它去构造一些复杂的网络处理任务不太现实。在I n t e l 提出的网络处理器开发框架中,给出了一些非常底层的数据平面的函数库,还给开发者提供了一些面向特定应用的更优化的接口和宏指令集。目前,开发环境主要由各 NP生产厂商提供,微引擎上运行的数据平面只提供微代码汇编和 C语言编译器支持,有代表性的产品是 I n t e l W o r k b e n c h。控

28、制平面上的处理器内核,普遍采用 L i n u x或V x W o r k s 作为操作系统。两个平面的开发相对独立,没有一种统一的开发手段,这给开发者带来了很大的不便。目前,也没有特别针对网络处理特点的操作系统,常见的 R T O S由于并不是特别针对网络处理器的操作系统,因此并不能充分发挥网络处理器的潜能。为了满足下一代I n t e r n e t服务需求,网络处理器除了要满足局域网和广域网对带宽的需求增长外,还要能够以线速对数据、语音以及视频信号进行排序和处理。王海霞:硕士研究生,主要研究方向为统计学。董明峰:硕士研究生,主要研究方向为嵌入式计算,嵌入式操作系统。(收稿日期:2 0 0

29、 4-0 6-1 6)网络处理器官方论坛(N e t w o r k P r o c e s s i n g F o r u m)的成立,加快了网络处理器接口标准的制定和软件发展的步伐。结 语网络处理器通过十分灵活的体系结构和强大的处理能力,将可编程能力和 A S I C的处理能力有机的结合在一起,它的出现是网络设备开发的一次革命,它的发展必然对传统 A S I C和 M P U造成前所未有的冲击。在今后几年里,网络处理器将有着非常巨大的发展空间。本文以I n t e l I X P 2 4 0 0 网络处理器为例,全面讨论了网络处理器软件开发技术,并指出网络处理器软件开发中的关键环节及面临的

30、主要问题和挑战。参考文献1I n t e l.I X P 2 4 0 0 N e t w o r k P r o c e s s o r H a r d w a r e R e f e r e n c eM a n u a l.2 0 0 32彭来献,田畅,郑少仁.网络处理器设计分析及其应用前景 J .电信科学,2 0 0 1(1)3I n t e l.I n t e l I n t e r n e t E x c h a n g e A r c h i t e c t u r e (I X A)P o r t a b i l-i t y F r a m e w o r k D e v e l

31、 o p e r s M a n u a l.2 0 0 34P r o g r a m m i n g C h a n g l l e n g e s i n N e t w o r k P r o c e s s o rD e p l o y m e n t J ,C h i d a m b e r K u l k a r n i,M a t t h i a s G r i e s e d,C A S E SI n t e r n a t i o n a l C o n f e r e n c e,2 0 0 35I n t r o d u c t i o n t o t h e A u

32、t o-P a r t i t i o n i n g P r o g r a m m i n g M o d e l.I n t e l.h t t p:/w w w.i n t e l.c o m/d e s i g n/n e t w o r k/p a p e r s/2 5 4 1 1 4.h t m,2 0 0 36E r i k J.J o h n s o n,A a r o n R.K u n z e,I X P 2 4 0 0/I X P 2 8 0 0 P r o-g r a m m i n g-T h e c o m p l e t e M i c o r e n g i

33、 n e C o d i n g G u i d e M .I n t e l P r e s s,2 0 0 37谭章熹,林 闯,任丰源等.网络处理器的分析与研究 J .软件学报,2 0 0 3(2)8I X P 2 4 0 0 N e t w o r k P r o c e s s o r P r o g r a m m e r s R e f e r e n c eM a n u a l.I n t e l,2 0 0 3领域的不断深入,嵌入式I n t e r n e t 技术将得到更为广泛的应用和发展。参考文献1杨波,等.L i n u x 下的W E B 服务器技术 M .西安:西安电子科技大学出版社,2 0 0 12N e i l M a t t h e w,等.L i n u x 程序设计.第2 版.北京:机械工业出版社,2 0 0 23杜春雷.A R M 体系结构与编程 M .北京:清华大学出郑伟:硕士研究生,主要研究方向为设备驱动程序开发和嵌入式系统应用。徐荣华:主要研究方向为制造自动化网络与测控技术。王钦若:博士生导师,主要研究方向为计算机应用技术与机电一体化。(收稿日期:2 0 0 4-0 6-0 3)版社,2 0 0 34李驹光,等.ARM应用系统开发详解 基于S 3 C 4 5 1 0 B 的系统设计 M .北京:清华大学出版社,2 0 0 323

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁