我想在内核和用户空间之间共享一个变量,我发现它可以使用procfs。如果设置了给定值,内核模块必须以某种方式运行。用户空间程序负责改变这个值,但内核模块必须在必要时读取它。
我知道我必须/proc
在内核模块中创建文件。我的问题是,如何从内核模块中读取文件?
我想在内核和用户空间之间共享一个变量,我发现它可以使用procfs。如果设置了给定值,内核模块必须以某种方式运行。用户空间程序负责改变这个值,但内核模块必须在必要时读取它。
我知道我必须/proc
在内核模块中创建文件。我的问题是,如何从内核模块中读取文件?
在内核 >= 3.10 中,proc_write 被移动到结构 file_operations 中,其中 write 的声明不同,因此在最新版本中,您的解决方案将不起作用。您可以实现典型的 file_operations.write(struct file *, const char __user *, size_t, loff_t *) 并将其引用到:
struct proc_dir_entry your_proc_dir_entry{
.proc_fops = &your_fops,
}
来源:linux.die.net/lkmpg/x769.html
/**
* This function is called with the /proc file is written
*
*/
int procfile_write(struct file *file, const char *buffer, unsigned long count,
void *data)
{
/* get buffer size */
procfs_buffer_size = count;
if (procfs_buffer_size > PROCFS_MAX_SIZE ) {
procfs_buffer_size = PROCFS_MAX_SIZE;
}
/* write data to the buffer */
if ( copy_from_user(procfs_buffer, buffer, procfs_buffer_size) ) {
return -EFAULT;
}
return procfs_buffer_size;
}
为了澄清,每当用户在 procfs 中写入您的文件时,在您的模块中,此示例显示如何处理此类写入。