在嵌入式Linux 系统中实现基于Web 的配置管理

2019-07-13 04:28发布

导读:
  中文摘要:
  以多功能宽带SOHO 路由器为例叙述了在uClinux作为嵌入式操作系统的情况下进行基于Web 的配置管理的设计和实现, 涉及功能模块的设计, 嵌入式Web 服务器, CGI技术以及配置文件如何保存。
  英文摘要:
  The article narrates the design and implementation of configuration management based on Web in the embedded system as uClinux is the embedded os, taking multifunctional broadband SOHO router as an example.The content refers to the design of function modules, embedded Web server, CGI technology and how to save configuration files.
  随着微控制器MCU 和嵌入式操作系统的发展, 许多嵌入式系统提供以太网接口, 内置TCP/IP 协议栈, 并有嵌入式Web server 支持HTTP 服务。通过建立在Web 服务器内的CGI接口, 程序员开发的CGI程序可以实现用户浏览器和嵌入式系统之间动态交互的功能, 从而使得基于Web 的嵌入式系统管理成为可能。基于Web 的管理具有直观、操作方便、不受地域限制等优点, 已逐渐成为嵌入式系统, 特别是那些没有传统用户界面( 如路由器) 的设备的通用管理方式。Linux以其开源和免费的特性得到越来越广泛的应用, 尤其在嵌入式领域推广迅速。uClinux是使用十分广泛的嵌入式Linux操作系统之一, 是针对没有MMU 单元的微处理器而产生的。该嵌入式操作系统内置完整的TCP/IP 协议栈, 并提供支持CGI的Web server。本文以在uClinux平台下开发多功能宽带SOHO 路由器为例讲述嵌入式Linux系统中基于Web 的配置管理的设计与实现。
  2.1 实现
  受限于嵌入式系统的处理器能力和存储器容量, 嵌入式Web 服务器应尽可能简单, 并且不对消耗资源大的程序提供支持, 也不处理很大流量的访问, 能实现HTTP1.1 协议的基本内容即可。同时要能够进行远程监控、管理, 嵌入式Web 服务器还必须提供CGI接口。嵌入式Linux的Web 服务器可通过自行裁剪Apache 服务器得到, 也可利用可免费获得的嵌入式Web 服务器。uClinux下已有三个嵌入式Web server: httpd, thttpd 和boa。本系统采用boa 服务器, 因为它能支持CGI。在uClinux下实现boa 需对其进行配置。
  2.2 工作流程
  CGI是Common Gateway Interface 的缩写, 即公共网关接口。它是一个规范, 规定了外部应用程序与信息服务器, 比如 HTTP 或Web 服务器的接口标准。CGI程序可以用多种程序语言来实现, 如Perl, C 语言, UNIX Shell 等。但受嵌入式系统的限制一般只能用C 语言来编写。相比其它语言C 语言占用资源少, 效率高, 最适合嵌入式系统的实际情况, 只是可读性较差。当用户发出调用CGI程序的HTTP 请求后,Web 服务器将请求的参数传递给CGI程序, 并执行之。CGI程序在对得到的信息进行分析、处理( 包括调用其它程序) 后将运行结果反馈给Web 服务器。Web 服务器根据输出信息中的MIME 头信息对输出格式进行判断, 将CGI运行结果以相应格式传回客户端浏览器。下图形象地表明了本系统中客户端浏览器、Web 服务器、CGI程序之间的关系。
  2.2.2 CGI程序的输入与输出
  Web 服务器与CGI程序之间通过四种途径进行通信: 环境变量、命令行、标准输入和标准输出。其中负责输入的有环境变量、命令行和标准输入。命令行只用于ISINDEX 查询, 较少使用。环境变量存放服务器向CGI程序传递的一些运行参数,比如REQUEST_METHOD 表示用户提出请求或提交数据的方法是GET 还是POST。方法(METHOD) 是HTTP 中对命令的称呼。GET 方法通过环境变量QUERY- STRING 传递用户提交的数据。经过编码的数据以问号打头追加在标识CGI脚本地址的URL 后一起传给Web 服务器。服务器将其存于QUERY- STRING 中, CGI程序可以通过getenv( ) 函数来读取。编码数据除了表单数据, 还可以是直接调用CGI脚本时追加在URL 地址后面的参数。POST 方法则通过标准输入( stdin) 传递提交数据。编码了的表单数据独立地传送给Web 服务器, CGI程序从标准输入中获得, 可以用 getchar( ) , sscanf( ) , fread( ) 等函数。要注意的是数据的长度是通过读取环境变量CONTENT_LENGTH 获得的, 而不是通过文件尾标识符来判断。
  4 结语
  嵌入式系统Web server与CGI技术结合使得对硬件设备的监控、管理更为简便。基于Web 的嵌入式系统管理是目前硬件设备管理的主流和方向。本文较为详细地介绍了嵌入式Linux系统中实现基于Web 的配置管理所采用的技术, 功能模块的设计和实现的方法。当然还有一些细节性的内容和安全性能的需求比如访问权限、CGI程序目录的安全问题等需要考虑。读者可在本文介绍的基础上做进一步的完善。

本文转自
http://www.dz863.com/uClinux-Web-server-CGI-Linux-.htm