在嵌⼊式Linux系统中实现基于Web的配置管理
导读:
中⽂摘要:
以多功能宽带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程序之间的关系。webserver接口开发
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程序⽬录的安全问题等需要考虑。读者可在本⽂介绍的基础上做进⼀步的完善。
本⽂转⾃
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论