码迷,mamicode.com
首页 > 其他好文 > 详细

basic misc driver

时间:2015-05-26 14:13:06      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
/////////////////////////////////////////////////
MODULE_LICENSE("Dual BSD/GPL");
int open_state = 0;
/////////////////////////////////////////////////
int misc01_open(struct inode *inode, struct file *filp)
{
    if (open_state == 0)
    {
        open_state = 1;
        printk("misc01 open!\n");
        return 0;
    }
    printk("misc01 has been open!\n");
    return -1;
}

int misc01_release(struct inode *inode, struct file *filp)
{
    if (open_state == 1)
    {
        open_state = 0;
        printk("misc01 release!\n");
        return 0;
    }
    printk("misc01 has not been open yet!\n");
    return -1;
}

ssize_t misc01_read(struct file *filp, char *buf,
        size_t count, loff_t *fpos)
{
    printk("misc01 read!\n");
    return 0;
}

ssize_t misc01_write(struct file *filp, const char *buf,
        size_t count, loff_t *fpos)
{
    printk("misc01 write!\n");
    return 0;
}

long misc01_ioctl(struct file *filp,
        unsigned int cmd, unsigned long arg)
{
    printk("ioctl is called!\n");
    printk("cmd:%d arg:%ld\n", cmd, arg);
        switch(cmd)
        {
                case 0: break;
                case 1: break;
                case 2: break;
                default: break;
        }
    return 0;
}
/////////////////////////////////////////////////
struct file_operations fops = 
{
    .owner      =   THIS_MODULE,
    .write      =   misc01_write,
    .read       =   misc01_read,
    .unlocked_ioctl     =   misc01_ioctl,
    .open       =   misc01_open,
    .release    =   misc01_release,
};

struct miscdevice dev = 
{
    .minor  =   MISC_DYNAMIC_MINOR,
    .fops    =   &fops,
    .name   =   "misc01",
    .nodename = "misc01_node"
};

int setup_misc01(void)
{
    
    return misc_register(&dev);
}
/////////////////////////////////////////////////
static int __init misc01_init(void)
{
    printk("misc01 init!\n");
    return setup_misc01();
}

static void __exit misc01_exit(void)
{
    printk("misc01 exit!\n");
    misc_deregister(&dev);
}

/////////////////////////////////////////////////
module_init(misc01_init);
module_exit(misc01_exit);

 

basic misc driver

标签:

原文地址:http://www.cnblogs.com/kozmers/p/4530287.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!