从C内核模块检查/ proc文件

时间:2014-01-25 13:08:52

标签: c linux-kernel kernel kernel-module procfs

我想在内核和用户空间之间共享变量,我发现使用 procfs 可以实现。 如果设置了给定值,则内核模块必须以某种方式操作。用户空间程序负责更改此值,但内核模块必须在必要时读取它。

我知道我必须在内核模块中创建/proc文件。 我的问题是,如何从内核模块中读取文件?

2 个答案:

答案 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,
}