我试图在/proc
中创建一个条目,以便我可以控制我的内核模块。我想我得到了write
部分,但我无法弄清楚read
部分应该如何工作。从LKM创建/ proc中的条目
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;
}
如果我回到1从read_proc
,如果我的猫我的/proc
项,它不会停止输出相同的值。如果我返回0,它不会输出任何东西。所以我猜我应该第一次返回1,然后返回0,但我不知道如何。
也许你应该打印你从第一次和后续调用中收到的参数...也许具体是偏移参数。他们不是0 /非零,因为你的代码似乎已经解决了? – mah
@mah我想到了这一点,但我看不到它们之间的任何关系,因为count是65535并且是空的。 – alexandernst
我希望在所有情况下(无论调用者要求什么)在块效率上都会得到相同的大小计数,并且随着每次后续调用都会从同一个开放位置增加到该计数大小。请记住,内核调用非常昂贵,因此系统希望将其最小化,并将通过大型缓冲区来实现,从而最大限度地减少要调用的调用数量。 – mah