一、编译安装web服务器软件 

1.1 boa服务器简介  

BOA 服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。

1.2 boa 的下载及编译

boa 的官网为www.boa.org,也可以在网络上其他地址下载,编译安装方法请参照其他网友的博文。http://blog.chinaunix.net/uid-26442066-id-3170460.html

1.3 CGI(common gateway interface)  

在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。即客户端与服务器的接口。比如留言本的工作流程:先由用户在客户端输入一些信息,如名字之类的东西。接着用户按一下"留言"(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到"留言结束"的字样。整个过程结束。

1.4 下载编译cgic库

cgic库的下载和编译方法请参照其他网友的博文。http://blog.csdn.net/tiantang46800/article/details/7530930

1.5 boa的移植和配置

将1.2中编译生成的两个文件boa-xxx/src/boa和boa-xxx/boa.conf分别拷贝到开发板的/sbin和/etc下面。然后再配置boa.conf。配置boa.conf可参照网络上其他网友博文http://blog.chinaunix.net/uid-8996150-id-2011690.html

1.6 cgic库的移植

在开发板的最顶层新建一个web目录(存放所有的web服务器资源),在该目录下新建一个cgi-bin的目录(存放cgi程序),将编译cgic产生的cgic205/capture和cgitest.cgi拷贝到cgi-bin目录下。

二、led驱动的编写

#include <linux/module.h>

#include <linux/version.h>

#include <linux/init.h>

#include <linux/fs.h>

#include <linux/interrupt.h>

#include <linux/irq.h>

#include <linux/sched.h>

#include <linux/pm.h>

#include <linux/sysctl.h>

#include <linux/proc_fs.h>

#include <linux/delay.h>

#include <linux/irq.h>

#include <asm/uaccess.h>

#include <asm/io.h>

#include <linux/cdev.h>

#include <linux/miscdevice.h>

#include <linux/kernel.h>/*内核有关的*/

#include <asm/uaccess.h> /*uaccess*/

#include <mach/regs-gpio.h>/*寄存器设置*/

#include <mach/hardware.h> /*hardware*/

#define DEVICE_NAME "myled" //设备在/dev目录下的名字

#define ON 1

#define OFF 0

static unsigned long led_table [] ={ S3C2410_GPB5,S3C2410_GPB6,S3C2410_GPB7,S3C2410_GPB8,};//GPBDATA控制led的4个位段

static unsigned int led_cfg_table [] ={ S3C2410_GPB5_OUTP, S3C2410_GPB6_OUTP,S3C2410_GPB7_OUTP, S3C2410_GPB8_OUTP,};//4个led引脚的配置信息

static int led_open(struct inode *inode, struct file *file)

{

int i;

for(i = 0; i < 4; i++)

s3c2410_gpio_cfgpin(led_table[i], led_cfg_table[i]); //配置GPB5,6,7,8为输出

return 0;

}

 

static int led_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)

{

switch(cmd)

{

case ON: s3c2410_gpio_setpin(led_table[arg], 0); return 0;//点亮arg对应的led

case OFF:s3c2410_gpio_setpin(led_table[arg], 1);return 0;//熄灭arg对应的led

default:return -EINVAL;

}

}

 

static struct file_operations leddrv_fops = {

.owner = THIS_MODULE, /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */

.open = led_open,

.ioctl = led_ioctl,

};

 

static struct miscdevice misc = {

.minor = MISC_DYNAMIC_MINOR,

.name = DEVICE_NAME,

.fops = &leddrv_fops,

};

 

static int leddrv_init(void)

{

int ret = misc_register(&misc);/*注册成混杂设备*/

if(ret==0)

printk("设备驱动加载成功!\n");

return 0;

}

 

static void leddrv_exit(void)

{

int ret= misc_deregister(&misc);

if(ret==0)

printk("设备驱动卸载成功!\n");

}

 

module_init(leddrv_init);

module_exit(leddrv_exit);

MODULE_LICENSE("GPL");

三、html网页myled.html编写

我的myled.html文件的编写是使用的Dreamweaver软件;这个编写网页所见即所得,很方便;鉴于html源码的行数很多,我这里只给出它的链接地址:http://pan.baidu.com/share/link?shareid=106662&uk=101680913将myled.html放到开发板上的web目录下,要将这个html文件的处理函数指向myled.cgi

四、服务器端cgi程序myled.cgi编写

cgi程序主要就是处理从客户端发过来的数据,然后再把处理结果传输给客户端, cgi实现了web服务器的动态网页。

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

  char *data;

int leds[4]={0,0,0,0};

long m,n;

int exit=0,i,fd;

 

printf("Content-Type:text/html;charset=gb2312\n\n");//它是一个MIME头信息,它告诉Web服务器随后的输出是以html的形式

printf("<html>\n");

printf("<body>\n");

printf("<title>控制信息已发送成功!</title> ");

printf("<h3>控制信息发送成功</h3> ");

data = getenv("QUERY_STRING");//得到客户端发送过来的数据

printf("<p>接受到的数据为:%s</p>",data);

 

while(*data!='\0')

{

if(*data=='=')

switch(*(data+1))//判断得到的数据

{

case '1':leds[0]=1;break;

case '2':leds[1]=1;break;

case '3':leds[2]=1;break;

case '4':leds[3]=1;break;

default:exit=1;break;

}

if(exit==1)

break;

data++;

}

fd=open("/dev/myled",0);//打开led设备

printf("<p>需要控制的leds为:</p>");

for(i=0;i<4;i++)

{ if(leds[i]==1)

printf("<p>%d\t</p>",i+1);

ioctl(fd,leds[i],i);//根据提取的信息控制led,ioctl(fd,cmd,arg) cmd:on/off arg:num

}

printf("</body>\n");

printf("</html>\n");

return 0;

}

编译:arm-linux-gcc –o myled.cgi myled.c

然后将myled.cgi放到开发板上的cgi-bin下面

 

在开发板上启动boa,开启web服务;

  在电脑上浏览器上输入,192.168.xxx.xxx/myled.html,开始测试


Logo

更多推荐