字符型驱动程序的结构框架

2014-11-23 23:18:22 · 作者: · 浏览: 3
/**************************************************************************
						驱动框架
	1、写出led_open、led_read
	2、怎样告诉内核
		a、定义一个file_operations
		b、把这个结构告诉内核register_chrdev
		c、谁来调用澹(这个称为驱动的入口函数)

		d、修饰
*******************************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include



/*打开设备函数*/

static int my_led_open(struct inode *inode,struct file *file)
{
	printk("my_led here\n");
	return 0;
}
/*设备写函数*/

static ssize_t my_led_write(struct file *file,const char __usr *buf,size_t count,loff_t *ppos)
{
	printk("my_led out\n");
	return 0;
}


/*定义一个file_operations结构*/
static struct file_operations my_led_fops={
	.owner	=	THIS_MODULE,	/*这是一个宏,推向编译模块时自动创建的__this_module变*/
	.open	=	my_led_open,
	.open	=	my_led_write,
};


int my_led_init(void)//入口函数
{
	register_chrdev(111,"my_led",&my_led_fops);//注册驱动
	return 0;
}

int my_led_exit(void)//出口函数
{
	unregister_chrdev(111,"my_led");//注销驱动
	return 0;
}

module_init(my_led_init);//修饰(即用一个宏来定义一个结构体)
module_exit(my_led_init);//修饰(即用一个宏来定义一个结构体)
#include
#include
#include
#include

int main(int argc,char **argv)
{
	int fd;
	int val = 1;
	fd = open("/dev/my_led",O_RDWR);
	if(fd<0)
		printf("open err\n");
	write(fd,&val,4);
	return 0;
}