基于嵌入式Linux系统(KT505)的Web Server设计与实现
基于嵌入式Linux系统(KT505)的Web Server设计与
实现
唐璐,徐钊,程凤英
中国矿业大学信电学院,江苏徐州(221008)
E-mail: tangliaolin@https://www.360docs.net/doc/ad3049164.html,
摘要:主要论述了在嵌入式系统中搭建Web服务器, 以北京台康资讯有限公司开发KT505为基础, 构建嵌入式Linux系统, 实现在KT505平台上的Web Server网络管理。使用Web Server实现网络管理, 大大缩短了开发周期;同时,给非专业用户提供友好的图形化界面,最大限度的简化设备管理的复杂程度。从而表明Web Server在嵌入式网络代理的开发方面具有极为广阔的前景。
关键词:嵌入式Linux,KT505,Web Server
1.引言
为了能够动态的了解到KT505的状态以及能实时配置设备,并且给用户提供一个WEB 界面,需要在KT505 上运行一个小型的WEB服务器,并在设备中保存一部分网页,同时需要一个Sed工具用于把我们想得到的数据输出在网页上,再有就是我们编写的CGI程序,整个工程我们命名为assistant。
2.KT505的Web Server开发过程
2.1 嵌入式Web Server
常见的Web页面从交互性角度来看,有动态页面和静态两种页面。对于静态页面来说,Web Server只是将储存在服务器端的html文件无变动的发送给客户端的浏览器;对于动态页面,服务器在接收到用户请求后会运行指定的程序,并将运行的结果返回给客户端。嵌入式KT505实现动态Web页面的技术使用的是CGI[1](Common Gateway Interface)。
Thttpd是嵌入式Web Server中的代表,它们采用了Multiplex技术来处理多个连接,而不是通过开辟新的进程或线程的方法,从而以牺牲部分功能为代价实现了体积小、资源占少、连接迅速的特性[2-3]。
2.2 WEB服务器
将在网上下载下来的thttpd-2.25b.tar.gz的压缩包,保存到相应路径,使用tar xzvf thttpd-2.25b.tar.gz,对其进行解压,然后进入其解压后的目录,修改Makefile文件,使其具有相对应于嵌入式系统的编译器和编译路径,建立起我们需要的交叉编译环境。
把Thttpd可执行程序拷贝到/sbin目录下即可,需要编写一个Thttpd的配置文档thttpd.conf,存放在/etc目录下,例如:
data_dir=/var/www
user=root
globalpasswd
logfile=/var/thttpd.log
cgipat=*
data_dir定义了WEB服务器去寻找网页时的路径,由例子可以看出,TC505网页的路
径保存在/var/www下,当然在整个路径下保存的并不是实体网页,而是实体网页的链接,为了动态的显示网页。实体网页保存在/var/www/web下。
user=root表示用户的名字,通常情况下为root,取决于所写程序assistant以及网页的属性,如果程序和网页的属性为tangl,那么用户名就是tangl。
Globalpasswd表示全局密码.
logfile=/var/thttpd.log表示调试文件thttpd.log保存的路径,在这个调试文件中可以看到用户通过浏览器访问thttpd的一些访问记录,但应该定时删除记录,否则此文件会越变越大,占用空间。
cgipat=*表示cgi文件的路径,无特殊用途。
需要注意的是使用htpasswd生成用户名和密码的时候,路经应和网页保存的路经一致(/var/www,和链接网页的位置一致),生成的.htpasswd为隐藏文件,保存用户名和密码,但htpasswd这个应用程序本身并不放到KT505的Ramdisk里,因为他所占空间太大(大约接近1.85MB),只是利用他生成用户名和密码。
2.3 CGI的工作原理
CGI是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序需运行在网络服务器上。通过CGI可以提供静态HTML网页无法实现的功能[4],比如基于Web 的搜索引擎、基于Web的数据库访问等等。CGI程序对从标准输入或环境变量中得到的信息进行解析,可以了解到用户的具体要求。
2.4 SED工具
Sed 是一种几乎包括在所有 UNIX 平台(包括 Linux)的轻量级流编辑器。它相当小巧,比通常的脚本语言小很多倍。它可以对从如管道这样的标准输入接收的数据进行编辑。因此,无需将要编辑的数据存储在磁盘上的文件中。因为可以轻易将数据管道输出到 Sed,所以,将 Sed 用作强大的 shell 脚本中长而复杂的管道很容易。利用Sed工具将参数按照指定的格式输出到.htm文件中,在浏览器上显示出来。
简单说来使用Sed就是为了能够将网页上特定的字符串替换成我们想要的字符串,例如当我们读取了KT505的IP后,就可以利用Sed把网页上的某一字符串替换成设备的IP显示出来。
Sed的功能很多,我们主要使用其替换功能,程序格式为Sed s/字符串a/字符串b,字符串a表示网页上我们需要替换的某一字符串,字符串b为改动后的数据,可以是从设备中读出的数据。
3开发实现交互
3.1 实现结果
服务器、嵌入式系统(KT505)、pc机之间的网口,串口相连好。用Secure CRT打开服务器进入Su命令把ramdisk映射到一个空文件夹tmp下。
root@xzcumt-desktop:/home/tangl# mount -t ext2 -o loop ramdisk_505_v0.4_tmp tmp
root@xzcumt-desktop:/home/tangl# cd tmp/
root@xzcumt-desktop:/home/tangl/tmp# ls
bin dev etc home lib linuxrc mnt proc sbin tmp usr var
此时KT505板子里也有映射的tmp 文件夹。在服务器上编译CGI 成可执行文件assistant ,然后拷贝到tmp/var/www/下。实体网页保存在tmp/var/www/web 下。一个原则就是图片尽量节省,为节省空间,因为整个KT505的Ramdisk 只有8MB 。
root@xzcumt-desktop:/home/tangl# cd tmp/var/www/web/
root@xzcumt-desktop:/home/tangl/tmp/var/www/web# ls
dsl.htm index.htm menu.htm performance.htm snmp.htm
dtree.js lan.htm mode.htm ping_test.htm system.htm
img logo.htm passwd.htm save.htm update.htm
编译成功后的可执行文件assistant 和虚网页都放在
tmp/var/www/下。切换到tmp/var/www/下使用ln -sf assistant index.htm 使每个网页生成各自的虚网页。每个链接所占空间和执行程序assitant 的大小一样,大约为45kb 左右,所以需要尽量减少网页的数量,因为每一个网页的链接都为45kb 左右,很占空间的。
我们可以看到每个虚网页都指向assistant 。
root@xzcumt-desktop:/home/tangl# cd tmp/var/www/
root@xzcumt-desktop:/home/tangl/tmp/var/www# ls
assistant dsl.cgi lan.htm ping_test.cgi snmp.htm
config_IP.cgi dsl.htm passwd.htm ping_test.htm system.htm
config_IP.htm index.htm performance.htm save.htm web
编写的index.htm 这个网页和index.cgi 结合实现网页的动态效果。关键的代码,如