Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2108979
  • 博文数量: 333
  • 博客积分: 10161
  • 博客等级: 上将
  • 技术积分: 5238
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-19 08:59
文章分类

全部博文(333)

文章存档

2017年(10)

2014年(2)

2013年(57)

2012年(64)

2011年(76)

2010年(84)

2009年(3)

2008年(37)

分类: LINUX

2013-12-25 09:43:26

#include                                                                                                               
#include
#include
#include
#include

// 定义存储写入信息的结构体
struct priv_dev {
    struct proc_dir_entry *proc;
    char *buffer;
};


struct priv_dev *dev;

//proc读
int proc_read(char *page,char **start,off_t off,int count,int *eof,void *data)
{
    return sprintf(page,"%s",dev->buffer);
}

//proc写
int proc_write(struct file *file,const char __user *buffer,unsigned long count,void *data)
{
    if(copy_from_user(dev->buffer,buffer,count)) {
        return -EFAULT;
    }
    return count;
}


static int __init my_init(void)
{
    int ret;
    dev = kzalloc(sizeof(*dev),GFP_KERNEL);
    if(!dev) {
        ret = -ENOMEM;
        goto e_mem;
    }
    dev->buffer = kzalloc(0X1000,GFP_KERNEL);
    if(!dev->buffer) {
        ret = - ENOMEM;
        goto e_buffer;
    }
//创建具有读写权限的proc文件
    dev->proc = create_proc_entry("my_proc",0644,NULL); 
    if(!dev->proc) {
        ret = -EBUSY;
        goto e_proc;
    }
//proc操作映射到我们自己定义的函数
    dev->proc->read_proc = proc_read;
    dev->proc->write_proc = proc_write;
    return 0;
e_proc:
    kfree(dev->buffer);
e_buffer:
    kfree(dev);
e_mem:
    return ret;
}

//模块推出
static void __exit my_exit(void)
{
    remove_proc_entry("my_proc",NULL);
    kfree(dev->buffer);
    kfree(dev);
}

//模块初始化
module_init(my_init);
module_exit(my_exit);

阅读(4515) | 评论(0) | 转发(0) |
0

上一篇:sar命令详解

下一篇:linux字符驱动学习

给主人留下些什么吧!~~