从LKM创建/ proc中的条目

时间:2013-07-28 14:55:55

标签: c linux-kernel kernel-module kernel

我正在尝试在/proc中创建一个条目,这样我就可以控制我的内核模块了。我想我得到了write部分,但我无法弄清楚read部分应该如何运作。

static char proc_data[1];

static ssize_t read_proc(struct file *file, char __user *buf, size_t count, loff_t *pos){
    int ret;
    if(pos > 0){
        ret = 0;
    }else{
        memcpy(buf, proc_data, 1);
        ret = 1;
    }
    return ret;
}

static ssize_t write_proc(struct file *file, const char __user *buf, size_t count, loff_t *pos){

    if(count > 2)
        return -EINVAL;

    if(copy_from_user(proc_data, buf, 1))
        return -EFAULT;

    if(strcmp("1", proc_data) == 0){
        //Do something
    }else if(strcmp("0", proc_data) == 0){
        //Undo something
    }

    return count;
}

如果我从read_proc返回1,如果我在/proc中输入,则不会停止输出相同的值。如果我返回0,它将不会输出任何内容。所以我猜我应该第一次返回1,然后返回0,但我不知道如何。

1 个答案:

答案 0 :(得分:3)

.read.write回调中,通常需要在返回前更新loff_t *pos。 如果您的模块已读取或写入count个字节,请按该数量增加*pos

除此之外,请注意当.read回调返回0时,它表示EOF。如果它永远不会返回0,那么当您cat文件时,系统将无限循环尝试“将文件读到最后”。这就是为什么第一次返回1然后0工作的原因。

相关问题