基于web的远程led控制
一、编译安装web服务器软件 1.1 boa服务器简介 BOA 服务器是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。1.2 boa 的下载及编译boa 的官网为www.boa.org,也可以在网络上其他地址下载,编译安装方法请参照其他网友的博文。http://bl
一、编译安装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,开始测试
更多推荐
所有评论(0)