【问题标题】:Check /proc file from C kernel module从 C 内核模块检查 /proc 文件
【发布时间】:2014-02-16 12:38:19
【问题描述】:

我想在内核空间和用户空间之间共享一个变量,我发现使用 procfs 是可能的。 如果设置了给定值,内核模块必须以某种方式运行。用户空间程序负责改变这个值,但是内核模块必须在必要时读取它。

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

【问题讨论】:

  • 不鼓励使用 proc 将变量共享给用户空间,并且主线不会接受任何这样做的代码,除非您有一个非常非常好的理由来创建一个 proc 条目。改用 sysfs 来解决这个问题。
  • @tangrs ,那我试试 sysfs。感谢您的所有回复!

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


【解决方案1】:

来源: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 中写入您的文件时,在您的模块中,此示例显示如何处理此类写入。

【讨论】:

  • 这很有帮助,但我会转到 sysfs。谢谢
【解决方案2】:

在内核 >= 3.10 中,proc_write 被移动到结构 file_operations 中,其中写入的声明不同,因此在最新版本中您的解决方案将不起作用。 您可以实现典型的 file_operations.write(struct file *, const char __user *, size_t, loff_t *) 并将其引用到:

struct proc_dir_entry your_proc_dir_entry{
.proc_fops = &your_fops,
}

【讨论】:

    猜你喜欢
    • 2011-02-15
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    相关资源
    最近更新 更多