我想在内核和用户空间之间共享变量,我发现使用 procfs 可以实现。 如果设置了给定值,则内核模块必须以某种方式操作。用户空间程序负责更改此值,但内核模块必须在必要时读取它。
我知道我必须在内核模块中创建/proc
文件。
我的问题是,如何从内核模块中读取文件?
答案 0 :(得分:0)
来源: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中写入您的文件,此示例就会显示如何处理此类写入。
答案 1 :(得分:0)
在kernel> = 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,
}