中国·芯片交易在线
首页 | 供应信息 | 求购信息 | 库存查询 | 新闻中心 | 展会资讯 | IC厂商 | 技术资料 | 自由区域
   新闻首页 |  行业动态 | 新品发布 | 政策法规 | 科技成果 | 模拟技术 | 嵌入系统 | 传感控制 | 存储设计  
当前位置:IC72首页>> IC新闻中心>> 嵌入系统 >>电子行业新闻正文

嵌入式Web 服务器Boa 的移植及其应用

时间:2007/11/27 9:29:00  作者:  来源:ic72  浏览人数:1154
 
 

      随着嵌入式技术的发展和高速宽带网络的普及, 利用网络实现远程监控已为人们广泛接受, 嵌入式网络监控技术正是在此条件下逐步发展成熟起来的. 用户使用Web 浏览器, 通过以太网远程访问内置Web 服务器的监控摄像机, 不但可以实现对现场的远程视频监控, 而且可以向监控现场发送指令. 在整个系统的实现过程中, 嵌入式Web 服务器起着十分重要的作用, 因此, 在嵌入式网络视频监控系统中,Web 服务器的设计对监控系统的整体性能具有直接的影响, 只有有了高效率的Web 服务器, 监控系统的性能才能得到充分的发挥.

      1 嵌入式Web 服务器Boa 的特点

      Boa 是一款单任务的HTTP 服务器, 与其他传统的Web 服务器不同的是当有连接请求到来时, 它并不为每个连接单独创建进程, 也不通过复制自身进程来处理多链接, 而是通过建立HTTP 请求列表来处理多路HTTP 连接请求, 同时它只为CGI 程序创建新的进程, 这样就在最大程度上节省了系统资源, 这对嵌入式系统来说至关重要. 同时它还具有自动生成目录、自动解压文件等功能, 因此, Boa 具有很高的HTTP 请求处理速度和效率, 在嵌入式系统中具有很高的应用价值.

      2 Boa 的功能实现
     
      嵌入式Web 服务器Boa 和普通Web 服务器一样, 能够完成接收客户端请求、分析请求、响应请求、向客

      户端返回请求结果等任务. 它的工作过程主要包括:

      ( a) 完成Web 服务器的初始化工作, 如创建环境变量、创建TCP 套接字、绑定端口、开始侦听、进入循环结构, 以及等待接收客户浏览器的连接请求;
     
      ( b) 当有客户端连接请求时,Web 服务器负责接收客户端请求, 并保存相关请求信息;

      ( c) 在接收到客户端的连接请求之后,分析客户端请求, 解析出请求的方法、URL 目标、可选的查询信息及表单信息, 同时根据请求做出相应的处理;

      ( d)Web 服务器完成相应处理后, 向客户端浏览器发送响应信息, 关闭与客户机的TCP 连接.
   
      嵌入式Web 服务器Boa 根据请求方法的不同, 做出不同的响应. 如果请求方法为HEAD, 则直接向浏览器返回响应首部; 如果请求方法为GET, 则在返回响应首部的同时, 将客户端请求的URL 目标文件从服务器上读出, 并且发送给客户端浏览器; 如果请求方法为POST, 则将客户发送过来的表单信息传送给相应的CGI 程序, 作为CGI 的参数来执行CGI 程序, 并将执行结果发送给客户端浏览器. Boa 的功能实现也是通过建立连接、绑定端口、进行侦听、请求处理等来实现的. 其初始化部分的源代码如下:

      int server_s;

      server_s = socket( SERVER_PF,SOCK_STREAM,IPPROTO_TCP) ;

      if( server_s == - 1) {

      DIE( "unable to create socket") ;

      }

      if( set_nonblock_fd( server_s) == - 1) {

      DIE( "unable to set server socket to nonblocking") ;

      }

      if( fcntl( server_s,F_SETFD,1) == - 1) {

      DIE( "can′t set close! on! exec on server socket! ") ;

      }

      if( ( setsockopt( server_s, SOL_SOCKET,SO_REUSEADDR,( void*)&sock_opt,

      sizeof( sock_opt) ) ) == - 1) {

      DIE( "setsockopt") ;

      }

      if( bind_server( server_s, server_ip, server_port) == - 1) {

      DIE( "unable to bind") ;

      }

      if( listen( server_s, backlog) == - 1) {

      DIE( "unable to listen") ;

      }
   
      上述代码主要用于打开一个有效的socket 描述符, 然后将其转换为无阻塞套接字. 函数bind( ) 用于建立套接字描述符与指定端口间的关联, 并通过函数listen( ) 在该指定端口侦听, 等待远程连接请求.当侦听到连接请求时, Boa 调用函数get_request( int server_sock) 获取请求信息, 通过调用函数accept( ) 为该请求建立一个连接. 在建立连接之后, 接收请求信息, 同时对请求进行分析. 当有CGI 请求时, 为CGI 程序创建进程, 并将结果通过管道发送输出. Boa 的整体工作流程如图1 所示.
   

ic72新闻中心

      3 Boa 在ARM 上的移植

      3.1 修改Web 服务器Boa
   
      为进一步提高系统性能, 应根据嵌入式网络视频监控系统的特点, 对Web 服务器作适当的修改. 修改内容主要包括:

      ( a) 定义常数BUFFER_SIZE 为8192, 通过增大BUFFER_SIZE 的值来增加输入输出缓存,以提高图像传输速度, 从而加快系统的响应速度;

      ( b) 修改请求列表参数, 根据可能出现的请求数量修改服务器可以处理的HTTP 连接数量;

      ( c) 为适应嵌入式系统资源较少的情况, 精简uClinux 操作系统中的库函数,使用uClibc 进行编译, 因此要使Boa 在嵌入式系统上正常运行, 用户必须自己实现一些函数功能, 如字符串查找函数strstr( ) 和字符串复制函数strdup( ) 等.

      3.2 交叉编译Boa
   
      为了建立嵌入式交叉编译环境, 首先必须安装arm 交叉编译工具arm-elf-gcc, 然后使用交叉编译工具arm-elf-gcc 编译Boa 源程序, 通过执行:

      . / configure -target = arm-elf -host = i686-pc-linux-gnu  -build = arm-elf

      Make
   
      便可生成elf 格式的可执行文件boa.
   
      通过arm-elf-strip -g boa 指令去除附带的编译信息, 以减少所占用的空间. uClinux 系统采用的romfs 文件系统相对于一般的ext2 文件系统需要的空间较少, 因此需要采用elf2flt 工具将生成的boa 的可执行文件由elf 格式转换成flat 格式, 并将其添加到romdisk 中.

      3.3 配置Web 服务器Boa
   
      为了能够在ARM上运行Web 服务器Boa, 需要对其运行环境、参数等进行设置, 并将最终的配置文件Boa.conf 置于适当位置. 通过修改配置文件Boa.conf 可实现对Web 服务器的配置, 部分配置为: 侦听端口使用80 端口, 访问日志AccessLog 存放于/var/log/boa/access_log, 错误日志ErrorLog 位于/var/log/boa/error_log, 文件的根目录DocumentRoot 设在/home/httpd/, KeepAliveMax 的值修改为50,KeepAliveTimeout 的值修改为10, 设置CGIPath 为/cgi-bin/ 等; 在Boa.conf 的最后加上ServerNameEmServer, 即将EmServer 作为服务器名称, 当然也可用其他名称作为服务器名; 最后将修改好的配置文件Boa.conf 存放于嵌入式系统根文件/etc/boa 目录下. 通过镜像制作工具执行命令genromfs-fromfs.img -d romdisk 生成romdisk 的镜像文件romfs.img, 将romfs.img 通过bootloader 下载到flash 存储器.

      3.4 测试Boa 的运行
   
      为了确保Boa 的正常运行, 利用简单的测试程序测试Boa 的运行情况. 在目录/home/httpd/ 下建立index.html 文档, 其内容为:

      This is boa

      < / BODY>

      < / HTML>
   
      通过IE 浏览器连接到运行Boa 的嵌入式系统http://192.168.0.26/ , 若页面显示This is boa, 说明Boa可以正常获取页面.
   
      在/cgi-bin/ 路径下建立test 文件, 其内容为:

      #!/bin/sh

      echo Content- type: text/html

      echo

      echo "

      "
      echo "This is cgi test"
     
      echo "< / body>< / html>"    
     
      在IE 浏览器输入地址http: //192.168.0.26/cgi-bin/ test, 若页面显示This is cgi test, 说明服务器可以正常执行CGI 程序.
     
      4 Boa 在网络监控系统中的应用
     
      将Boa 移植到运行uClinux 操作系统的ARM 处理器上, 建立嵌入式Web 服务器, 为用户提供基于HTTP 协议的网络接入方式, 这样的设计方案可以很好地运用到网络监控系统中. 由于Boa 只支持基于CGI 的动态网页, 因此需要编写适当的CGI 程序来实现对视频数据的发送和对控制指令的处理. Web 服务器通过调用CGI 程序实现网络视频监控, 同时向监控现场发送各种指令. 作者根据监控领域的实际需求, 按上述方案设计了一个网络视频监控系统, 该系统可以实现多路视频数据接入, 8 个方向的云台控制等功能.目前系统已经在楼宇监控中获得应用, 性能良好, 实时性强, 其监控界面如图2 所示. 
   

ic72新闻中心

图2 网络视频监控界面

      5 结束语
     
      Web 服务器是各种网络应用系统的有机组成部分, 直接影响网络应用系统的运行质量与效率. Boa 本身是为嵌入式系统所设计, 它特有的连接处理方式以及直接调用操作系统的文件读取方式, 大大提高了系统的性能. 它与Linux 系统上的Web 服务器Aparch 相比占用系统资源少, 连接处理速度快. 在网络监控系统中使用这种嵌入式Web 服务器, 可以节省系统资源, 提高系统运行效率, 充分发挥了网络的优势.

 
【相关文章】
·嵌入式Web 服务器Boa 的移植及其应用
 
 
IC新闻搜索
 
热点新闻
基于红外超声光电编码器的室内移动小车定位系
基于闪烁存储器的TMS320VC5409DSP并行引导装载方法
非移动市场需求飙升,ARM预计2010年出货量超50亿片
一种快速响应的电容式湿度传感器感湿薄膜设计
利用特殊应用模拟开关改进便携式设计
无线传感器网络跨层通信协议的设计
基于ARM9内核Processor对外部NAND FLASH的控制实现
基于GSM技术的汽车防盗系统的设计
热电阻在烟叶初烤炕房温度控制中的应用
高速数据转换系统对时钟和数据传输的性能要求
友情连接
 关于我们  IC论坛  意见反馈  设置首页  广告服务  用户帮助  联系我们
copyright:(1998-2005) IC72 中国·芯片交易在线
(北京)联系电话:(010)82614113、82614123 传真:(010)82614123 客户服务:service@IC72.com 库存上载:IC72@IC72.com
在线MSN咨询:ic72sale8@hotmail.com 通信地址:北京市西城区西直门内大街2号大厦15层 邮政编码:100013
(深圳)联系方式: 在线MSN咨询:ic72sale6@hotmail.com 在线QQ咨询:191232636 通信地址:深圳市福田区振华路
注 册 号: 1101081318959(1-1)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9