gpt4 book ai didi

从 LKM 在/proc 中创建条目

转载 作者:行者123 更新时间:2023-12-01 14:42:00 29 4
gpt4 key购买 nike

我正在尝试在 /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,但我不知道如何返回。

最佳答案

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

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

关于从 LKM 在/proc 中创建条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17909483/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com