【问题标题】:How to write to a /proc kernel module如何写入 /proc 内核模块
【发布时间】:2015-03-12 06:55:27
【问题描述】:

当用户写入 proc 时如何获取数据? (即:echo "foo" > /proc/myproc)

我已经看到从 proc 读取(即用户执行“cat /proc/myproc”),详细信息来自该站点:http://www.linux.com/learn/linux-training/39972-kernel-debugging-with-proc-qsequenceq-files-part-2-of-3

这似乎工作得很好,但我还没有看到类似的写作方法。另外,我检查了 TLDP,但他们的文章似乎已经过时了:http://tldp.org/LDP/lkmpg/2.6/html/x769.html

【问题讨论】:

  • 我认为现在 proc 已经被认为是一种旧方式。也许你对 sysfs 更感兴趣。
  • 在 tag-wiki 中查看 LDD3:stackoverflow.com/tags/linux-kernel/info 的东西实际上已经覆盖了那里。
  • 我是学习 sysfs 的游戏。除了 Alex 提供的以外,你能推荐任何好的教程/链接吗?
  • @Maxthecat :我推荐 endyptula 挑战来学习 linux 内核开发,即使答案有时真的很长。

标签: c linux-kernel kernel


【解决方案1】:

实际上处理/proc/sys 的内核API 可能因内核版本而异。好消息是内核本身是不言自明的。意味着您可以轻松地找到仅探索源代码的示例。只需在/proc 中查找支持写入操作的文件即可:

$ ls -l /proc | grep w

例如sysrq-trigger 会:

--w-------  1 root root  0 Mar 12 00:41 sysrq-trigger

然后在内核源码中找到对应的字符串:

$ find . -name '*.[ch]' -exec grep -Hn '"sysrq-trigger"' {} \;

这给了你:

drivers/tty/sysrq.c:1105:   if (!proc_create("sysrq-trigger", S_IWUSR, NULL,

现在查看找到的文件中的代码(查看 here 版本 3.18):

static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf,
                                   size_t count, loff_t *ppos)
{
        if (count) {
                char c;

                if (get_user(c, buf))
                        return -EFAULT;
                __handle_sysrq(c, false);
        }

        return count;
}

static const struct file_operations proc_sysrq_trigger_operations = {
        .write          = write_sysrq_trigger,
        .llseek         = noop_llseek,
};

static void sysrq_init_procfs(void)
{
        if (!proc_create("sysrq-trigger", S_IWUSR, NULL,
                         &proc_sysrq_trigger_operations))
                pr_err("Failed to register proc interface\n");
}

您可以对某些sysfs 文件执行相同的操作。为了更快地搜索,请使用一些代码索引器(例如用于 vim 的 cscope,或 Eclipse 中的内置代码索引器)。

【讨论】:

  • 什么?!阅读来源?!这是什么废话?! :) 好主意
猜你喜欢
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
相关资源
最近更新 更多