毕业设计(论文)-基于ARM9的嵌入式web服务器的软硬件设计.doc_第1页
毕业设计(论文)-基于ARM9的嵌入式web服务器的软硬件设计.doc_第2页
毕业设计(论文)-基于ARM9的嵌入式web服务器的软硬件设计.doc_第3页
毕业设计(论文)-基于ARM9的嵌入式web服务器的软硬件设计.doc_第4页
毕业设计(论文)-基于ARM9的嵌入式web服务器的软硬件设计.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于arm9的嵌入式web服务器的软硬件设计 摘要:随着因特网的迅速普及和嵌入式技术的迅猛发展,将传统的嵌入式设备接入因特网己成为一种必然的趋势。嵌入式web服务器是指在嵌入式设备中实现超文本传输服务,使其具有web服务器的功能,为用户提供基于web浏览器的访问接口,实现对接入到网络中嵌入式设备的管理与维护。本论文以三星公司arm9处理器为硬件核心,以嵌入式linux操作系统做为系统软件开发平台,研究并实现了嵌入式web服务器boa。介绍了系统开发平台的搭建过程,主要包括系统引导加载程序的建立,嵌入式linux系统内核的定制,以及yaffs文件系统的构建及移植。详细讨论了在本课题开发平台上boa服务器的实现技术,深入研究了利用通用网关接口实现浏览器与嵌入式web服务器boa之间的动态交互技术,并实现了一个基于浏览器/服务器模式的远程视频监控系统。针对boa服务器仅支持单一用户认证模式的不足,对boa服务器的源代码进行了分析和改进,实现了boa服务器的多用户认证模式,进一步增强了其在嵌入式系统中的应用范围。对该嵌入式web服务器的测试结果表明其响应迅速,运行稳定,达到了课题预期目标。关键词:s3c2440,嵌入式web服务器,嵌入式linux,boaabstract :定稿后翻译!key words: 目 录1引言111 选题背景112 课题研究的目的和意义113 课题研究内容22.系统总体方案和硬件平台设计22.1系统总体方案22.1.1课题总体结构32.1.2系统开发流程42.2硬件电路设计与实现52.2.1硬件平台简介52.2.2 s3c2440处理器简介62.3 各单元模块电路设计72.3.1电源管理模块72.3.2时钟复位模块82.3.3 rs-232 串口模块82.3.4 flash 存储模块102.3.5 10m/100m 网络接口模块103.嵌入式web服务器软件系统设计113.1嵌入式 linux 软件平台搭建113.2嵌入式web服务器软件设计143.2.1 linux核的移植143.2.2bootloader的移植164. 嵌入式web服务器的实现184.1tcp/ip协议184.2http协议194.2.1http协议概述194.2.2http协议实现204.3cgi技术204.4web服务器boa214.4.1boa服务器概述214.4.2boa服务器的安装与配置225硬件系统的调试和测试235.1静态页面测试245.2基于cgi的动态页面实现255.3嵌入式web服务器的应用266结束语28【参考文献】29附 录31致 谢3229 1引言11 选题背景从20世纪90年代开始,internet以前所未有的惊人速度在全球蔓延,目前,几乎覆盖到了地球的每一个角落,成为社会重要的基础信息设施之一,是信息传送的重要渠道;与此同时,嵌入式技术在最近十几年里也得到了飞速发展,嵌入式系统以其自身的特点和优势己经广泛的应用于消费电子、通信网络、工业控制、汽车电子、医疗仪器、信息家电、航空航天、军事国防等众多领域。随着消费结构的改变,人们对嵌入式设备也有了更高的要求,希望它能接入internet具有网络功能,可以在任何时间、任何地点,使用正浏览器查看嵌入式系统的实时状态、并能对嵌入式系统进行远程监测、控制、诊断和配置等操作。因此,嵌入式系统接入网络已经成为其发展的一个热门领域和必然趋势,而嵌入式web服务器则是嵌入式系统网络化应用的重要方面。嵌入式web服务器(embeddedwebserver)是指将web服务器引入到现场测试和控制设备中,在相应的硬件平台和软件系统的支持下,使传统的测试和控制设备转变为具备了以tcp/ip为底层通信协议、web技术为核心的基于互联网的网络测试和控制设备。它的主要任务是在互联网的嵌入式设备中间进行信息交互,达到通过网络对嵌入式设备进行监控,并将反馈信息自动上传给主控设备的目的。用户可以通过标准web浏览器访问嵌入式web服务器从而实现对现场有关信息的查阅与监控。嵌入式web服务器是嵌入式技术和网络技术结合的产物,是一个很有发展前景的研究方向,它极大的拓展了嵌入式设备的应用范围。目前,它己经广泛的应用到生活和工作的各个领域中,例如采用web技术构建的智能家电,使家电具有网络连接功能,可提供家政安全自动报警、远程控制其自动启/停时间及运转方式、对家电信息进行远程查询、自动检测故障并进行维护和厂家通过远程控制解决家电故障等多种功能,给人们的生活带来了极大的方便。嵌入式web服务器的引入使其在各种企业和工业系统中也都实现了具体的应用,这也是它应用的一个重要方向。在工业监控系统中,与传统的基于现场总线的监控系统相比,采用web技术的远程监控系统更易于和internet实现无缝连接,它使得嵌入式设备的远程控制和管理方式都有了改变,不再需要专用的通信线路,传输的信息也不在局限于数据信息。因此,嵌入式web技术是时代发展的产物,是人们物质水平提高后对嵌入式系统的必然要求,它为我们管理、控制和监测各种各样设备提供了一个很好的途径,对它的研究和应用有着非常重要的实际意义。12 课题研究的目的和意义要实现嵌入式web服务器,首先考虑的问题就是如何将嵌入式系统接入网络,使其充分利用网络资源,实现信息共享和更多的服务。一般在嵌入式设备增加tcp/ip协议就可以接入internet,具体实现方式有两种:直接连接模式和间接连接模式。嵌入式web服务器更易于和internet实现无缝连接,它使得嵌入式设备的远程控制和管理方式都有了改变,不再需要专用的通信线路,传输的信息也不再局限于数据信息。嵌入式web服务器为人们监控和管理各种各样的设备提供了一个很好的应用途径,这种设备可以是具有有限内存资源的16位或者是32位系统,足够提供一个用户界面,整合了监控系统,而且这种方式是基于internet的,这种设备无论在世界上任何一个地方,只要它连入互联网,用户就可以监控所要监控的设备,并且可以通过增加服务器用户认证以及证书功能来保证一定的安全性。嵌入式web服务器理论和应用方面的意义如下:(1)通过嵌入式web服务器的远程监控技术可以将远程设备、智能仪器仪表、传感器的信息与企业的信息管理系统方便的集成,有助于提高管理水平和决策能力,有效地对现场监控对象进行实时、全面的掌握与控制,解决了设备的远程控制的难题。(2)嵌入式的远程监控技术促使了以网络技术为中心的智能仪器、仪表的设计和运行环境的加速形成,它为ist(sensorium technology网络传感器技术)、hvac(家庭环境自动控制)、 ia(information appellant信息家电)、环境自动监测、智能小区管理、网络化交通监管等internet化提供了技术保证。(3)嵌入式系统中的远程监控技术是使网络监控的数字化、网络化、智能化进程向前发展的的推动力。下面我们分别来对这三方面做个简要的介绍:网络监控的数字化是指通过tcp/ip协议将数字化的信息发送出去,在监控系统和信息系统之间实现平滑连接,做到统一平台下的监控和管理;网络监控的网络化是指跨越区域、数量的界限,来共享整个网络中的资源;网络监控的智能化是指在企业管理系统与测控信息系统相结合的基础上,做到对事件的智能处理,如自动分析等。(4) 嵌入式远程监控加入了用户认证功能和安全套接层(ssl)后,这样可以根据不同的用户配置完成不同的用户功能,实现ssl之后用户便可以使用https了。通过上述方法使设备的安全性有了提高,避免非法用户对数据的查看和设备的入侵控制。目前远程监控技术的主流是应用嵌入式internet技术,在嵌入式tcp/ip协议和www协议规范的支持下,通过访问网络服务器来迅速获取自己权限下的所有信息并及时做出响应。将来,嵌入式系统的发展会越来越迅速,越来越成熟,这项新技术迟早将用于远程监控系统中,是监控系统未来发展方向之一。嵌入式监控系统可以使信息实现本地化处理,改善服务器性能,可以使每一个设备具备上网与服务功能,即每一个设备都可以独立进行服务,从而大大提高监控的质量和范围。13 课题研究内容本课题的基本任务是构建一个基于arm的嵌入式web服务器,完成软、硬件平台的设计并实现web服务器的功能。硬件平台采用 arm920t作为微处理器,并设计了核心电路。软件平台采用linux做为操作系统,完成了boot loader和linux内核的剪裁与移植,使其可以成功的运行在arm平台上。同时对tcp/ip协议栈进行分析与剪裁,并在此基础上移植了boa服务器,最终使所设计的web服务器可以成功接入网络并能够提供动、静态页面的显示。主要完成:1) 熟悉s3c2440的硬件结构,设计最小系统;2) 熟悉掌握dm9000网络接口芯片的硬件原理,设计s3c2440网络接口电路;3) 悉了解tcp/ip协议,进行linux移植,tcp/ip协议栈移植,boa服务器移植。 2.系统总体方案和硬件平台设计2.1系统总体方案本课题设计一个采用b/s模式工作的嵌入式web服务器。系统只需要务器端软硬件的开发,只要客户端安装了浏览器,就可以在网络的任何一个位置访问服务器。服务器端软件首先解析客户的请求,然后根据客户的请求生成相应的静态页面或者动态页面返回给客户端。如果客户端要进一步控制,服务器端将调用相关的程序进行处理。本课题在开发过程中的主要工作是嵌入式linux系统的构建、嵌入式应用程序模块的开发以及web服务器的设计。系统的总体结构如图2-1所示。图2-1系统总体架构boa服务器程序作为后台运行的守护进程,负责监听来自网络的客户请求。当用户通过浏览器向服务器发出请求后,boa调用相应的cgi程序来处理用户的请求,实现远程的相关操作。嵌入式数据库sq lite用来存储用户信息和数据信息。cgi脚本程序来实现用户对sq lite数据的访问操作,这些访问操作通过api接口函数实现。api接口函数按照sq lite数据库语法要求进行数据库的相关操作。2.1.1课题总体结构(1)linux2.6内核的裁减与移植linux内核的功能就是与计算机硬件进行交互,实现对硬件的控制,并且对硬件资源的访问进行调度,为计算机上的应用程序提供一个执行环境和硬件的虚拟接口。目前,操作系统的内核结构主要可分为整体式的单内核模式和层次式的微内核模式。linux内核采用的是单内核模式。本系统作为嵌入式系统的一个应用,在特定体硬件平台上开发具体的应用软件。构建软件平台核心的内容是 linux2.6内核的修改与移植,具体的工作包括:启动引导程序vivi的配置、修改与移植;根据嵌入式核心板的硬件配置,修改部分内核源代码,裁减内核,让内核能在开发板上流畅运行;在 linux2.6基础上建立文件系统。(2)linux2.6驱动程序开发设备驱动程序是linux内核的一部分,虽然在官方的内核版本中,内置了很多设备的驱动程序。但着嵌入式系统应用范围越来越广泛,越来越多的设备驱动需要开发程序的开发人员手动编写。嵌入式linux设备驱动程序为用户程序控制硬件设备提供了一组标准化接口,它隐藏了设备的工作细节。设备驱动程序把硬件设备抽象为设备文件,应用程序可以通过对设备文件操作来进行对硬件设备的操作。本课题研究了基于 linux2.6内核的设备驱动程序的设计。 linux2.6内核的驱动程序与2.4有了很大的不同,内核功能更加强大,增加了很多api。编写设备驱动程序,主要完成以下工作:设备驱动程序的注册和注销;打开设备;操作设备;关闭设备;注销设备。(3)cgi程序设计cgi(comfnongatewayinterfaee)程序是外部应用程序与www服务器交互的一个标准接口。根据cgi标准编写的程序可以处理客户端浏览器输入的数据,从而实现客户端和服务器之间的交互操作。在本课题中设计的基于web的动态数据库的访问,就是通过编写cgi程序实现的。cgi程序的工作原理如下:浏览器与服务器建立连接,客户端通过浏览器以表单的形式向服务器发送http请求。服务器收到该请求后,先提取请求内容,然后通过设置环境变量或者命令行参数的方式到相应的目录中调用cgi程序。服务器把客户机传递的参数作为cgi程序的参数,cgi程序调用相应的程序完成操作。操作完成后,cgi程序把处理结果传给服务器。web服务器用http协议再把结果返回给客户机,显示cgi程序的执行结果。当浏览器收到所有的返回数据,即关闭与服务器的连接。cgi程序的执行过程分为以下几个步骤:编写fit-ml表单页面,获取用户输入信息;对用户信息的解码,处理用户请求;向用户返回html结果。2.1.2系统开发流程嵌入式web服务器是一个软硬件的综合体,在开发过程中,必须综合考虑软件、硬件、人力资源等各个方面的因素。嵌入式系统主要开发过程大致描述如下(1)需求分析在需求分析阶段,充分了解用户所要解决的问题,提出一个解决问题的方案。(2)处理器和硬件电路的选择嵌入式系统的设计,没有必要追求高速度和高性能。选择处理器和外围硬件的原则就是在满足用户需求的基础上选择成本低和结构简单的硬件电路。(3)硬件设计和调试硬件的设计和调试包括电路图的绘制和pcb板的制作,在设计的过程中通过调试来检验系统硬件是否可以正常工作。(4)移植操作系统选定一个操作系统,移植内核,然后制作文件系统。一般还需要编写必要的设备驱动程序来实现对设备的控制。(5)编写应用软件根据用户的需求,编写相应的应用软件来实现用户所要求的功能。有了操作系统的支持,对应用软件的开发了极大的灵活性,可以通过进程调度,并发执行,多线程运行等方式来解决问题。(6)系统总体测试整个系统开发完毕,检验是否达到预期目的。如果没有,则要重新设计硬件和软件。如果有,结束开发过程。在本系统的开发过程中,采用现成的开发板,处理器硬件和其他外围电路都是固定好的,因此开发过程中不需要对硬件进行调试。系统开发的主要工作是在特定的硬件上开发应用软件,其开发流程如图2-2所示。图2-2系统开发流程2.2硬件电路设计与实现本章在介绍嵌入式系统中最小系统的定义及其相关内容基础上,以 s3c2440a 为主控芯片设计嵌入式平台开发板,作为嵌入式 web 服务器的硬件开发平台,详细分析了开发平台硬件电路设计。2.2.1硬件平台简介在嵌入式系统的开发过程中,硬件平台的选择是非常重要的部分,选择好硬件以后,就可以在该平台上移植操作系统,编写应用软件。在本设计中,采用友善之臂公司的mini2440发平台。mini2440型发平台如图2-3所示,由核心板和系统底板两部分构成。核心板采用了以arm9为内核的微处理器s3c2440和 64msdram。底板上与本设计有关的外围接口部件包括:1) samsung s3c2440a,主频 400mhz,最高 533mhz2) nandflash存储器是三星公司的k9f5608u,该器件容量为64mxsbit;3) 100m 以太网 rj-45 接口(采用dm9000 网络芯片) 4) max232芯片的rs-232uart串行通信接口;5) adc数据采集电路。图2-3系统开发板2.2.2 s3c2440处理器简介本系统采用的嵌入式处理器为三星公司生产的一款基于arm920t内核和 0.18umcmos工艺的16/32位risc微处理器s3c2440。s3c2440的核心频率可以达到533mhz,它还采用mba(advancedmicrocontrollerbusarchiteeture)的新型总线结构,内部集成了非常丰富的通用的系统外设和接口。它的低功耗、精简和出色的全静态设计特别适合于低版本、低功耗、高性能的手持设备、只能仪表和其他电子产品。s3c2440a 的资源包括:(1)1.2v 内部的,1.8v/2.3v/3.3v 存储器,3.3v 外部的 i/o 微控制器具有 16kb 指令cache/16kb 数据高速 cache/mmu;(2)外部存储器控制器(sdram 控制及芯片选择逻辑);(3)1 个 lcd 控制器(支持 stn 和 tft 带有触摸屏的液晶显示屏);(4)3 个通道的 uart;(5)4 个通道的 dma;(6)4 个具有 pwm 功能的计时器和 1 个内部时钟;(7)8 通道的 10 位 adc;(8)触摸屏接口;(9)i 总线接口;(10)2 个 usb 主机接口,1 个 usb 设备接口;(11)2 个 spi 接口;(12)sd 接口和 mmc 卡接口;(13)看门狗计数器;(14)130 个通用 i/o 口和 24 位外部中断源。2.3 各单元模块电路设计2.3.1电源管理模块在系统需要使用 5v、3.3v、1.8v 的直流稳压电源,其中内核工作需要 1.8v电源,arm 的 io 端口工作和部分器件需要 3.3v,为触摸屏提供 5v 直流稳压电源。这三种电压产生方法是 5v 从外部直接引入,作为系统的总电源,一路直接供给作为工作电源,一路分流到 ams1117 的输入端;ams1117 电源稳压芯片的输出端产生 3.3v 电压,一路供给板子上器件各 3.3v ,一路分流到稳压芯片tps77518 的输入端,其输出端产生 1.8v,原理图见图 2-4和图2-5。图 2-4 电源电路1图 2-5 电源电路22.3.2时钟复位模块s3c2440 部分需要两路时钟输入,一路是 s3c2440 工作时钟输入,另一路提供给 rtc 电路。s3c2440 工作时钟是一个有源晶振,直接输出 12mhz 时钟信号到 s3c2440,有 s3c2440 内部 pll 倍频到 200mhz。复位对于系统来说很重要,由于各个单元要进入正常工作状态,需要可靠地复位,正常情况下,一般有上电复位和手动复位。如果电源电压出现波动,系统会非正常复位,这个时候会发生复位时间不够而造成一些错误甚至死机,所以复位监控电路也是必要的.复位电路选用的芯片是 max118,原理图见图 2-7。图 2-7 复位电路2.3.3 rs-232 串口模块s3c2440 的 uart 单元提供独立的异步串行 i/o 端口,每个都可以在s3c2440 的 uart 单元提供独立的异步串行 i/o 端口,每个都可以在中断和dma 两种模式下工作。支持最高波特率为 115.2kbps,每个 uart 通道包含 2个 16 位的 fifo,分别用于接收和发送数据。uart 可以进行以下参数设置:可编程波特率,红外收/发模式,1 或 2 个停止位,5 位、6 位、7 位或 8 位数据宽度和奇偶校验位。每个 uart 包含一个波特率发生器、发送器、接收器和控制单元。波特率发生器以 mclk 作为时钟;发送器和接收器包含 16 字节的 fifo和移位寄存器。系统中采用芯片 max232 作为 rs-232 的电平转换,实现串口通信。串口 uart 模块见图 2-8,其中 c54-c59 电容值均为 0.1f。图 2-8 串口电路2.3.4 jtag接口对于产品来说不需要这个接口,但是在开发产品的过程中,jtag 接口是必不可少的,板子运行的第一个程序 boot loader 是通过 jtag 下载,调试阶段 jtag也起到非常重要的作用,其原理图和实物接口见图 2-9。除此之外, jtag接口在开发中最常见的用途是单步调试, 不管是市面上常见的jlink还是 ulink,以及其他的仿真调试器,最终都是通过 jtag 接口连接的。标准的 jtag 接口是 4 线:tms、 tck、tdi、tdo,分别为模式选择、时钟、数据输入和数据输出线,加上电源和地,一般总共6 条线就够了;为了方便调试,大部分仿真器还提供了一个复位信号。 本开发板提供了包含完整jtag标准信号的 10 pin jtag 接口,各引脚定义如图。 对于打算致力于linux或者 wince 开发的初学者而言,jtag接口基本是没有任何意义和用途的,因为大部分开发板都已经提供了完善的 bsp,这包括最常用的串口和网络以及 usb 通讯口,当系统装载了可以运行的 linux 或者 wince 系统,用户完全可以通过这些高级操作系统本身所具备的功能进行各种调试,这时是不需要 jtag 接口的;即使你可以进行跟踪,但鉴于操作系统本身结构复杂,接口繁多,单步调试犹如大海捞针,毫无意义可言。想一想你手头使用的pc机就知道了,或许你从没有见过甚至听过有谁会在 pc主板上插一个仿真器,来调试pci 这样接口的 windowsxp或者 linux驱动。这就是为什么你经常见到或者听到那么多人在讲驱动“移植” ,因为大部分人都是参考前辈的实现来做驱动的。jtag 仅对那些不打算采用操作系统,或者采用简易操作系统(例如 ucos2 等)的用户有用。大部分开发板所提供的 bootloader 或者 bios 已经是一个基本完好的系统了,因此也不需要单步调试。 图 2-9 jtag接口原理图2.3.4 flash 存储模块mini2440具备两种flash,一种是 nor flash,型号为 sst39vf1601,大小为 2mbyte;另一种是 nand flash,型号为 k9f1g08,大小为128m。s3c2440支持这两种 flash启动系统,通过拨动开关 s2,你可以选择从nor还是从 nand启动系统。实际的产品中大都使用一片 nand flash 就够了,因为我们为了方便用户开发学习,因此还保留了nor flash。 nand flash不具有地址线,它有专门的控制接口与cpu 相连,数据总线为 8-bit,但这并不意味着nand flash 读写数据会很慢。大部分的优盘或者sd 卡等都是 nand flash 制成的设备。 从下面的原理图2-10可以看出,nor flash采用了 a1-a22 总共 22 条地址总线和 16 条数据总线与 cpu 连接,请注意地址是从 a1 开始的,这意味着它每次最小的读写单位是 2-byte,因此根据原理图,该设计总共可以兼容支持最大 8mbyte 的 nor flash,实际我们的开发板上只用了 a1-a20条地址线,因为与 a21、a22 相连的 sst39v1601的相应引脚是悬空的。图 2-10 flash原理图2.3.5 10m/100m 网络接口模块本开发板采用了 dm9000 网卡芯片,它可以自适应 10/100m 网络,rj45 连接头内部已经包含了耦合线圈,因此不必另接网络变压器,使用普通的网线即可连接本开发板至你的路由器或者交换机。每个开发板的网络 mac 地址都是相同的,它可以通过软件设定。以太网接口电路主要由媒质接入控制 mac 和物理接口两大部分构成。目前常见的以太网接口芯片,如 rtl8019/8029/8039、cs8900、dm9008 及 dwl650无线网卡等,其内部结构也主要包含着两部分。本课题选用 cs8900a 作为以太网物理接口,它是一个高度集成的以太网控制芯片,集成 isa 总线接口、曼切斯特编码/解码器、片上 ram、10base-t 收发器、数据链路控制器 mac 和芯片上存储管理;支持全双工模式;工作电压可为 3.3v 和 5v;常见的封装是tqfp-100;是嵌入式平台实现 10mbps 以太网连接的很好选择方案。图2-11 10m/100m 网络接口模块3.嵌入式web服务器软件系统设计本章详细介绍了嵌入式系统开发环境的建立,linux的安装配置,以及boot-loader的移植。3.1嵌入式 linux 软件平台搭建3.1.1在vmware下安装 redhat9.0安装vmware,版本为vmware-workstati。n-5.5.3-34685。在vmware下创建虚拟主机。运行vmware,点击“新建虚拟机”,进入新建虚拟机的向导,如图3-1所示。图3-1 安装系统界面选择“自定义”,点击下一步。操作系统类型。选择“linux”,版本选择“redhatlinux”,如图3-2所示,点击下一步。虚拟机命名。虚拟机名字下面是存放虚拟机配置文件的位置信息,选择程序默认的即可,点击下一步。图3-2 安装位置选择选择虚拟机所用的硬盘。选择“使用物理硬盘”。点击下一步继续时程序会给出了一个警告,表示使用物理硬盘创建虚拟机会有风险,如图4-3,点下0k继续。图 3-3使用物理硬盘警告修改虚拟机的设置。redhat9.0的安装包是从网上下载的三个镜像文件。在虚拟主机管理界面上双击cd-rom,在cd-rom配置窗口上修改,使用150镜像文件(use 150image)作为cd-rom,如图4-4所示。图3-4 redhat9.0安装路径选择启动虚拟机安装linux。点击窗口中的绿色箭头“启动该虚拟机”。在虚拟机启动的时候,根据提示,按下f2键进入setup,再boot里修改启动顺序,将cd-rom(光盘)的位置放到第一个,保存退出。vmware自动重新启动虚拟机,这时就会从虚拟机的光盘引导了,即从linux操作系统的150安装文件引导。此时可以看到相应linux操作系统安装的启动画面。安装linux。如果要以文本界面方式安装,在boot:后输入linuxtext,再键入回车。在选择语一言鼠标等后,安装程序询问是否要自动分区(aotumatic partitioning),直接点击”next“。下一个界面中有关于aotumatic partitioning的3种选择,本课题中选择的是第3个“保持所有分区并使用己有的未使用空间,(keep al1 partition and use existing free spaee)。在安装过程中将显示安装进度界面。安装过程中,不再需要人工干预。当安装完成后,将出现提示界面。安装完成会设定显示卡之类,最后vmware内系统重新启动。重启后,系统提示你可以设定一个个人帐号 (personal account)和密码。注意,虽然这里不开帐号也能通过,但实际上是不行的,必须在这里设定一个用户名和密码。因为再启动时必须提供用户名和密码,否则开机失败。启动后,系统询问用户名和密码,输入用户名和密码即可。最后出现redhatg的界面,如图3-5所示。图3-5redhat9界面3.1.2在vmware下安装 vmwaretoo1s安装 vmwaretools可以使得主机与虚拟机通信,并且能自动识别鼠标光标的位置,不用再使用ctri.+alt切换鼠标。点击“设置”-“安装vmware工具”,点击“设备”菜单,光驱的菜单项山功e:0变成ide:0 /root/desktop/vmware-tools-distrib/vmware-install.pl,表示vmware将linux的is0映像文件作为了虚拟机的光盘。进入文本登录界面中,输入管理员用户名(root)和密码进入r00tlocalhostr00t。在命令行后面输入如下命令此时将vmware-linux-tools.tar.92拷贝到八mp目录下。到菜单栏“虚拟机”里选择“安装vmware tools(i)”虚拟机工具图3-6安装vmware tools界面3.2嵌入式web服务器软件设计3.2.1 linux核的移植linux操作系统的移植通常要经过交叉编译环境搭建,bootloader、系统内核的移植和文件系统制作等几个步骤。mini2440板级支持包提供的交叉编译工具链和u-boot引导程序已满足系统需要,不再重复开发。本节重点介绍linux内核的移植和根文件系统的制作。linux系统移植步骤如图3-7。图3-7 系统移植步骤为支持不同体系架构的处理器,linux内核分为体系结构相关和体系结构无关两部分。在linux启动的第一阶段,和体系结构相关的内核代码首先执行,它会完成硬件重启和寄存器设置等初始化工作。然后把控制权转交给内核中与体系结构无关部分。为了让linux在mini2440上运行,首先要选择arm920t s3c2440a处理器对应的平台架构模块,并设置cpu的主频。其次,在了解mini2440的硬件配置及本系统所需功能模块的基础上对内核进行裁减,以节省系统存储空间,提高系统的运行速度。移植工作:根据本系统的实际需要和mini2440开发板的硬件体系结构,对mini2440板级支持包提供的linux-2.6.30源代码进行修改,主要是针对系统需要对s3c2440a cpu及相关设备驱动和文件系统支持的配置、nandflash分区的修改、某些外设驱动的编写,建立一款适合于嵌入式web服务器系统平台的新操作系统。开发过程中需要使用如下步骤对内核进行剪裁与编译。内核移植流程如图3.5所示。图3-8linux内核移植流程框图3.2.2bootloader的移植bootloader 主要负责加载内核,尽管它在系统启动期间执行的时间非常短,不过它确是非常重要的系统组件。在一定程度上来说,设置 bootloader 是所有 linux系统的一项常见工作。尽管如此,对嵌入式系统来说,这确实一件特别的工作,因为将 bootloader 用在这类系统中,可能完全不同于将它们应用在一般的系统中,即使相同,他们的配置和操作方法也可能相去甚远。启动代码(bootloader)的开发和移植是嵌入式系统开发的难点之一,同时也是系统运行的基本条件。这段代码是和硬件紧密相关的,就好比是 pc 机上的 bios程序。简单的说 bootloader(引导加载程序)是系统加电后运行的第一段代码,一般它只在系统启动时运行非常短的时间,但对于嵌入式系统来说,这是一个非常重要的系统组成部分。当使用单片机或者像 ucos 这样的操作系统的时候,一般只需要在初始化 cpu 和其他硬件设备后,直接加载程序即可,不需要单独构建一个引导加载程序。但构建或移植一个 bootloader,从某种意义上来说,对所有的linux 系统都是一个最普通的任务。在 pc 机中,引导加载程序由 bios(其本质就是一段固件程序)和位于硬盘mbr中的操作系统引导加载程序(比如ntloader,grub,lilo)一起组成。bios 在完成硬件检测和资源分配后,将硬盘 mbr 中的bootloader 读到系统的 ram 中,然后将控制权交给操作系统引导程序。引导加载程序的主要运行任务就是将内核映像从硬盘上读到 ram 中,然后跳转到内核的入口点去运行,即开始启动操作系统。在嵌入式系统中,并没有像 bios 那样的固件程序(有的嵌入式 cpu 会在芯片内部嵌入一段非常小的程序,一般用来将 bootloader 装载进 ram 中,它有点类似bios 的功能,但功能远比 bios 弱),因此在一般典型的系统中,整个系统的加载启动任务就完全由 bootloader 来完成。在一个基于 arm 的嵌入式系统中,系统在上电或复位时通常都从地址 0x00000000 处开始执行,而这个地址处安排的通常就是系统的 bootloader。通过这段小程序可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。嵌入式 linux 系统从软件的角度看通常可以分为 4 个层次:1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 bootloader 两大部分。2. linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。3. 文件系统。包括根文件系统和建立于 flash 内存设备之上文件系统。通常用 ramdisk 来作为根文件系统。4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 gui 有:microwindows和 minigui 等。图 3-7 就是一个同时装有 bootloader,内核的启动参数,内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。图3-9bootloader 所处层次位置大多数 boot loader 都包含两种不同的操作模式:启动加载模式和下载模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,boot loader 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。启动加载(boot loading)模式:这种模式也称为自主(autonomous)模式。也即 bootloader 从目标机上的某个固态存储设备上将操作系统加载到 ram 中运行,整个过程并没有用户的介入。这种模式是 boot loader 的正常工作模式,因此在嵌入式产品发布的时侯,boot loader 显然必须工作在这种模式下。下载(downloading)模式:在这种模式下,目标机上的 bootloader 将通过串口连接或网络连接等通信手段从主机(host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 bootloader 保存到目标机的 ram 中,然后再被 bootloader 写到目标机上的 flash 类固态存储设备中。bootloader 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的 系 统 更 新 也 会 使 用 bootloader 的 这 种 工 作 模 式 。 工 作 于 这 种 模 式 下的 bootloader 通常都会向它的终端用户提供一个简单的命令行接口。像 blob 或 u-boot 等这样功能强大的 bootloader 通常同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。比如,blob 在启动时处于正常的启动加载模式,但是它会延时 10 秒等待终端用户按下任意键而将 blob 切换到下载模式。如果在 10 秒内没有用户按键,则 blob 继续启动 linux 内核。4. 嵌入式web服务器的实现4.1tcp/ip协议本文所设计的web服务器是指 httpweb服务器,它以http引擎为核心,web服务器同web浏览器之间通过http协议进行通信,而作为应用程序的http协议是建构在tcp/ip协议基础之上的。因此,tcp/ip协议栈的引入和裁剪是实现嵌入式web服务器的关键,是整个系统的基石。tcp/ip协议是internet最基本的协议、internet国际互联网络的基础,因其出色的表现而被公认为iniemet上事实的网络标准协议。tcp/ip协议是一个非常复杂的协议集,可分不同层次进行开发,每个层次分别负责不同的功能。与其他任何协议相比,tcp/ip协议能够提供更好的交互操作性能,保证了因特网上数据的准确快速传输,它可以在大多数系统中使用,因而得到了广泛应用。tcp/ip协议栈的体系结构通常分为四层:应用层、传输层、网络层和链路层。具体各层所包含协议如图5-1所示。图5-1 tcp/ip协议常用协议模型(l)链路层链路层是tcp/ip协议栈的最底层,该层的主要功能是从底层物理网络上接收物理帧,抽出ip数据报,交给上一层,或者把接收到的ip数据报通过该层的物理接口发送到传输介质上。tcp/ip协议栈并没有具体定义链路层,只要是在其上能进行ip数据报传输的物理网络,都可以当成链路层。(2)网络层(ip层)这一层是tcp/ip协议栈中最重要的一层,主要解决计算机之间的通信问题,负责把源主机上的分组发送到互联网中的任何一台主机上。这一层主要包含icm只ip协议。.icmp协议:处理路由,是协议ip层实现报文传送的控制机制,提供错误信息报ip协议:使用ip地址确定收发端,提供端到端的数据报传递。(3)传输层传输层用于提供应用程序的传输服务,它可以协调发送端和接收端之间的传输速度差异,使所有的传输数据能正确的到达系统,保证两台主机之间的通信。这一层通常包含两个协议:l tcp协议:提供可靠的面向连接的数据传输服务。l udp协议:提供面向无连接的、不可靠数据报传输服务。(4)应用层应用层向使用网络的用户提供特定的、常用的应用程序。常用的应用层协议如下:l 超文本传输协议(http):用来访问在www服务器上的各种超文本。l 文件传输协议(ftp):为文件传输提供路径,可以通过ftp服务器下载和上传文件。l 域名服务系统(dns):用于实现从主机域名到ip地址之间的转换。l 邮件传输协议(smtp):实现internet中电子邮件的传输功能。其中要注意的一点是,应用层的有些协议(如http,ftp)是基于tcp协议的,而有些协议(如snmp)是基于udp协议的,所以开发者应根据自己的应用程序选择相应的传输层协议。4.2http协议 4.2.1http协议概述web服务器使用的主要协议是http协议(超文本传输协议)。http协议是用来构建分布式、协同超媒体信息系统的应用层协议,它是internet的基础,是一个通用的、无状态的协议。http协议40提供了一种新型的信息组织方式,将信息以超链接的方式组织起来,改变了获取信息的方式,极大地促进了internet的发展。作为web服务器和web浏览器之间的通信协议,http主要用来交互具有mime格式的请求和响应报文,它规定了发送和处理请求的标准方式,规定了服务器和浏览器之间传输的报文格式及各种控制信息,并且允许不同种类的客户端相互通信,从而定义了所有web通信的基本框架。从功能上来说,http协议是基于请求响应模式的。web服务器监听用户端的服务请求,根据用户请求的类型提供相应的服务。web服务器在接收到用户的请求后,响应用户的请求并返回需要的数据,数据通常以格式固定、含有文本和图片的页面出现在用户端的浏览器上,浏览器处理数据然后提供给用户。http通信建立在tcp仰连接之上,默认端口为tcp80端口。它的传输过程由4个阶段组成,具体过程如下:1建立连接:建立连接是通过建立套接字实现的。客户打开一个套接字并把它与tcp80端口相连,如果成功,就相当于建立了一个虚拟文件,以后就可以在该虚拟文件上写数据并通过网络向外传送。2发送请求:打开一个请求后,客户机把请求信息送到服务器的停留端口上,完成提出请求动作。3发送响应:服务器处理完客户端的请求后,要求客户机发送响应信息。4关闭连接:客户和服务器双方都可以通过关闭套接字结束对话。4.2.2http协议实现http协议的版本经历http0.9、 http1.0及httpi1.1。http1.1之前的版本每次连接只能处理1个请求。服务器处理完客户的请求并收到应答后,即断开连接。http/1.1出现后,改变了早期版本的基本模式,它允许客户端和服务器之间的多个传输采用同一个tcp网络连接进行,这种连接是一种持久连接。这样就大大提高了网络和系统的性能。所以,本文选用 httpi1.1来实现 web服务器的通信。由于http协议的机制比较复杂,要想将其应用到嵌入式系统中,仍需采用精简的方法,在保证其基本功能的前提下,对它的一些机制进行简化,使其能够在嵌入式系统中实现,并符合嵌入式web服务器的要求。在己经建立tcp连接的基础上,一个http会话包括两个过程:客户端发送请求数据报文,web服务器端完成相应动作并发送应答数据报文。服务器端在每次接收到请求http报文时,主要完成对接收到的请求数据报文进行解析和对应答数据报文进行封装两个工作。在本文的设计方案中,由于web服务器只提供浏览信息的作用,所以该系统只响应get请求方法,get方法用于客户端获取页面文件。而对于http1.1中定义的一些其他方法,如用于返回用户控制信息、删除服务器端文件、客户端更新或者用于客户端探察请求路径等用途,由于在设计中作用不大而不予考虑。服务器端每当有请求报文到达时,先判断是否采用get方法,如果是get方法,表明客户端要求获得一个页面,则服务器端开始解析所请求页面的u甩,并将报文的元信息部分记录下来存放到eeprom中。封装应答http数据报文时,先从eeprom头部读取固定的http报文头部数据,然后装入报文的实体部分。相反,如果不是get方法,则不做任何操作。这种方式的使用,大大的节省了系统资源,并提高了处理器读取存储器的效率,减小了系统的响应时间。4.3cgi技术大多数嵌入式web服务器在应用时都需要提供动态内容显示或交互式操作,本文考虑到嵌入式资源限制的问题,选择cgi技术实现浏览器与web服务器的动态数据交互。cgi接口是实现动态web页面的关键技术,它使得嵌入式系统中常见的远程监控、参数更新、查询的功能得以实现。 cgi(commongateinternetgace)通用网关接口,是一个用于定义web服务器与外部程序之间通信方式的标准,它使得外部程序能够生成html、图像或者其他web内容,并允许将其输出结果经http服务器传送给web浏览器。cgi的主要工作是在web环境下,从浏览器输入一些表单信息给web服务器,web服务器将数据使用标准输入送给cgi程序,程序根据元素名字或值中的元素名字来区分数据,完成数据处理后,在读取相应的模板文件将对应的数据填充到html文本中去,最后将生成的html形式的结果文件送回浏览器。一般来说,cgi接口的功能就是利用ht作协议,在客户端与服务器主机应用程序之间传递信息。使用cgi实现客户端和服务器交互的过程如图5-1所示图5-1 cgi程序与客户端的交互流程web服务器调用cgi程序要遵循cgi接口规范,本文采用在html程序中使用form表单方法调用cgi。在html中,表单是最主要的传输信息手段,它适用于任何浏览器。表单数据一般是以po

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论