注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
红色飓风的个人空间 https://home.eeworld.com.cn/space-uid-169570.html [收藏] [复制] [分享] [RSS]
日志

基于FPGA的uClinux系统移植及实现web-server[4]

已有 2141 次阅读2010-5-28 16:22 |

---Web Server实现

 

本篇主要讲uclinux下实现web-server方法,以及boa服务器和CGI程序相关知识.

本方案利用web-server实现局域网内设备的控制,通过浏览器控制LED,七段数码管等来作为演示.

 

实验环境:

硬件:

红色飓风 Red2-2c70

Flash:8M*16bit    SDRAM:16M*32bit

软件:
Quartus8.0+Nios8.0+Vmware5.0/6.0+CentOS5.3+uClinux2.6.26

 

相关概念:

1>.Web-server:

网页服务器,又称WWW服务器,提供网上信息浏览服务,可被不同终端的浏览器访问,提供相应服务.Server作为一个数据载体,可以将本地的信息和数据通过网络传递给发出请求的客户,实现的基础是HTTP.

利用web-server可以屏蔽不同终端的影响,也可以通过网络实现远程数据传输,或是局域网内进行设备控制等.

 

2>.boa

uClinux下主要有三个Web-server: httpd, thttpd,boa.

其中httpd是最简单的,不支持认证,不支持CGI.

BoaThttpd都支持,而且功能都比较全.

这里我们选择源代码开放,性能可靠,稳定性好的boa作服务器,

缺点是,只支持单任务.

 

3>.CGI程序

CGI(Common Gateway Interface) 通用网关接口的简称.

主要用来处理用户请求,实现用户与服务器之间的交互.

实际上就是一段程序,运行在Server上,提供同客户端 Html页面的接口.

服务器提供了客户端(浏览器)CGI扩展程式之问的信息交换的通道。客户通过浏览器发出请求,经过服务器的解释发出标准输出传送给CGI,或是说调用CGI程序,CGI对信息进行处理后,会将结果以标准输出的形式发回,服务器将处理结果以HTML的形式发送给客户端。

CGI程序可以用多种语言去写,比如Shell Script, C ,VB ,Perl,Fortran,

但在uClinux下只能用C语言完成.

通常在Web网页中调用CGI程序有三种方法,表单,超链接或是SSI调用.

我们这里主要采用表单的调用方法 .

 

4>.表单

表单,FORM,一种HTML语言格式,在网页主要负责数据采集的功能,比如采集访问者的名字和email地址、调查表、留言簿或是用户的选项等等.

详细语法格式,查阅HTML语言.

这里主要介绍表单里比较重要的几项属性:

ACTION="URL",指定一个方式来处理表单提交的数据,URL指向CGI程序的位置.

METHOD="GET|POST",指定HTTP提交数据的方法,GETPOST

表单域包含了文本框、多行文本框、密码框、隐藏域、复选框、单选框和下拉选择框等,用于采集用户的输入或选择的数据.

主要定义TYPE,NAME,VALUE.

 

 

1.      硬件设计

硬件原理图如专题[2]中所示,

SOPC中加入要控制的LED,7-seg.


2.      软件设计

2.1驱动

在网卡驱动已经OK的情况下,

确认<选择应用程序或库文件>

<Network Applications>

<*>Boa

<*>dhcpcd-new

<*>inetd

Enable即可.

 

配置Boa服务器,使其支持CGI程序,打开boa.conf文件,确认下面信息是否正确:

port 80                                              //指明了访问的端口

MimeType  /etc/mime.types               //所支持的多媒体文件类型

DocumentRoot /home/httpd              //CGI脚本的存放位置,

DirectoryIndex index.html                //首页的位置名称

 

 

2.2建立静态网页

根据自己的需要,制作一个首页,本实验设计


 

Index.html就是首面,当浏览器访问服务器时,首先显示的页面.

新建一个首页,主要加入可搜集信息的FORM,则可以根据FORM所得到的数据,调用CGI程序,实现动态网页的功能.

参考FORM表单格式,这个是Test2的参考表单:

 

<P><strong><font color=blue>Test 2:Led seven seg run</strong>

<br>

<FORM. ACTION="/cgi-bin/cgi_demo" METHOD=GET>

<p><font color=black>Input the number:

<INPUT NAME="num" SIZE="7">

<INPUT TYPE="SUBMIT" VALUE="sent">

<INPUT TYPE="reset"  VALUE="clear">

</FORM>

其中,

FORM. ACTION:定义脚本位置.

Method:定义数据获取方式

Input name: FORM变量名

之后的控制,无非就是对这些变量进行查询.

 

2.3 CGI程序

由于CGI程序是一个外部程序,所以系统要想运行它,

首先是CGI程序进行编译链接,生成一个可执行文件,存放于ROMFS文件夹中,最后与内核一起生成镜像.

修改位于 /uClinux-dist/user/cgi_generic下的CGI相关程序,

主要修改cgi.ctemplate.c

下面主要解释其中重要的C语句:

       //获取提交表单的方法

       Request_method = getenv(“REQUEST_METHOD”);//方法存于R_M字符串中

 

       //发送MIME信息

       Printf(“Content-type:text/html\n\n”);//必须两个回车,格式要求

 

       //生成网页

       void htmlHeader(char *title) {

      printf("<HTML><HEAD><TITLE>%s</TITLE></HEAD>",title);

printf("<BODY>");

template_page(postvars, form_method);   //主体内容

printf("</BODY></HTML>");

 

       //template.c中控制7段数码管例子

       const unsigned char ledval[10] =

       {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   

       option1 = getenv("QUERY_STRING");   //提交的内容存入缓冲区*option1

       sscanf(option1,"num=%ld",&num);    //num赋值

if(num>=0||num<=9)

       {

        printf("<p><font size=5>Display number is: %d \n<br><br></P>",num);

                //WriteNios(LED_BASE,0x0000);

                WriteNios(CS_SEG_BASE,0xff);      //LED片选

                WriteNios(LED_SEG_BASE,ledval[num]);       //LED段选

       }

      

利用cgi_generic文件夹中的makefile,直接make,

Make后会在romfs文件夹里自动生成CGI可执行文件,或是直接在uClinux-distmake整个内核.

 

 

2.4 修改romfs下文件

当编译完后,/romfs/home/httpd/cgi-bin下会生成新的CGI可执行文件,

再把刚新建好的index.html文件替换/httpd/index.html.

 

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章