C语言 在 /proc 中写入文件会持续淹没 dmesg



我正在尝试使用/proc 文件输入工具在 linux 内核模块中读取/写入变量。 内核模块编译成功,但尝试通过

echo 1 > My_file

此操作未完成。

此外,dmesg 控制台不断被一些随机值淹没。

[ 1171.481231] proc_write_flag New_Flag 1124646486
[ 1171.481245] proc_write_flag New_Flag 1124646486
[ 1171.481259] proc_write_flag New_Flag 1124646486
[ 1171.481271] proc_write_flag New_Flag 1124646486
[ 1171.481473] ^C

我是 linux 设备驱动程序的新手/proc并尝试使用 linux 内核提供的工具。我尝试删除此内核模块,但同样,操作没有完成

是什么导致了这种行为,我该如何纠正它?

这是代码:

int my_flag;
static struct proc_dir_entry *pdir = NULL;
MODULE_LICENSE("GPL");
MODULE_AUTHOR("GPL");
static ssize_t proc_read_flag(struct file* page,char __user * data, size_t count, loff_t *offset);
static ssize_t proc_write_flag(struct file *file, const char __user* ubuf, size_t count, loff_t* offset);
static struct file_operations myops = 
{
.owner = THIS_MODULE,
.read = proc_read_flag,
.write= proc_write_flag,
};

//ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
//Updated Read function after the reply.
static ssize_t proc_read_flag(struct file* page,char __user * data, size_t count,loff_t *offset)
{
int ret;
if( count >my_flag)         //my_flag holds the count of chars received by write function.
count = my_flag;
ret = copy_to_user(data, my_buf, my_flag );
printk("%s: ret = %d ,my_flag %dn",__FUNCTION__, ret, my_flag);
return ( my_flag - ret );
}

//ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
//Updated Write function After the reply.
static ssize_t proc_write_flag(struct file *file, const char __user* ubuf, size_t count, loff_t* offset)
{
if( copy_from_user(my_buf,ubuf,count) ){        //Returns No. of bytes could not copy
return -EFAULT;
}
my_flag = count;
printk("%s New_Flag %d Data: %sn",__FUNCTION__,my_flag,my_buf);
return count;
}
int init_module(void)
{
struct proc_dir_entry *pfile = NULL;
pdir = proc_mkdir("My_dir",NULL);
if(!pdir){
return -ENOMEM;
}
pfile = proc_create("My_file", 0666, pdir, &myops);
if(!pfile)
return -ENOMEM;

printk("Proc_entry Created Successfully, Module initializedn");
return 0;
}
void cleanup_function(void)
{
remove_proc_entry("My_file", pdir);
remove_proc_entry("My_dir", NULL);
printk("Removing Proc_entry!!!");
}

write 函数应返回您处理的字节数。

在您的情况下,"proc_write_flag"函数返回"ret",即 0。 这意味着它将被反复调用,直到您处理来自"ubuf"的"计数"字节数

同样,"proc_read_flag"应返回您写入"data"的字节数。在您的情况下,它返回 0 (len(

"proc_write_flag"功能中还有其他问题。

"buf">

数组未初始化,将"buf"(地址(转换为int不会给你预期的答案。

从这个 http://tuxthink.blogspot.com/2013/12/creating-directory-under-proc-in-kernel.html 开始

然后看看 kstrtol(( 函数。

相关内容

  • 没有找到相关文章

最新更新