【问题标题】:Dynamically adding entries to sysctl动态添加条目到 sysctl
【发布时间】:2013-12-08 11:10:17
【问题描述】:

考虑这段代码:

int procmon_state = 0;
static struct ctl_table_header *procmon_table_header;

static ctl_table state_table[] = {
    {
        .procname = "state", .mode = 0666,
        .proc_handler = &proc_dointvec_minmax,
        .data = &procmon_state, .maxlen = sizeof(int),
        .extra1 = "\x00\x00\x00\x00" /*0*/, .extra2 = "\x01\x00\x00\x00" /*1*/
    },
    { 0 }
};

static ctl_table procmon_table[] = {
    {
        .procname = "procmon", .mode = 0555,
        .child = state_table
    },
    { 0 }
};

procmon_table_header = register_sysctl_table(procmon_table);

这将在/proc/sys 中创建一个条目(这样我就可以只使用sysctl procmon.state=1)。

我的问题是:创建该条目后,如何添加更多条目?

编辑:procmon 中有更多条目,也就是说。例如,procmon.another_state

【问题讨论】:

  • 可能是register_sysctl_paths 有帮助吗?
  • 我会看proc_create_data()
  • 确实,register_sysctl_paths 可能会有所帮助。我去看看,谢谢!另一方面,proc_create_data 它太新了(仅限 3.10+),即使我希望我不能使用它。
  • 上面的源码应该加在sysctl.h文件里面吧?
  • @SowndaryaK 这是你的内核模块代码的一部分

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


【解决方案1】:

是的,您可以,只需查看 linux 内核的驱动程序目录中的许多示例即可。本质上,您只需要多次调用 register_sysctl_table() ,对于您进行的每次调用,您都将在现有分支上创建一个分支。

这里有详细介绍:

https://tthtlc.wordpress.com/2016/05/26/how-to-add-new-entries-to-sysctl-with-the-same-root/

【讨论】:

    【解决方案2】:

    sysctl.h 中没有更改 sysctl 表的功能。

    在调用register_sysctl_table之前,您必须列出所有可能需要的条目

    如果你之后确实需要更改表,你必须在进行修改之前调用unregister_sysctl_table,然后重新注册。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 2011-11-15
      • 2012-08-27
      • 1970-01-01
      相关资源
      最近更新 更多