基于Linux的嵌入式WebServer的设计与实现
2014-05-30周丽丽
周丽丽
摘要:提出基于ARM9和Linux嵌入Web服务器的实现方案,介绍了基于S3C2410处理器嵌入式Web服务器的硬件电路和软件设计,通过搭建嵌入式交叉编译环境,移植BootLoader、Linux内核、文件系统、Boa网络服务器,给出了嵌入式Web服务器的实现方法,通过通用网关接口CGI,成功实现了动态网络服务。
关键词:S3C2410处理器;Linux;Web 服务器;BOA 网络服务器
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2014)09-1966-03
嵌入式系统具有功能特定、规模可变、扩展灵活、有一定的实时性和稳定性、系统式内核比较小等特点。随着Internet技术持续发展,嵌入式产品的上网被寄予厚望。然而,以TCP/IP协议为核心的网络软件对于计算机系统的运算速度、内存空间要求相对较高。由于早期的CPU和单片机是嵌入式系统中的主体,运算能力有限,速度很慢,内存空间有限,硬件上的限制阻碍了网络的嵌入式应用。近年来,计算机硬件特别是CPU的发展得到很大幅度的提升,已经可以将操作系统、TCP/IP协议软件以及相应的应用软件存放在以Flash为主的存储器中。操作系统和TCP/IP协议软件随着Linux的普及揭开了神秘的面纱,嵌入式产品的网络化逐渐成为现实。
1 硬件系统设计
从技术上来讲,嵌入式产品网络化有多种方式。比如:有的是通过专门Webserver实现,有的是通过专用网关连接,也有的是在嵌入式产品中扩展传统网络技术,通过嵌入式系统本身的架构实现Webserver功能。前两种方案构成比较简单,实现的功能也比较单一,所以本文重在阐述后者,也即基于Linux的嵌入式Webserver系统的构建(硬件系统结构框图见图1)。
该系统主要由S3C2410处理器、Flash存储器、SDRAM、JTAG接口电路和时钟、复位、电源电路组成,通过专用以太网接口电路连接以太网,并通过RS232接口电路与PC电脑相连。其中核心处理器S3C2410采用Samsung公司生产的一款基于32位ARM核的RISC嵌入式处理器核,该处理拥有独立的16KB数据Cache和16KB指令Cache,SD主机和MMC接口,NAND闪存控制器,2个USB主机,1个USB设备,采用272-FBGA芯片封装,最高频率可运行在203MHz。
2 开发环境Linux平台建立
ARM Linux开发首先要有ARM Linux编译开发环境,常见做法是采用所谓“虚拟开发环境”方式。也就是主机使用Windows操作系统,虚拟机安装Linux系统,然后在虚拟机上建立ARM Linux编译开发环境。虚拟机搭建工具可以使用WMware WorkStation,它的完整使用过程大体分为:建立一个新的虚拟机、配置安装好的虚拟机、配置虚拟机的网络3个部分。
2.1 虚拟机建立
建立虚拟机的操作并不复杂,打开VMware软件环境,按照向导提示逐步操作,直至结束,就可以顺利完成全部过程。具体操作如下:首先启动VMware WorkStation 软件,单击【File】→ 【New】→【Virtual Machine】选项,会出现一个VMware安装向导窗口(见图2)。依指引操作,直至出现虚拟机相关参数的界面(见图3),单击【Finish】按钮,这时候就已经建立完成一个虚拟机了。
2.2 虚拟机配置
虚拟机配置是指对虚拟机的硬盘大小、内存容量和网络类型等各项参数进行设置修改的过程,虚拟机安装完成之后,就可以进行虚拟机配置。具体单击“Edit virtual machine settings”,开始进行参数设置,可以对虚拟机的Devices进行配置(见图4)。
2.3 配置网络
配置虚拟机网络也就是搭建Linux编译开发环境,它主要完成三大目标任务。一是目标板通过NFS协议挂接到服务器的开发目录下,二是开发终端通过串口监视目标程序的运行,三是利用Samba服务器的开发目录映射到终端的一个本地目录。完成Linux编译开发环境的搭建主要包括准备源文件、搭建工作目录、创建系统变量、创建binutils、编译内核以及创建boot-trap gcc、gblic、GCC和G++等过程。
3 软件系统设计
3.1 Boot Loader移植
当前比较流行的Boot Loader是由韩国Mizi公司开发的Vivi,它针对ARM9处理器设计,提供比较完备的命令体系,操作起来十分方便。该文即以Vivi为例来说明Boot Loader的移植过程。
Vivi在通常情况下有两种工作模式。第一种是启动加载模式,也称为自主模式,是 BootLoader的常规工作模式。这个过程不需要用户介入,Boot Loader自动从目标机上将操作系统加载到存储器中运行。第二种被称为下载模式,此时BootLoader会向用户提供一个命令行接口,目标机通过串口从主机下载文件。
Vivi既可实现对ARM920T内核的支持,也可实现对S3C2410板级的驱动支持,移植过程并不复杂。一般要求先下载和安装源码包,然后根据硬件结构、Linux系统版本及编译工具修改源文件即可,具体包括以下几个步骤:一是进行Vivi中与软件相关的修改,二是进行Vivi中与硬件有关的初始化,三是进行一些支持Nor Flash和Nang Flash启动的修改。
3.2 内核系统移植
在完成Boot Loader移植之后,就要开始内核的移植。Linux内核源码的顶层是usr/src/linux目录,在此目录下可以看到大量子目录。比如存放体系结构相关核心代码的arch 目录,存放用来重构核心大文件的include目录,存放内核初始化代码的init目录,存放体系结构特有内存管理程序的mm目录以及drivers目录、ipc目录、modules目录、fs目录等。
ARM Linux内核的移植,主要有以下几个步骤。第一,下载和安装内核源代码包;第二,下载内核补丁程序;第三,内核裁剪,并根据硬件系统的要求修改内核,选择或编写驱动程序;第四,编译并最终生成映像文件。由于不同ARM处理器的内核版本不一定相同,所以在移植之前,需要首先选择一个适合处理器的内核。本系统选用具有S3C2410的Linux-2.6.14内核,移植过程首先是去官方网站下载Linux-2.6.14内核,并通过命令:tarjxvfhnux一2.6.14.tar.bzZ解压内核。接下来修改makefile文件,主要是修改和体系结构相关的代码。然后进行内核编译,根据makefile文件的指示,使用make menuconfig:进行菜单式配置,组织内核各模块间的关系,记录各模块间的联系。
3.3 根文件系统cramfs移植
根文件系统的移植,是嵌入式系统移植的重要内容。只有顺利完成根文件系统的挂载,嵌入式系统移植才能宣告完成。根文件系统移植一般包括以下步骤:第一,建立文件系统基本目录结构。最顶端的称为根目录/,其它目录和文件树根向下分支,如用于存储二进制文件的/bin目录、存储管理系统二进制文件的/sbin目录等。第二,复制基本文件到/sbin目录。其中最重要的就是init程序,它是保障系统和运行的最基本程序,必不可少。此外还包括执行进程初始化文件/Linuxrc、调用程序配置网络的/mnt/etc/init.d/rcS文件等。第三,配置系统用户,保证只有通过设置的特定组的特定用户才能合法使用系统,实现系统的安全性。第四,根据系统实际应用需要,添加相关应用程序和系统设备文件。
嵌入式系统有多个根文件系统可供选择,其中Cramfs 是Linus Torvalds开发的一个具备嵌入式系统基本特性的文件系统。它是只读的,可以做到高效随机读取,不会降低系统速度,所以在各种根文件系统中是个较好的选择。cramfs移植首先是把/usr目录下的全部内容制成一个cramfs的Image文件,再把这个Image文件mount上来,然后通过loopback设备来完成block设备任务,也就是在/etc/init.d/rcS脚本前面部分加上mount命令,经由loopback设备把这个cramfs的image文件mount到/usr目录上去。最后生成目录树映像文件,根文件系统cramfs也就基本建成了。
4 系统的调试与集成
嵌入式Linux系统主要有三个Web服务器,即httpd、thttpd和boa。其中httpd支持超文本协议,thttpd提供HTTP和简单的CGI支持。本系统选择boa Web服务器,它小巧高效,支持CGI,源代码开放,非常适合嵌入式系统。实际安装时,把index.html放置在/etc/boa/web,用C语言编写CGI程序,名为httpRpmCgi.c。程序通过httpRpmCgi4Nvs (HTTP_REQ_ID reqId) 对CGI参数要进行编码转换,如+变成空格等,找出retpage参数,用httpGetEnv(“QUERY_STRING”)获得数据,再通过arm-Linux-gcc进行交叉编译,将得到的可执行文件httpRpmCgi.cgi拷贝到主机的/etc/boa/cgi-bin,然后用ifconfig设置目标板ip地址为192.168.3.26。启动Boa服务器,在浏览器地址栏输入http:// 192.168.3.26/ cgi-bin/httpRpmCgi.cgi,即可看到默认页面。至此,CGI脚本测试通过,嵌入式WebServer移植成功。
参考文献:
[1] 崔永红,马德宝.基于ARM的嵌入式WebServer研究与实现[J].微计算机信息,2008(8).
[2] 金西,黄汪.嵌入式Linux技术及其应用[J].计算机应用,2000(7).
[3] 顾咏枫,陈章龙.嵌入式Linux裁剪方法[J].小型微型计算机系统,2003(9).
[4] 苏东.主流ARM嵌入式系统设计技术与实例精解[M].北京:电子工业出版社,2007.